INF檔案詳解

來源:互聯網
上載者:User

INF檔案格式要求
一個INF檔案是以段組織的簡單的文字檔。一些段油系統定義(System-Defined)的名稱,而另一些段由INF檔案的編寫者命名。每個段包含特定的條目和命名,這些命名用於引用INF檔案其它地方定義的附加段。
INF檔案的文法規則:
1、要求的內容:在特定的INF檔案中所要求的必選段和可選段、條目及命令依賴於所要安裝的裝置群組件。端點順序可以是任意的,大多數的INF檔案安裝慣用的次序來安排各個段。
2、段名:INF檔案的每個段從一個括在方括弧[]中的段名開始。段名可以由系統定義或INF編寫者定義
在Windows 2000中,段名的最大長度為255個字元。在Windows 98中,段名不應該超過28個字元。如果INF設計要在兩個平台上運行,必須遵守最小的限制。段名、條目和命令不分大小寫。在一個INF檔案中如果有兩個以上的段有相同的名字,系統將把其條目和命令合并成一個段。每個段以另一個新段的開始或檔案的結束為結束。
3、使用串標記:在INF檔案中的許多值,包括INF編寫者定義的段名都可以標示成%strkey%形式的標記。每個這樣的strkey必須在INF檔案的Strings段中定義為一系列顯示可見字元組成的值。
4、行格式、續行及注釋:段中的每個條目或命令以斷行符號或分行符號結束。在條目或命令中,“/”可以沒用做一個顯示的續行符;分好“;”標示後面的內容是注釋;可以用都好“,”分隔條目和命令中提供的多個值。
INF檔案舉例
下面是一個完整的.inf檔案,它是Windows 2000 DDK提供的USB批量闡述驅動程式範例中所附的.inf檔案。
; Installation inf for the Intel 82930 USB Bulk IO Test Board
;
; (c) Copyright 1999 Microsoft
;
[Version]
Signature="$CHICAGO$"
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
[SourceDisksNames]
1="BulkUsb Installation Disk",,,
[SourceDisksFiles]
BULKUSB.sys = 1
BULKUSB.inf = 1
[Manufacturer]
%MfgName%=Microsoft
[Microsoft]
%USB/VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB/VID_045E&PID_930A
;[PreCopySection]
;HKR,,NoSetupUI,,1
[DestinationDirs]
BULKUSB.Files.Ext = 10,System32/Drivers
BULKUSB.Files.Inf = 10,INF
[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT.Services]
Addservice = BULKUSB, 0x00000002, BULKUSB.AddService
[BULKUSB.AddService]
DisplayName = %BULKUSB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%/System32/Drivers/BULKUSB.sys
LoadOrderGroup = Base
[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"System/Currentcontrolset/Services/BulkUsb/Parameters","MaximumTransferSize",0x10001,4096
HKLM,"System/Currentcontrolset/Services/BulkUsb/Parameters","DebugLevel",0x10001,2
[BULKUSB.Files.Ext]
BULKUSB.sys
[BULKUSB.Files.Inf]
BulkUsb.Inf
;---------------------------------------------------------------;
[Strings]
MSFT="Microsoft"
MfgName="Intel"
USB/VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"
BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"
INF檔案詳解
從上面完整的例子來看,可以對INF檔案有的一個總體的印象,包括INF檔案中包括的段,以及各段的書寫格式。下面詳細介紹組成INF檔案的各個段。
1、[Version]段
習慣上,每個INF檔案都開始於一個Version段,這段確定檔案中描述的裝置類型,上述範例中的Verson段有如下幾條語句:
Signature=”$CHICAGO$”
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
Signature指定使用此INF檔案的作業系統,可以是$Chicage$、$Windows NT$(含有一個空格)、$Windows 95$(含有一個空格)之一,定界符$必不可少,且這些串是不分大小寫。如果Signature的值不是這些有效串之一,該INF檔案就被人為無效。如果一個INF檔案用來向Windows 2000和Windows 98兩個平台上安裝裝置驅動程式,它必須通過DDInstall段來增加系統定義的擴充指定任意作業系統特有的安裝資訊,而不管Signature是何值。
Class指定裝置的類名,此範例中指定的是USB類。ClassGuid指定裝置註冊表的GUID,GUID是一個128位的標識符,DDK標頭檔DEVGUID.h定義了標準裝置類的GUID。
Provide標誌該INF檔案的提供者。%MSFT%的具體內容將在Strings段中定義,範例中的定義是MSFT=”Microsoft”,表明該INF檔案的提供者是Microsoft。
DriverVer條目提供整個INF檔案的版本資訊,在每個Install段中加上DriverVer條目,為驅動程式提供版本資訊。Install段的驅動程式版本條目更具有專用性,並且比Version段的全域DriverVer條目日期具有更高的優先順序。當作業系統搜尋驅動程式時,他會選擇一個具有更近的DriverVer日期的驅動程式代替一個較早的驅動程式。如果一個INF沒有DriverVer條目,作業系統將會用預設的日期00/00/0000。
2、[SourceDiskNames]段
該段制定並且命名一個或多個包含源檔案的磁碟,這些源檔案用於檔案拷貝或者重新命名操作。該段可以有任意條目,每個條目對應一個來源硬碟。條目格式如下:
disk=%strkey%|”disk-description”,[tagfile],[unused],[path]
diskid是標誌一個來源硬碟的非負整數。這個值可以是十六進位或者十進位的形式標示,但他不能佔用多餘4個位元組的儲存單元。等式右邊規定一個%strkey%標記或者一個引號引起來的串,描述由diskid所標示盤符的內容或目的。在安裝過程中安裝程式可以給終端使用者顯示這個串值。TagFile是一個可選的值,規定一個所帶磁碟上提供的特徵檔案名稱,不規定任何目錄和子目錄。安裝程式使用特徵檔案核對使用者插入正確的安裝盤。特徵檔案只能用於可移動的介質。
Unused值不用在Windows 2000中,只用在Windows 9x中。Path也是個可選項,用於標識磁碟上包含源檔案的目錄路徑。範例中SourceDisksNames段的內容如下:
[SourceDiskNames]
1=”BulkUsb Installation Disk”…
範例規定來源硬碟為磁碟1,在安裝期間,安裝程式可以給終端使用者顯示字串“BulkUsbInstallation Disk”。
3、[SourceDisksFiles]段
該段命名安裝過程中所用的源檔案,標誌包含這些源檔案的磁碟(或者CD-ROM),並提供在所帶磁碟上包含的每個檔案的目錄路徑。一個SourcesDisksFiles段可以有任意多條目,磁碟上每個檔案都有一個條目。它所包含的條目格式為
filename=disked[,[subdir][,size]]。
Filename規定磁碟上源檔案的名稱;diskid對頂一個整數來標誌包含源檔案的磁碟,即在
SourceDisksNames段中規定的diskid;subdir是個可選值,它規定了源磁碟上的檔案所在的子目錄,如果該條目省略,指定的源檔案或者在給定磁碟的根目錄中,或者在由SourceDisksNames段中的path條目所指定的目錄;size也是個可選值,規定了給定檔案的非壓縮長度,其以位元組標示。範例中SourceDisksFiles段的內容如下:
[SourceDisksFiles]
BULKUSB.sys=1
BULKUSB.inf=1
範例中為兩個檔案建立的條目,這兩個檔案都在磁碟1中,並且在根目錄下。
4、[Manufacturer]段
該段標誌一個或者多個用INF檔案安裝的裝置的製造商,它也為製造商的裝置即驅動程式的安裝定義Models段名。每個INF檔案都必須有Manufacturer段。
上述範例的Manufacturer段有一個條目:
[Manufacturer]
%MfgName%=Microsoft
在Strings段中可以找到%MfgName%定義的字串,本範例中定義的是MfgName=”Intel”,表明裝置製造商是Intel。而右邊Microsoft也是製造商的Models段的段名。在INF中,為每個製造商的Models段規定了一個INF編寫者定義的名字,這個名稱要在Manufacturer段中加以應用。範例中的製造商Models段如下:
[Microsoft]
%USB/VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB/VID_045E&PID_930A
該段屬於製造商的Models段,段名是由INF編寫者自行定義的,不屬於系統段名。每個製造商的Models段至少標識一個裝置,並規定裝置的廠商ID(VID)和產品ID(PID)同時引用這個裝置INF檔案的Install段。該段也可以規定一個或者多個附加元件ID,因為有多個與初始硬體ID所識別的裝置相容,同時由相同的驅動程式驅動。當裝置管理員發現從檢測裝置所得到的ID,符號此段定義的ID時,裝置管理員就知道找到了正確的INF檔案。
範例中規定了一個裝置,裝置的VID是0x045E,而PID是0x930A。VID是由USB管理委員會給每個USB晶片廠商統一分配的,例如Philips公司的VID是0x0471,Cypres公司的VID是0x0547等,範例中的VID是Intel公司的。產品ID(PID)是由各個廠商自己定義的,這裡VID0x930A是Intel的一個USB批量傳輸的實驗板。
範例中該條目等式右邊的BULKUSBDev給裝置標識了一個INF檔案編寫者定義的Install段。
5、[DestinationDirs]段
該段為所有的硬體拷貝、刪除和改名操作規定目標目錄。範例中的DestinationDirs段如下:
[DestinatinDirs]
BULKUSB.Files.Ext=10,System32/Drivers
BULKUSB.Files.Inf=10.INF
DestinationDirs段中條目等式的左邊規定INF檔案編寫者定義的段名,這些段中的檔案將會被存入等式右邊指定的目錄中,並且這些檔案可以被INF檔案中其他地方的CopyFiles、RenFiles和DelFiles命令引用。例如,範例中這兩個段的定義如下:
[BULKUSB.Files.Ext]
BULKUSB.sys
[BULKUSB.Files.Inf]
BULKUSB.Inf
DestinationDirs段中條目等號右邊的10是一個邏輯磁碟標誌符號(Logical Disk Identifier, LDID),它規定了對檔案操作的目標目錄標識符,後面跟隨的是子目錄,作為檔案操作的目標地址。範例中第一個檔案BULKUSB.sys的目標地址是WinNT/System32/Drivers;第二個檔案BULKUSB.Inf的目標地址是WinNT/INF。
DestinationDirs段也可以包含一個預設目標目錄DefaultDestDird的條目,為所有對檔案的拷貝、刪除和更名操作規定省略的目標路徑,這些檔案沒有明確的列在其它條目所引用的檔案清單中。Windows DDK的Device Information File Reference檔案有其他的LDID熟知的定義,如下表。
常用LDID定義
LDID數值
目標目錄
00
NULL LDID,此LDID可以用來建立新的LDID
01
源磁碟機:/路徑
02
臨時安裝資料夾,只在安裝期間有效
03
解除安裝目錄
10
Windows目錄
11
系統目錄
12
IO子系統目錄
13
Command目錄
14
控制台目錄
15
印表機目錄
16
工作類別目錄
17
INF目錄
18
Help目錄
19
登記
20
字型
21
Viewers
22
VMM32
23
Color目錄
24
應用程式目錄
25
共用目錄
26
WinBoot
28
主機Winboot
30
引導磁碟機的根目錄
31
虛擬引導磁碟機的主機磁碟機的根目錄
5、Install段
Install段包含指導安裝程式安裝所需軟體的實際指示。該段必須在一個裝置或者型號(Model)的條目中引用。每個Models的每個Install段包括一個可選的DriverVer條目和一個或多個引用INFormation中附加命令段的命令,這些命令索引用的段包含安裝驅動程式檔案及向註冊表寫入裝置專用的和驅動程式專用資訊命令。這裡,首先列出這個斷的常用格式
[install-section-name]
[install-section-name.nt]
[install-section-name.ntx86]
[DriverVer=mm/dd/yyyy]
[CopyFiles=@filename|file-list-section]
Addreg=add-registry-section
[include=filename.inf]
… …
… …
首先,看到有3個可選的段名,在Windows 9x平台中,提供了一個無修飾的Install段名[install-section-name],其中規定裝置的安裝條目。在Windows 2000平台中,提供相應的
[install-section-name.nt]段名,如果還要限定在x86為基礎的Windows 2000平台上,則提供[install-section-name.ntx86]段名。裝置安裝程式將搜尋最合適尾碼的install段,例如,假設有3個install段,第一個無尾碼,後兩個分別帶有.NT和.NTx86尾碼。如果安裝到x86平台上的Windows 2000中,安裝程式會使用.NTx86段;如果安裝到非Intel平台上啟動並執行Windows 2000中,安裝程式將使用.NT段;如果安裝到Windows 98中,安裝程式使用無尾碼段。DriverStudioVer條目就是前面敘述的版本資訊。
☆[CopyFiles=@filename|file-list-section]:或者指定一個要從源媒體拷貝到目標裝置的檔案名稱,或者引用一個或多個INFormation編寫者定義的段,其中列出了源媒體上要拷貝到目標裝置的相關檔案。這個命令是可選的,但是大多數的段都包括這個命令。
☆Addreg=add-registry-section:這個命令引用一個或多個INFormation編寫者定義的段,其中規定了要寫入註冊表的新的子鍵,這些新關鍵字可能有初始條目,在這些段中也可以修改 已有關鍵字的值。範例中索引用的段如下:
[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"System/Currentcontrolset/Services/BulkUsb/Parameters","MaximumTransferSize",0x10001,4096
HKLM,"System/Currentcontrolset/Services/BulkUsb/Parameters","DebugLevel",0x10001,2
HKLM是註冊表的根鍵,它是HKEY_LOCAL_MACHINE的縮寫。而HKR與註冊表關鍵字相關,最適合於AddReg命令出現的地方。比如,註冊表中每個裝置的“硬體”子鍵:../Enum/列舉程式ID/裝置ID,與此相對的註冊表中每個驅動程式指定的“軟體”子鍵:..CLASS/類GUID/裝置ID等。除此之外還有HKCR、HKCU、HKLM和HKU。
前面所舉範例的Install段如下:
[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
所需拷貝的兩個檔案在INF編寫者定義的BULKUSB.Files.Ext和BULKUSB.Files.Inf段中,而要添加到註冊表的項目則在BULKUSB.AddReg段中。
6、Install.Service段
該段包含一個或者多個AddService命令,用以控制一個特定驅動程式的服務裝在的時間按和方式,控制本服務對其他服務和下一級驅動程式的依賴等,房裡中的定義如下:
BULKUSB.Dev.NT.Services]
Addservice = BULKUSB, 0x00000002, BULKUSB.AddService
其中,BULKUSB是指定的所需安裝服務的名稱。對於一個裝置,這個值通常是該裝置驅動程式的屬性。0x00000002是一個系統指定的標記(Flag),不同的標記有不同的服務功能。最後一項BULKUSB.AddService是INF檔案編寫者定義的特定段,其中包括了所需添加的服務項目,其範例的定義如下:
[BULKUSB.AddService]
DisplayName = %BULKUSB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%/System32/Drivers/BULKUSB.sys
LoadOrderGroup = Base
8、[Strings]段
[Strings]段就是字串段。該段定義了其他段內所指定的字串,段內的每一個項目都符合一個在其他段內使用百分比符號(%)包括起來的字串。範例中的定義如下:
[Strings]
MSFT="Microsoft"
MfgName="Intel"
USB/VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"
BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"
GenInf軟體產生Inf檔案
Windows 2000DDK提供了一個公用程式GenInf,他可以產生INF檔案。GenInf是一個INF檔案產生嚮導工具,可以協助使用者產生一個自訂的Windows 2000驅動程式的INF檔案。使用者只需要按照嚮導的提示填寫必要的資訊,他就可以自動產生一個INF檔案。但是,GenInf只能產生但結構的INF檔案,而並不支援多結構的INF檔案。另外,GenInf並不一定總是能夠產生一個完成的或者功能完備的INF檔案。因此,使用者號必須做一些必要的修改。
用GenInf產生INF檔案之後,還可以使用Windows 2000 DDK提供的ChkInf公用程式來檢查所產生的INF檔案的結構和文法是否正確。ChkInf程式是一個Perl Scrip,因此,需要由Perl解譯器才能運行它。檢測的結果以HTML的格式儲存,包括所有的錯誤和警告的列表。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.