Windows驅動 INF檔案
轉載自: https://www.cnblogs.com/qiengo/p/5992504.html
參考一:百度百科
參考二:INF檔案的節
參考三:wikipedia
參考四:MSDN: INF File
INF檔案的節
INF檔案是一個文字檔案,由許多按層次結構排列的節組成,他們以方括號中的節名稱開始,如[Version]、[Manufacturer]等,後面是改接所含有的各個項,如Signature、DriverVer等。節中各項的基本定義格式為
entry=value[,value…]
其中,“entry”標示項名稱,“value”標示該想的取值。節名和項名稱都不區分大小寫,且對於Windows 98,其必須小於28個字元;對於Windows 2000,其長度的最大值為255個位元組。下表是INF檔案中常用的節。
INF檔案中常用的節
節 |
說明 |
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 |
指明需複製的檔案,格式為: [email protected]|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驅動開發技術詳解》的一個例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
;--------- 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"
|