1. 程式人生 > >Windows驅動 INF文件

Windows驅動 INF文件

應用 n-n [ ] name lag rom eve ntc 控制器

轉載自: 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

指明需復制的文件,格式為:

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驅動開發技術詳解》的一個例子

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"

Windows驅動 INF文件