裝置驅動程式INF檔案——INF檔案的節

whatday發表於2013-07-19

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

;--------- 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"


相關文章