參考一:百度百科web
參考二:INF文件的節windows
參考三:wikipedia網絡
參考四:MSDN: INF Fileide
INF文件的節字體
INF文件是一個文本文件,由許多按層次結構排列的節組成,他們以方括號中的節名稱開始,如[Version]、[Manufacturer]等,後面是改接所含有的各個項,如Signature、DriverVer等。節中各項的基本定義格式爲ui
entry=value[,value…]this
其中,「entry」標示項名稱,「value」標示該想的取值。節名和項名稱都不區分大小寫,且對於Windows 98,其必須小於28個字符;對於Windows 2000,其長度的最大值爲255個字節。下表是INF文件中經常使用的節。spa
INF文件中經常使用的節操作系統
節.net |
說明 |
Version |
INF文件的開始 |
SourceDisksNames |
指明去的那個程序所在的磁盤或CD-ROM |
SourceDisksFiles |
指明驅動程序的文件名 |
Destination |
指明INF文件和驅動程序的目標文件 |
Manufacturer |
指明供應商及其對應Models節的名稱 |
Models |
指明Install/DDInstall節的名稱、設備的硬件ID等信息 |
Install(Windows 98) Install(Windows 2000) |
指明需複製的文件、想註冊表中添加的內容等信息 |
DDInstall.Services 僅適用於Windows 2000 |
指明驅動程序安裝的詳細信息 |
String |
指明一系列字符串 |
1Version節
Version節一般做爲INF文件的開始,下表列出了其包含的各項。全部INF文件都必須含有Version節及其Signature項
Version節中的各項
項 |
說明 |
Signature |
指明驅動程序的簽名,其取值爲:$Windows NT$、$Windows 95$、$Chicago$、 |
Class |
指明驅動程序所屬的類別 |
ClassGuid |
指明設備類的GUID,其格式爲:{nnnnnnnn-nnnn-nnnn-nnnnnnnnnnnn}① |
Provider |
指明該INF文件的供應商 |
LayoutFile |
僅由操做系統內部提供的INF文件使用 |
CatalogFile |
指明數字簽名文件的文件名,其擴展名爲.cat |
DriverVer |
指明驅動程序的版本信息,其格式爲:mm/dd/yyyy[,x.y.v.z] |
注:①n表明一個16進制數 |
下面對主要的各項進行詳細介紹。
①.Signature項:指明驅動程序的簽名。對於Windows 98和Windows 2000下的USB設備驅動程序,該項的取值一般爲「$Chicago$」。
②.Class和ClassGuid項:指明驅動程序所屬的設備類別及其GUID,其取值狀況見下表。
經常使用設備類別及其GUID
Class |
ClassGuid |
說明 |
1394 |
6BDD1FC1-810F-11D0-BEC7-08002BE2092F |
1394主控制器 |
CDROM |
4D36E965-E325-11CE-BFC1-08002BE10318 |
CD-ROM驅動器 |
DiskDrive |
4D36E967-E325-11CE-BFC1-08002BE10318 |
磁盤驅動器 |
Display |
4D36E968-E325-11CE-BFC1-08002BE10318 |
顯示適配器 |
FDC |
4D36E969-E325-11CE-BFC1-08002BE10318 |
軟盤驅動器 |
HDC |
4D36E96A-E325-11CE-BFC1-08002BE10318 |
硬盤控制器 |
HIDClass |
745a17a0-74d3-11d0-b6fe-00a0c90f57da |
人機接口設備 |
Keyboard |
4D36E96B-E325-11CE-BFC1-08002BE10318 |
鍵盤 |
Modem |
4d36e96c-e325-11ce-bfc1-08002be10318 |
調制解調器 |
Monitor |
4d36e96e-e325-11ce-bfc1-08002be10318 |
監視器 |
Mouse |
4d36e96f-e325-11ce-bfc1-08002be10318 |
鼠標 |
Net |
4d36e972-e325-11ce-bfc1-08002be10318 |
網絡適配器 |
Ports |
4d36e978-e325-11ce-bfc1-08002be10318 |
端口(COM&LPT) |
Printer |
4d36e979-e325-11ce-bfc1-08002be10318 |
打印機 |
System |
4d36e97d-e325-11ce-bfc1-08002be10318 |
系統設備 |
TapeDrive |
6D807884-7D21-11CF-801C-08002BE10318 |
磁帶驅動器 |
USB |
36FC9E60-C465-11CF-8056-444553540000 |
USB |
③.DriverVer項:指明驅動程序的版本信息。其「mm/dd/yyyy」表明月/日/年;「x.y.v.z」表明驅動程序的版本號,它是可選的。
2.SourceDisksNames節
SourceDisksNames節指明設備驅動程序所在的磁盤或CD-ROM,其各項的格式以下:
diskid=disk-description,disk-label,disk-serial-number (Windows 98)
diskid=disk-description[,[tagfile][,unused,path]] (Windows 2000)
其中,「disked」指出磁盤驅動器的編號,它是正整型數,一般從1開始,且不能重複;「disk-description」表示磁盤的描述信息,他一般爲一個字符串。對於Windows 98,「disk-label」指出磁盤的卷標;「disk-serial-numbe」指出磁盤的序列號。對於Windows 2000,「tagfile」指出磁盤標籤文件的文件名;「unused」保留未用;「path」指出驅動程序所在的路徑;「[ ]」表示可選參數。
3.SourceDisksFiles節
SourceDisksFiles節指明設備驅動程序的文件全路徑,其各項格式以下:
filename=diskid[,subdir] (Windows 98)
filename=diskid[,[,subdir][,size]] (Windows 2000)
其中,「filename」指出驅動程序的文件名;「diskid」指出磁盤驅動器的編號;「subdir」指出該文件在磁盤上的路徑;「size」指出該文件未經壓縮時的大小,以字節爲單位。
4.DestinationDirs節
DestinationDirs節指明INF文件和設備驅動程序的目標目錄。當INF文件使用CopyFiles、DelFiles、RenFiles指令時,則必須包含該節。其各項的格式以下:
DefaultDestDir=dirid[,subdir]
File-list-section=dirid[,subdir]
其中,「DefaultDestDir」是一個項名稱,表明文件複製、刪除、重命名操做的缺色很難幹目標目錄;「file-list-section」指出CopyFiles、DelFiles、RenFiles指令所引用的節;「dirid」指出目標目錄值,見下表;「subdir」指出dirid目錄下的子目錄。
DestinationDirs節中的經常使用dirid
dirid |
目標目錄 |
dirid |
目標目錄 |
10 |
Windows目錄:%windir% |
17 |
INF目錄 |
11 |
系統目錄 Windows 98:%windir%/system Windows 2000:%windir%/system32 |
18 |
幫助目錄 |
20 |
字體目錄 |
||
12 |
驅動程序目錄 Windows 98:%windir%/system/IoSubsys Windows 2000:%windir%/system32/drivers |
23 |
顏色目錄 |
24 |
應用程序目錄(Windows2000) |
||
13 |
命令目錄(Windows98) |
25 |
共享目錄 |
14 |
控制面板目錄(Windows98) |
50 |
%windir%/system(Windows2000) |
15 |
打印機目錄(Windows98) |
54 |
Ntldr.exe和osloader.exe所在的目錄(Windows2000) |
16 |
工做組目錄(Windows98) |
55 |
打印處理器目錄(Windows2000) |
5.Manufacturer節
Manufacturer節指明供應商及其對應Models接的名稱,其各項的格式以下:
%strkey%=models-section-name
其中,「strkey」表明設備製造的名字,其字符串值在String節中定義;「models-section-name」指出Models節的名稱。
6.Models節
Models節指明Install/DDInstall節的名稱、設備的硬件ID和兼容ID等信息,其節名稱由Manufacturer節指定。其各項的格式以下:
device-description=install-section-name,hw-id[,compatiable-id…]
其中,「device-description」指出設備的表述信息,他能夠是一個字符串,也可使一個%strkey%;「install-section-name」指出Install/DDInstall節的名稱;「hw-id」指出設備的硬件ID;「compatiable-id」指出設備的兼容ID。
7. Install/DDInstall節
Install/DDInstall節指明需複製的文件、想註冊表中添加的內容等信息,其節名稱由Models節指定。下表列出了其包含的經常使用項。
Install/DDInstall節中的經常使用項
項 |
說明 |
DriverVer |
指明驅動程序的版本信息,格式爲:mm/dd/yyyy[,x.y.z] |
CopyFiles |
指明需複製的文件,格式爲: CopyFiles=@filename|file-list-section[,file-list-section]... |
AddReg |
指明向註冊表中添加的其餘INF文件按,格式爲: AddReg=add-registry-section[,add-registry-section]… |
Include |
指明安裝時須要的其餘INF文件,格式爲: Include=filename.inf[,filename2.inf]… |
Needs |
指明安裝時所需的特定INF文件,格式爲: Needs=inf-section-name[,inf-section-name]… |
Delfiles |
指明需刪除的文件,格式爲: Delfiles=inf-section-name[,inf-section-name]… |
RenFiles |
指明需重命名的文件,格式爲: Renfiles=inf-section-name[,inf-section-name]… |
DelReg |
指明需刪除的註冊表內容,格式爲: DelReg=del-registry-section[,del-registry-section]… |
Install/DDInstall節中的經常使用項的詳細介紹。
① CopyFiles項:它是Install/DDInstall節中的一個基本指令,用於指明須要複製的文件。其「filename」指出目標文件名;「file-list-section」是其建立的文件列表節,該節格式爲
[file-list-section]
destination-file-name[,source-file-name][,temporary-file-name][,flag]
其中,「destination-file-name」指出目標文件名;「source-file-name」指出源文件名,若是其和目標文件名相同,則可忽略該參數;「temporary-file-name」指出複製操做過程當中所須要的臨時文件名,他只適用於Windows 98;「flag」指出該文件的一些處理方法,其取之狀況以下表。
CopyFiles項中的flag參數
值 |
符號 |
說明 |
0x00000400 |
COPYFLG_REPLACEONLY |
僅替換目標目錄中的文件 |
0x00000800 |
COPYFLG_NODECOMP |
複製並不解壓縮 |
0x00000008 |
COPYFLG_FORCE_FILE_IN_USE |
將源文件賦值爲臨時文件名,以從新命名 |
0x00000010 |
COPYFLG_NO_OVERWRITE |
不替換原有文件 |
0x00001000 |
COPYFLG_REPLACE_BOOT_FILE |
強制用戶從新引導系統 |
0x00002000 |
COPYFLG_NOPRUNE |
強制複製文件 |
0x00000020 |
COPYFLG_NO_VERSION_DIALOG |
不覆蓋新版本的文件 |
0x00000004 |
COPYFLG_NOVERSIONCHECK |
可覆蓋任何版本的文件 |
0x00000040 |
COPYFLG_OVERWRITE_ORDER_ONLY |
僅覆蓋舊版本的文件 |
0x00000001 |
COPYFLG_WARN_IF_SKIP |
當用戶跳過文件時發出警告 |
0x00000002 |
COPYFLG_NOSKIP |
不容許用戶跳過文件 |
② AddReg項:它是Install/DDInstall節所必須包含的指令,用於指明需項註冊表中添加的內容。其「add-registry-section」是它建立的添加註冊表節,該節的格式爲
[add-registry-section]
reg-root, [subkey], [value-entry-name], [flags], [value]
其中,「reg-root」指出註冊表樹的根目錄,它的取值在下表中;「subkey」指出reg-root下的子目錄(或稱子鍵);「value-entry-name」指出要增長的註冊表值;「flags」指出其對註冊表的一些處理方法,取值在下面的flags表中;「value」指出新增長註冊表值的數據。
AddReg項中的reg-root參數
值 |
說明 |
HKCR |
HKEY_CLASSES_ROOT |
HKCU |
HKEY_CURRENT_USER |
HKLM |
HKEY_LOCAL_MACHINE |
HKU |
HKEY_USER |
HKR |
被安裝設備的註冊表鍵 |
AddReg項中的flags參數
值 |
符號 |
說明 |
0x00000000 |
FLG_ADDREG_TYPE_SZ |
value爲REG_SZ類型 |
0x00000001 |
FLG_ADDREG_BINVALUETYPE |
value爲2進制數據 |
0x00000002 |
FLG_ADDREG_NOCLOBBER |
不替換已有註冊表中的value |
0x00000004 |
FLG_ADDREG_DELVAL |
從註冊表中刪除subkey或 value-entry-name |
0x00000010 |
FLG_ADDREG_KEYONLY |
僅創建subkey,忽略value-entry-name 和value |
0x00000020 |
FLG_ADDREG_OVERWRITEONLY |
僅當value-entry-name時替換value |
0x00010000 |
FLG_ADDREG_TYPE_MULTI_SZ |
value爲REG_MULTI_SZ類型 |
0x00000008 |
FLG_ADDREG_APPEND |
添加value至已有註冊表值 |
0x00020000 |
FLG_ADDREG_TYPE_EXPEND_SZ |
value爲REG_EXPAND_SZ類型 |
0x00010001 |
FLG_ADDREG_TYPE_DWORD |
value爲REG_DWORD類型 |
0x00020001 |
FLG_ADDREG_TYPE_NONE |
value爲REG_NONE類型(Windows2000) |
③ DelFiles項:它是Install/DDInstall節中的可選指令,用於指明需刪除的文件。其「file-list-section」是它建立的文件列表節,該節的格式爲
[file-list-section]
destination-file-name[,,,flag]
其中,「destination-file-name」指出目標文件名;「flag」指出該文件的一些處理方法,其取值以下表。
DelFiles項中的flag參數
值 |
符號 |
說明 |
0x0000001 |
DELFLG_IN_USE |
在其安裝處理操做完成後再刪除該文件 |
0x0001000 |
DELFLG_IN_USE1 |
功能與DELFLG_IN_USE同樣,僅適用Windows2000 |
④RenFiles項:它是Install/DDInstall節中的可選指令,用於指明需重命名的文件。其「file-list-section」是它建立的文件列表節,該節的格式爲
[file-list-section]
new-dest-file-name, old-source-file-name
其中,「new-dest-file-name」指出該文件的新文件名;「old-source-file-name」指出其原有文件名。
⑤DelReg項:它是Install/DDInstall節中的可選指令,用於指明需從註冊表中刪除的內容。其「del-registry-section」是它建立的刪除註冊表節,該節的格式爲
[del-registry-section]
reg-root, subkey [,value-entry-name]
其中,「reg-root」指出該註冊表樹中的根目錄,取值與AddReg的ret-root相同; 「subkey」指出reg-root下的子目錄(或稱子鍵);「value-entry-name」指出要刪除的註冊表值。
8.DDInstall.Services節
DDInstall.Services節指明驅動程序安裝的詳細信息,他只是用於Windows 2000.他的節名稱爲[install-section-name.Services],其「install-section-name」由Models節指定。下表列出了其包含的經常使用項。
DDInstall.Services節中的經常使用項
項 |
說明 |
AddService |
控制驅動程序的安裝過程,格式爲 AddService=ServiceName,[flags],service-install-section [,event-log-install-section[,[EventLogType][,EventName]]]… |
DelService |
刪除一個或多個已有的驅動程序,格式爲 DelService=ServiceName [,[flags][,[EventLogType][,EventName]]]… |
Include |
指明安裝時所需的其餘INF文件,格式爲 Include =filename.inf [,filename2.inf]… |
Needs |
之敏感轉世所須要的特定INF文件,格式爲 Needs = inf-section-name[,inf-section-name]… |
主要項進行詳細介紹。
① AddService項:它是DDInstall.Services節所必須包含的指令,用於控制設備驅動程序的安裝過程。其「ServiceName」指出驅動程序的名字;「flags」指出一個或多個系統定義的標識,其取值狀況以下表;「event-log-install-section」是其建立的事件日誌安裝,下表中列出了該節所包含的經常使用項;「service-install-section」是其建立的服務安裝節,下表中列出了該節所包含的經常使用項;「EventLogType」指出事件日誌的類型,其取值爲System、Security和Application;「EventName」指出事件日誌的名字。
AddService項的經常使用flags參數
值 |
符號 |
說明 |
0x00000002 |
SPSVCINST_ASSOCSERVICE |
指明其爲PnP功能驅動程序 |
0x00000008 |
SPSVCINST_NOCLOBBER_DISPLAYNAME |
不覆蓋指定服務的名字 |
0x00000100 |
SPSVCINST_NOCLOBBER_DESCRIPTION |
不覆蓋指定服務的描述 |
0x00000010 |
SPSVCINST_NOCLOBBER_STARTTYPE |
不覆蓋指定服務的啓動類型 |
0x00000020 |
SPSVCINST_NOCLOBBER_ERRORCONTROL |
不覆蓋指定服務的差錯控制值 |
event-log-install-section節中的經常使用項
項 |
說明 |
AddReg |
指明向註冊表中添加的內容,格式以下 AddReg=add-registry-section[,add-registry-section]… |
DelReg |
指明需刪除的註冊表內容,格式以下 DelReg=del-registry-section[,del-registry-section]… |
BitReg |
有效但幾乎無用,格式以下 BitReg=bit-registry-section[,bit-registry-section]… |
DisplayName |
驅動程序的名字,爲字符串值 |
Description |
驅動程序的描述,爲字符串值 |
ServiceType |
驅動程序的類型,爲特定16進制數 |
StartType |
驅動程序的啓動類型,爲特定16進制數 |
ErrorControl |
驅動程序的差錯控制級別,爲特定16進制數 |
ServiceBinary |
驅動程序的完整路徑名:%dirid% /filename |
一下是對event-log-install-section節中的經常使用項的主要項進行詳細介紹。
<1>ServiceType項:指明驅動程序的類型,取值狀況以下表。
ServiceType項的取值
值 |
符號 |
說明 |
0x00000001 |
SERVICE_BOOT_START |
內核模式驅動程序 |
0x00000002 |
SERVICE_KERNEL_FILE_SYSTEM_DRIVER |
上層網絡驅動程序或文件系統 |
0x00000010 |
SERVICE_WIN32_OWN_PROCESS |
Win32應用程序 |
0x00000020 |
SERVICE_WIN32_SHARE_PROCESS |
Win32應用程序 |
<2>StartType項:指明驅動程序的啓動類型,其取值狀況以下表。
StartType項的取值
值 |
符號 |
說明 |
0x0 |
SERVICE_BOOT_START |
由操做系統加載程序啓動 |
0x1 |
SERVICE_SYSTEM_START |
由操做系統初始化過程當中啓動 |
0x2 |
SERVICE_AUTO_START |
由服務控制管理器啓動 |
0x3 |
SERVICE_DEMAND_START |
由PnP管理器或服務控制管理器按需啓動 |
0x4 |
SERVICE_DISABLE |
禁止啓動 |
<3>ErrorControl項:指明驅動程序的差錯控制級別,其取值狀況以下表。
ErrorControl項的取值
值 |
符號 |
說明 |
0x0 |
SERVICE_ERROR_IGNORE |
不顯示警告信息 |
0x1 |
SERVICE_ERROR_NORMAL |
顯示警告信息 |
0x2 |
SERVICE_ERROR_SERVICE |
當驅動程序加載失敗時,系統將使用其註冊的LastKnownGood重試,並忽略其後的錯誤 |
0x3 |
SERVICE_ERROR_CRITICAL |
當驅動程序加載失敗時,系統將使用其註冊的LastKnownGood重試,並對其後的錯誤進行檢驗 |
② DelService項:它是DDInstall.Service節中的可選指令,用於刪除一個或多個已有的設備驅動程序。其「ServiceName」指出驅動程序的名字;「flags」指出一個或多個系統定義的標識,取值見下表;「EventLogType」指出事件日誌的類型,其取值爲System、Security或Application;「EventName」指出事件日誌的名字。
DelService項的flags參數
符號 |
說明 |
SPSVCINST_DELETEEVENTLOGENTRY |
刪除與ServiceName有關的事件日誌 |
SPSVCINST_STOPSERVICE |
在刪除以前首先中止服務 |
9String節
String節指明一些列字符串,其所含各項的格式爲
strkey=[「]some string[「]
其中,「strkey」指出字符串的名字,它只能包含字母和數字;「some string」爲字符串的內容。
附上《windows驅動開發技術詳解》的一個例子
;--------- Version Section --------------------------------------------------- [Version] Signature="$CHICAGO$"; Provider=Zhangfan_Device DriverVer=11/1/2007,3.0.0.3 ; If device fits one of the standard classes, use the name and GUID here, ; otherwise create your own device class and GUID as this example shows. Class=ZhangfanDevice ClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B0} ;--------- SourceDiskNames and SourceDiskFiles Section ----------------------- ; These sections identify source disks and files for installation. They are ; shown here as an example, but commented out. [SourceDisksNames] 1 = "HelloWDM",Disk1,, [SourceDisksFiles] HelloWDM.sys = 1,MyDriver_Check, ;--------- ClassInstall/ClassInstall32 Section ------------------------------- ; Not necessary if using a standard class ; 9X Style [ClassInstall] Addreg=Class_AddReg ; NT Style [ClassInstall32] Addreg=Class_AddReg [Class_AddReg] HKR,,,,%DeviceClassName% HKR,,Icon,,"-5" ;--------- DestinationDirs Section ------------------------------------------- [DestinationDirs] YouMark_Files_Driver = 10,System32\Drivers ;--------- Manufacturer and Models Sections ---------------------------------- [Manufacturer] %MfgName%=Mfg0 [Mfg0] ; PCI hardware Ids use the form ; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd ;改爲你本身的ID %DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999 ;---------- DDInstall Sections ----------------------------------------------- ; --------- Windows 9X ----------------- ; Experimentation has shown that DDInstall root names greater than 19 characters ; cause problems in Windows 98 [YouMark_DDI] CopyFiles=YouMark_Files_Driver AddReg=YouMark_9X_AddReg [YouMark_9X_AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,HelloWDM.sys HKR, "Parameters", "BreakOnEntry", 0x00010001, 0 ; --------- Windows NT ----------------- [YouMark_DDI.NT] CopyFiles=YouMark_Files_Driver AddReg=YouMark_NT_AddReg [YouMark_DDI.NT.Services] Addservice = HelloWDM, 0x00000002, YouMark_AddService [YouMark_AddService] DisplayName = %SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\HelloWDM.sys [YouMark_NT_AddReg] HKLM, "System\CurrentControlSet\Services\HelloWDM\Parameters",\ "BreakOnEntry", 0x00010001, 0 ; --------- Files (common) ------------- [YouMark_Files_Driver] HelloWDM.sys ;--------- Strings Section --------------------------------------------------- [Strings] ProviderName="Zhangfan." MfgName="Zhangfan Soft" DeviceDesc="Hello World WDM!" DeviceClassName="Zhangfan_Device" SvcDesc="Zhangfan"