1. 程式人生 > >Windows驅動 INF檔案

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"