設備驅動程序INF文件——INF文件的節

原文鏈接:https://blog.csdn.net/whatday/article/details/9382031

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"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章