目录

记录windows驱动开发inf文件详解

记录windows驱动开发inf文件详解

Windows 驱动程序开发相关

1. 驱动的注册表位置:

1.

硬件子键:

HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Enum

指明硬件的HID,VID,DID等跟硬件和硬件厂商相关的信息。

2.

服务子健:

HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Services

它主要是跟驱动相关的,指明驱动的路径,以及驱动名字。

**3.

类子健:**

HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Control\Class,

指明INF文件。

2. INF 详解

INF 文件是一个文本文件,由许多按层次结构排列的节组成


规则一:**

**INF

文件是分节的,每一个

INF

文件有许多的节组成,节名用方括号括起来。**

这些节名有些是系统定义好的,有一些是用户自定义的。每一个节名最长为

255

个字符(

Windows 2000/XP/2003

操作系统中)或

28

个字符(

Windows 98

操作系统中)。节与节之间没有先后顺序的区别,另外,同一个

INF

文件中如果出现两个同样的节名,则系统会自动将这两个节名下面的条目合并到一起。


规则二:

**在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都是由形如

“signature="$CHICAGO$"”

的形式组成的。如果每一个条目的等号后有多个值,则每一个值之间用

号分隔开。**


规则三:**

**INF

文件对大小写不敏感。**


规则四:

**“

号后面的内容为注释。**


规则五:**

**如果一个条目的内容过多,在一行无法书写完全,则用

“\”

将一行内容书写为多行。**

INF

文件中常用的节

说明
VersionINF 文件的开始
SourceDisksNames指明去的那个程序所在的磁盘或 CD-ROM
SourceDisksFiles指明驱动程序的文件名
Destination指明 INF 文件和驱动程序的目标文件
Manufacturer指明供应商及其对应 Models 节的名称
Models指明 Install/DDInstall 节的名称、设备的硬件 ID 等信息
Install ( Windows 98 ) Install ( Windows 2000 )指明需复制的文件、想注册表中添加的内容等信息
DDInstall.Services 仅适用于 Windows 2000指明驱动程序安装的详细信息
String指明一系列字符串

2.1 Version

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

ClassClassGuid说明
13946BDD1FC1-810F-11D0-BEC7-08002BE2092F1394 主控制器
CDROM4D36E965-E325-11CE-BFC1-08002BE10318CD-ROM 驱动器
DiskDrive4D36E967-E325-11CE-BFC1-08002BE10318磁盘驱动器
Display4D36E968-E325-11CE-BFC1-08002BE10318显示适配器
FDC4D36E969-E325-11CE-BFC1-08002BE10318软盘驱动器
HDC4D36E96A-E325-11CE-BFC1-08002BE10318硬盘控制器
HIDClass745a17a0-74d3-11d0-b6fe-00a0c90f57da人机接口设备
Keyboard4D36E96B-E325-11CE-BFC1-08002BE10318键盘
Modem4d36e96c-e325-11ce-bfc1-08002be10318调制解调器
Monitor4d36e96e-e325-11ce-bfc1-08002be10318监视器
Mouse4d36e96f-e325-11ce-bfc1-08002be10318鼠标
Net4d36e972-e325-11ce-bfc1-08002be10318网络适配器
Ports4d36e978-e325-11ce-bfc1-08002be10318端口( COM&LPT )
Printer4d36e979-e325-11ce-bfc1-08002be10318打印机
System4d36e97d-e325-11ce-bfc1-08002be10318系统设备
TapeDrive6D807884-7D21-11CF-801C-08002BE10318磁带驱动器
USB36FC9E60-C465-11CF-8056-444553540000USB

.DriverVer

项:指明驱动程序的版本信息。其

“mm/dd/yyyy”

代表月

/

/

年;

“x.y.v.z”

代表驱动程序的版本号,它是可选的。

2.2 SourceDisksNames

SourceDisksNames

节指明设备驱动程序所在的磁盘或

CD-ROM

,其各项的格式如下:

diskid=disk-description,disk-label,disk-serial-number   (Windows 98)

diskid=disk-description[,[tagfile][,unused,path]]  (Windows 2000)

其中,

“diskid”

