参考一:百度百科
参考二: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驱动开发技术详解》的一个例子
;--------- 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"