首先要明白一个INF文件的基本结构:INF由节组成,即一个个段组成。每个段的功能不一样。(大部分书上把这个段叫作“节”)
[Version]段:主要用说明版本信息的。
[Strings]段:字符串信息,用于常量定义,用于显示。凡在其他段中出现的%XXXX%(就是两个百分号夹着一组字母),则对应的就会在Strings段里对应着它的一个字符串。
[SourceDisksNames]段: 定义安装源文件所在磁盘,一般为1,表示在第一个磁盘。此节可无。
[SourceDiskFiles]段:驱动程序文件列表及被安装的位置,该节必须结合[SourceDisksNames]节才能知道具体的位置。如“atinbtxx.sys=1”,则你必须到[DestinationDirs]节去查看“1”具体代表那个位置。
[DestinationDirs]段: 这里表示的就是上述驱动文件安装到什么地方。
[Defaultinstall]段和[Install]段:这里表示安装段,对实际文件进行操作,比如说复制,删除,添加注册表等,但是安装段的名字不一定是这两个,可以通过Model段中指明哪个段是安装段。
[Model] :此段用来指明安装段的名称。即说明哪个段是安装段。格式:%xxxx%=安装段名,USB\VID_04B4&PID_8613.所以这里不仅指明了安装段,还设置了引导安装的VID,PID,当与检测到设备的PID和VID相同时,则设备管理器认为该设备找到了自己的安装信息文件(INF文件),从而开始引导安装。
[Manufacturer]段: 此段用来指定设备供应商的名称,这个名称同时也是Model段。
关于INF文件的相关语法:
1、最后应该明白这8个段,有两个段不是直接显示出来的,就是[Model]和[Install],都是通过别的段指明的。
2、关于段的定义:我个人认为,只要在INF文件中将自己的段名用中括号包起来即可,如[MySection]…… 则这个MySection就可以认为是一个段了。
3、各个段之间的关系是并行的关系。如果两个段名相同,则接成一个段。不区分大小写
4、字符串标记,格式%xxxxxx%,这是一个字符串的标记,并不是字符串,他只是代表一个字符串,这个字符串在Srtings段定义,当然可以把这个字符串和一个段名关联起来。
例如:[Manufacturer]
%MFGNAME%=Cypress
[Cypress]
……
[Strings]
MFGNAME=”Cypress” // %MFGNAME%是个字符串标记,代表的字符串为“Cypress”。这个字符串和model段名关联了。
下面是CyUSB.inf文件
[Version] //版本段
Signature=”$CHICAGO$” //Signature必须一般为此值
Class=USB //驱动程序的类别,说明此为USB设备
ClassGUID={36FC9E60-C465-11CF-8056-444553540000} //对应USB设备的GUID值。不同设备的GUID值不同。
provider=%PROVIDER% //INF文件的提供者,%PROVIDER%是一个字符串标记,在Strings段可以看到它所指的字符串为”Cypress”
[SourceDisksNames]
1=%CYUSB_INSTALL%,,, 表示安装在磁盘1
[SourceDisksFiles] //待安装的源文件,即待安装的驱动程序
CyUsbME.sys = 1 //1表示要安装到哪个目录,具体那个目录在[DestinationDirs]说明
CyUsb.sys = 1
CyUsb.spd = 1
[Manufacturer] //指定设备供应商,同时也指定了那一段为Model段
%MFGNAME%=Cypress //Cypress为Model段
[Cypress] //此为Model段,并列出相应的安装段,可以列写多个设备PID,VID。用来表示响应不同的固件。
; Cypress FX2LP default ID
%VID_04B4&PID_8613.DeviceDesc%=CyUsb, USB\VID_04B4&PID_8613//CyUsb被设置为安装段
; Cypress FX1 default ID
%VID_04B4&PID_6473.DeviceDesc%=CyUsb, USB\VID_04B4&PID_6473
; Cypress FX2LP Example Device. DVK firmware examples use this VID/PID
%VID_04B4&PID_1004.DeviceDesc%=CyUsb, USB\VID_04B4&PID_1004
[DestinationDirs]
CyUsbME.Files.Ext = 10,System32\Drivers //意思是把CyUsbME.Files.Ext ,CyUsb.Files.Ext里的东西指定了方向,即右边的路径。这里没有操作,只是,10,表示C盘下的windows目录
CyUsb.Files.Ext = 10,System32\Drivers //CyUsbME.Files.Ext ,CyUsb.Files.Ext是两个段,在后面定义了,可以看到这两个段代表了两个驱动文件CyUsbME.sys
[CyUsb]//此段为安装段,开始向[DestinationDirs]所示路径安装文件
CopyFiles=CyUsbME.Files.Ext //CopyFiles是个指令,即将=后面的文件CyUsbME.Files.Ext安装到DestinationDirs]所示路径安装文件,
AddReg=CyUsbME.AddReg //在注册表中添加相应的新的子健,进行相应操作,操作在CyUsbME.AddReg段中放着
[CyUsb.HW]
AddReg=CyUsb.AddReg.Guid //在HW下的注册
[CyUsb.NT] //在NT(大于win98的平台)平台下的安装及注册
CopyFiles=CyUsb.Files.Ext
AddReg=CyUsb.AddReg
[CyUsb.NT.HW]
AddReg=CyUsb.AddReg.Guid
[CyUsb.NT.Services]//添加安装文件的服务信息
Addservice = CyUsb, 0x00000002, CyUsb.AddService // Addservice 是个操作指令格式:Addservice =需要服务的安装的安装段名,0x00000002是固定值,安装服务信息段名
[CyUsb.AddService]//安装服务信息段
DisplayName = %CyUsb.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START//2值表示为自动安装
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\CyUsb.sys //这个表示驱动所在路径,最终可在设备管理器中看到
LoadOrderGroup = Base //不知道干嘛的
[CyUsbME.AddReg] //不同安装段的注册表操作
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,CyUsbME.sys
[CyUsb.AddReg] //不同安装段的注册表操作
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,CyUsb.sys
[CyUsbME.Files.Ext] //待安装的驱动程序文件
CyUsbME.sys
[CyUsb.Files.Ext] //待安装的驱动程序文件
CyUsb.sys
[CyUsb.AddReg.Guid] //不同安装段的注册表操作
;HKR,,DriverGUID,,%CyUsb.GUID%
;—————————————————————;
[Strings] //一些显示的字符串,在设备管理器中可以看到
PROVIDER=”Cypress”
MFGNAME=”Cypress”
CYUSB_INSTALL=”Cypress Generic USB Driver Installation Disk”
VID_04B4&PID_8613.DeviceDesc=”Cypress EZ-USB FX2LP – EEPROM missing”
VID_04B4&PID_6473.DeviceDesc=”Cypress EZ-USB FX1 – EEPROM missing”
VID_04B4&PID_1004.DeviceDesc=”Cypress EZ-USB Example Device”
CyUsb.SvcDesc=”Cypress Generic USB Driver”
;CyUsb.GUID=”{AE18AA60-7F6A-11d4-97DD-00010229B959}”