指出磁盘驱动器的编号,它是正整型数,通常从

1

开始,且不能重复;

“disk-description”

表示磁盘的描述信息,他通常为一个字符串。对于

Windows 98

“disk-label”

指出磁盘的卷标;

“disk-serial-numbe”

指出磁盘的序列号。对于

Windows 2000

“tagfile”

指出磁盘标签文件的文件名;

“unused”

保留未用;

“path”

指出驱动程序所在的路径;

“[ ]”

表示可选参数。

2.3 SourceDisksFiles

SourceDisksFiles

节指明设备驱动程序的文件全路径,其各项格式如下:

filename=diskid[,subdir] (Windows 98)

filename=diskid[,[,subdir][,size]]   (Windows 2000)

其中,

“filename”

指出驱动程序的文件名;

“diskid”

指出磁盘驱动器的编号;

“subdir”

指出该文件在磁盘上的路径;

“size”

指出该文件未经压缩时的大小,以字节为单位。

2.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目标目录
10Windows 目录: %windir%17INF 目录
11系统目录 Windows 98:%windir%/system Windows 2000:%windir%/system3218帮助目录
20字体目录
12驱动程序目录 Windows 98:%windir%/system/IoSubsys Windows 2000:%windir%/system32/drivers23颜色目录
24应用程序目录( Windows2000 )
13命令目录( Windows98 )25共享目录
14控制面板目录( Windows98 )50%windir%/system(Windows2000)
15打印机目录( Windows98 )54Ntldr.exe 和 osloader.exe 所在的目录( Windows2000 )
16工作组目录( Windows98 )55打印处理器目录( Windows2000 )

2.5 Manufacturer

Manufacturer

节指明供应商及其对应

Models

接的名称,其各项的格式如下:

%strkey%=models-section-name

其中,

“strkey”

代表设备制造的名字,其字符串值在

String

节中定义;

“models-section-name”

指出

Models

节的名称。

**32

位和

64

位自适应安装,**

%strkey%=models-section-name,NT,NTamd64 //

(逗号分隔)然后在

Models

中增加

[models-section-name.NT]

[models-section-name.NTamd64]

两个节即可。

2.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

2.7 Install/DDInstall

Install/DDInstall

节指明需复制的文件、想注册表中添加的内容等信息,其节名称由

Models

节指定。下表列出了其包含的常用项。

Install/DDInstall

节中的常用项

说明
DriverVer指明驱动程序的版本信息,格式为: mm/dd/yyyy[,x.y.z]
CopyFiles指明需复制的文件,格式为: CopyFiles=@filename
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

参数

符号说明
0x00000400COPYFLG_REPLACEONLY仅替换目标目录中的文件
0x00000800COPYFLG_NODECOMP复制并不解压缩
0x00000008COPYFLG_FORCE_FILE_IN_USE将源文件赋值为临时文件名,以重新命名
0x00000010COPYFLG_NO_OVERWRITE不替换原有文件
0x00001000COPYFLG_REPLACE_BOOT_FILE强制用户重新引导系统
0x00002000COPYFLG_NOPRUNE强制复制文件
0x00000020COPYFLG_NO_VERSION_DIALOG不覆盖新版本的文件
0x00000004COPYFLG_NOVERSIONCHECK可覆盖任何版本的文件
0x00000040COPYFLG_OVERWRITE_ORDER_ONLY仅覆盖旧版本的文件
0x00000001COPYFLG_WARN_IF_SKIP当用户跳过文件时发出警告
0x00000002COPYFLG_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

参数

说明
HKCRHKEY_CLASSES_ROOT
HKCUHKEY_CURRENT_USER
HKLMHKEY_LOCAL_MACHINE
HKUHKEY_USER
HKR被安装设备的注册表键

AddReg

项中的

flags

参数

