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

  • Post author:
  • Post category:其他



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


文件中常用的节




说明


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


指明一系列字符串



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


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


目标目录


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




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|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”


指出要删除的注册表值。


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


参数




符号


说明


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


在删除之前首先停止服务


2.9 String


String


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


strkey=[“]some string[“]


其中,


“strkey”


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


“some string”


为字符串的内容。



版权声明:本文为good123day原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。