符号说明
0x00000000FLG_ADDREG_TYPE_SZvalue 为 REG_SZ 类型
0x00000001FLG_ADDREG_BINVALUETYPEvalue 为 2 进制数据
0x00000002FLG_ADDREG_NOCLOBBER不替换已有注册表中的 value
0x00000004FLG_ADDREG_DELVAL从注册表中删除 subkey 或 value-entry-name
0x00000010FLG_ADDREG_KEYONLY仅建立 subkey ,忽略 value-entry-name 和 value
0x00000020FLG_ADDREG_OVERWRITEONLY仅当 value-entry-name 时替换 value
0x00010000FLG_ADDREG_TYPE_MULTI_SZvalue 为 REG_MULTI_SZ 类型
0x00000008FLG_ADDREG_APPEND添加 value 至已有注册表值
0x00020000FLG_ADDREG_TYPE_EXPEND_SZvalue 为 REG_EXPAND_SZ 类型
0x00010001FLG_ADDREG_TYPE_DWORDvalue 为 REG_DWORD 类型
0x00020001FLG_ADDREG_TYPE_NONEvalue 为 REG_NONE 类型( Windows2000 )

DelFiles

项:它是

Install/DDInstall

节中的可选指令,用于指明需删除的文件。其

“file-list-section”

是它创建的文件列表节,该节的格式为

[file-list-section]

destination-file-name[,,,flag]

其中,

“destination-file-name”

指出目标文件名;

“flag”

指出该文件的一些处理方法,其取值如下表。

DelFiles

项中的

flag

参数

符号说明
0x0000001DELFLG_IN_USE在其安装处理操作完成后再删除该文件
0x0001000DELFLG_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”

指出要删除的注册表值。

2.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

参数

符号说明
0x00000002SPSVCINST_ASSOCSERVICE指明其为 PnP 功能驱动程序
0x00000008SPSVCINST_NOCLOBBER_DISPLAYNAME不覆盖指定服务的名字
0x00000100SPSVCINST_NOCLOBBER_DESCRIPTION不覆盖指定服务的描述
0x00000010SPSVCINST_NOCLOBBER_STARTTYPE不覆盖指定服务的启动类型
0x00000020SPSVCINST_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

项的取值

符号说明
0x00000001SERVICE_BOOT_START内核模式驱动程序
0x00000002SERVICE_KERNEL_FILE_SYSTEM_DRIVER上层网络驱动程序或文件系统
0x00000010SERVICE_WIN32_OWN_PROCESSWin32 应用程序
0x00000020SERVICE_WIN32_SHARE_PROCESSWin32 应用程序

<2>StartType

项:指明驱动程序的启动类型,其取值情况如下表。

StartType

项的取值

符号说明
0x0SERVICE_BOOT_START由操作系统加载程序启动
0x1SERVICE_SYSTEM_START由操作系统初始化过程中启动
0x2SERVICE_AUTO_START由服务控制管理器启动
0x3SERVICE_DEMAND_START由 PnP 管理器或服务控制管理器按需启动
0x4SERVICE_DISABLE禁止启动

<3>ErrorControl

项:指明驱动程序的差错控制级别,其取值情况如下表。

ErrorControl

项的取值

符号说明
0x0SERVICE_ERROR_IGNORE不显示警告信息
0x1SERVICE_ERROR_NORMAL显示警告信息
0x2SERVICE_ERROR_SERVICE当驱动程序加载失败时,系统将使用其注册的 LastKnownGood 重试,并忽略其后的错误
0x3SERVICE_ERROR_CRITICAL当驱动程序加载失败时,系统将使用其注册的 LastKnownGood 重试,并对其后的错误进行检验

DelService

项:它是

DDInstall.Service

节中的可选指令,用于删除一个或多个已有的设备驱动程序。其

“ServiceName”

指出驱动程序的名字;

“flags”

指出一个或多个系统定义的标识,取值见下表;

“EventLogType”

指出事件日志的类型,其取值为

System

Security

Application

“EventName”

指出事件日志的名字。

DelService

项的

flags

参数

符号说明
SPSVCINST_DELETEEVENTLOGENTRY删除与 ServiceName 有关的事件日志
SPSVCINST_STOPSERVICE在删除之前首先停止服务

2.9 String

String

节指明一些列字符串,其所含各项的格式为

strkey=[“]some string[“]

其中,

“strkey”

指出字符串的名字,它只能包含字母和数字;

“some string”

为字符串的内容。