下面先贴出了一个inf文件的内容,然后进行逐句分析:
; Installation inf for the Intel 82930 USB Bulk IO Test Board
;
; (c) Copyright 1999 Microsoft
;
[Version]
Signature="$CHICAGO$"
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
;
; (c) Copyright 1999 Microsoft
;
[Version]
Signature="$CHICAGO$"
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
[SourceDisksNames]
1="BulkUsb Installation Disk",,,
[SourceDisksFiles]
BULKUSB.sys = 1
BULKUSB.inf = 1
[Manufacturer]
%MfgName%=Microsoft
[Microsoft]
%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A
[DestinationDirs]
BULKUSB.Files.Ext = 10,System32\Drivers
BULKUSB.Files.Inf = 10,INF
[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT.Services]
Addservice = BULKUSB, 0x00000002, BULKUSB.AddService
[BULKUSB.AddService]
DisplayName = %BULKUSB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\BULKUSB.sys
LoadOrderGroup = Base
[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","MaximumTransferSize",0x10001,4096
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","DebugLevel",0x10001,2
[BULKUSB.Files.Ext]
BULKUSB.sys
[BULKUSB.Files.Inf]
BulkUsb.Inf
;---------------------------------------------------------------;
[Strings]
MSFT="Microsoft"
MfgName="Intel"
USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"
BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"
下面进行分析:
1、[Version]段
习惯上,每个INF文件都开始于一个Version段,这段确定文件中描述的设备类型,上述范例中的Verson段有如下几条语句:
Signature=”$CHICAGO$”
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
Signature指定使用此INF文件的操作系统,可以是$Chicage$、$Windows NT$(含有一个空格)、$Windows 95$(含有一个空格)之一,定界符$必不可少,且这些串是不分大小写的。如果Signature的值不是这些有效的串之一,该INF文件就被人为无效。
习惯上,每个INF文件都开始于一个Version段,这段确定文件中描述的设备类型,上述范例中的Verson段有如下几条语句:
Signature=”$CHICAGO$”
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
Signature指定使用此INF文件的操作系统,可以是$Chicage$、$Windows NT$(含有一个空格)、$Windows 95$(含有一个空格)之一,定界符$必不可少,且这些串是不分大小写的。如果Signature的值不是这些有效的串之一,该INF文件就被人为无效。
Class指定设备的类名,此范例中指定的是USB类。ClassGuid指定设备注册表的GUID,GUID是一个128位的标识符。
Provider标志该INF文件的提供者。%MSFT%的具体内容将在Strings段中定义,范例中的定义是MSFT=”Microsoft”,表明该INF文件的提供者是Microsoft。
Provider标志该INF文件的提供者。%MSFT%的具体内容将在Strings段中定义,范例中的定义是MSFT=”Microsoft”,表明该INF文件的提供者是Microsoft。
DriverVer标示驱动程序的版本号。
2、[SourceDiskNames]段
该段制定并且命名一个或多个包含源文件的磁盘,这些源文件用于文件拷贝或者重命名操作。该段可以有任意条目,每个条目对应一个源盘。条目格式如下:
disk=%strkey%|”disk-description”diskid是标志一个源盘的非负整数。这个值可以是十六进制或者十进制的形式标示,但他不能占用多余4个字节的存储单元。等式右边规定一个%strkey%标记或者一个引号引起来的串,描述由diskid所标示盘符的内容或目的。在安装过程中安装程序可以给终端用户显示这个串值。
该段制定并且命名一个或多个包含源文件的磁盘,这些源文件用于文件拷贝或者重命名操作。该段可以有任意条目,每个条目对应一个源盘。条目格式如下:
disk=%strkey%|”disk-description”diskid是标志一个源盘的非负整数。这个值可以是十六进制或者十进制的形式标示,但他不能占用多余4个字节的存储单元。等式右边规定一个%strkey%标记或者一个引号引起来的串,描述由diskid所标示盘符的内容或目的。在安装过程中安装程序可以给终端用户显示这个串值。
范例中SourceDisksNames段的内容如下:
[SourceDiskNames]
1=”BulkUsb Installation Disk”
范例规定源盘为磁盘1,在安装期间,安装程序可以给终端用户显示字符串“BulkUsbInstallation Disk”
1=”BulkUsb Installation Disk”
范例规定源盘为磁盘1,在安装期间,安装程序可以给终端用户显示字符串“BulkUsbInstallation Disk”
3、[SourceDisksFiles]段
该段命名安装过程中所用的源文件,标志包含这些源文件的磁盘(或者CD-ROM),并提供在所带磁盘上包含的每个文件的目录路径。一个SourcesDisksFiles段可以有任意多条目,磁盘上每个文件都有一个条目。它所包含的条目格式为
filename=diskid
Filename规定磁盘上源文件的名称;diskid对顶一个整数来标志包含源文件的磁盘,即在
SourceDisksNames段中规定的diskid;。范例中SourceDisksFiles段的内容如下:
[SourceDisksFiles]
BULKUSB.sys=1
BULKUSB.inf=1
范例中为两个文件建立的条目,这两个文件都在磁盘1中,并且在根目录下。
该段命名安装过程中所用的源文件,标志包含这些源文件的磁盘(或者CD-ROM),并提供在所带磁盘上包含的每个文件的目录路径。一个SourcesDisksFiles段可以有任意多条目,磁盘上每个文件都有一个条目。它所包含的条目格式为
filename=diskid
Filename规定磁盘上源文件的名称;diskid对顶一个整数来标志包含源文件的磁盘,即在
SourceDisksNames段中规定的diskid;。范例中SourceDisksFiles段的内容如下:
[SourceDisksFiles]
BULKUSB.sys=1
BULKUSB.inf=1
范例中为两个文件建立的条目,这两个文件都在磁盘1中,并且在根目录下。
4、[Manufacturer]段
该段标志一个或者多个用INF文件安装的设备的制造商,它也为制造商的设备即驱动程序的安装定义Models段名。每个INF文件都必须有Manufacturer段。
上述范例的Manufacturer段有一个条目:
[Manufacturer]
%MfgName%=Microsoft
在Strings段中可以找到%MfgName%定义的字符串,本范例中定义的是MfgName=”Intel”,表明设备制造商是Intel。而右边Microsoft也是制造商的Models段的段名。在INF中,为每个制造商的Models段规定了一个INF编写者定义的名字,这个名称要在Manufacturer段中加以应用。范例中的制造商Models段如下:
[Microsoft]
%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A
该段属于制造商的Models段,段名是由INF编写者自行定义的,不属于系统段名。少标识一个设备每个制造商的Models段至,并规定设备的厂商ID(VID)和产品ID(PID)同时引用这个设备INF文件的Install段。该段也可以规定一个或者多个附加设备ID,因为有多个与初始硬件ID所识别的设备兼容,同时由相同的驱动程序驱动。当设备管理器发现从检测设备所得到的ID,符号此段定义的ID时,设备管理器就知道找到了正确的INF文件。
范例中规定了一个设备,设备的VID是0x045E,而PID是0x930A。VID是由USB管理委员会给每个USB芯片厂商统一分配的,例如Philips公司的VID是0x0471,Cypres公司的VID是0x0547等,范例中的VID是Intel公司的。产品ID(PID)是由各个厂商自己定义的,这里VID0x930A是Intel的一个USB批量传输的实验板。
范例中该条目等式右边的BULKUSBDev给设备标识了一个INF文件编写者定义的Install段。
该段标志一个或者多个用INF文件安装的设备的制造商,它也为制造商的设备即驱动程序的安装定义Models段名。每个INF文件都必须有Manufacturer段。
上述范例的Manufacturer段有一个条目:
[Manufacturer]
%MfgName%=Microsoft
在Strings段中可以找到%MfgName%定义的字符串,本范例中定义的是MfgName=”Intel”,表明设备制造商是Intel。而右边Microsoft也是制造商的Models段的段名。在INF中,为每个制造商的Models段规定了一个INF编写者定义的名字,这个名称要在Manufacturer段中加以应用。范例中的制造商Models段如下:
[Microsoft]
%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A
该段属于制造商的Models段,段名是由INF编写者自行定义的,不属于系统段名。少标识一个设备每个制造商的Models段至,并规定设备的厂商ID(VID)和产品ID(PID)同时引用这个设备INF文件的Install段。该段也可以规定一个或者多个附加设备ID,因为有多个与初始硬件ID所识别的设备兼容,同时由相同的驱动程序驱动。当设备管理器发现从检测设备所得到的ID,符号此段定义的ID时,设备管理器就知道找到了正确的INF文件。
范例中规定了一个设备,设备的VID是0x045E,而PID是0x930A。VID是由USB管理委员会给每个USB芯片厂商统一分配的,例如Philips公司的VID是0x0471,Cypres公司的VID是0x0547等,范例中的VID是Intel公司的。产品ID(PID)是由各个厂商自己定义的,这里VID0x930A是Intel的一个USB批量传输的实验板。
范例中该条目等式右边的BULKUSBDev给设备标识了一个INF文件编写者定义的Install段。
5、[DestinationDirs]段
该段为所有的硬件拷贝、删除和改名操作规定目标目录。范例中的DestinationDirs段如下:
[DestinatinDirs]
BULKUSB.Files.Ext=10,System32\Drivers
BULKUSB.Files.Inf=10.INF
DestinationDirs段中条目等式的左边规定INF文件编写者定义的段名,这些段中的文件将会被存入等式右边指定的目录中,并且这些文件可以被INF文件中其他地方的CopyFiles、RenFiles和DelFiles命令引用。例如,范例中这两个段的定义如下:
[BULKUSB.Files.Ext]
BULKUSB.sys
[BULKUSB.Files.Inf]
BULKUSB.Inf
DestinationDirs段中条目等号右边的10是一个逻辑磁盘标志符号(Logical Disk Identifier, LDID),它规定了对文件操作的目标目录标识符,后面跟随的是子目录,作为文件操作的目标地址。范例中第一个文件BULKUSB.sys的目标地址是WinNT\System32\Drivers;第二个文件BULKUSB.Inf的目标地址是WinNT\INF。
DestinationDirs段也可以包含一个缺省目标目录DefaultDestDird的条目,为所有对文件的拷贝、删除和更名操作规定省略的目标路径,这些文件没有明确的列在其它条目所引用的文件列表中。
该段为所有的硬件拷贝、删除和改名操作规定目标目录。范例中的DestinationDirs段如下:
[DestinatinDirs]
BULKUSB.Files.Ext=10,System32\Drivers
BULKUSB.Files.Inf=10.INF
DestinationDirs段中条目等式的左边规定INF文件编写者定义的段名,这些段中的文件将会被存入等式右边指定的目录中,并且这些文件可以被INF文件中其他地方的CopyFiles、RenFiles和DelFiles命令引用。例如,范例中这两个段的定义如下:
[BULKUSB.Files.Ext]
BULKUSB.sys
[BULKUSB.Files.Inf]
BULKUSB.Inf
DestinationDirs段中条目等号右边的10是一个逻辑磁盘标志符号(Logical Disk Identifier, LDID),它规定了对文件操作的目标目录标识符,后面跟随的是子目录,作为文件操作的目标地址。范例中第一个文件BULKUSB.sys的目标地址是WinNT\System32\Drivers;第二个文件BULKUSB.Inf的目标地址是WinNT\INF。
DestinationDirs段也可以包含一个缺省目标目录DefaultDestDird的条目,为所有对文件的拷贝、删除和更名操作规定省略的目标路径,这些文件没有明确的列在其它条目所引用的文件列表中。
5、Install段
Install段包含指导安装程序安装所需软件的实际指示。该段必须在一个设备或者型号(Model)的条目中引用。每个Models的每个Install段包括一个可选的DriverVer条目和一个或多个引用INFormation中附加命令段的命令,这些命令索引用的段包含安装驱动程序文件及向注册表写入设备专用的和驱动程序专用信息命令。这里,首先列出这个断的常用格式
[install-section-name]
[install-section-name.nt]
[install-section-name.ntx86]
[CopyFiles=@filename|file-list-section]
Addreg=add-registry-section
[include=filename.inf]
… …
… …
首先,看到有3个可选的段名,在Windows 9x平台中,提供了一个无修饰的Install段名[install-section-name],其中规定设备的安装条目。在Windows 2000平台中,提供相应的
[install-section-name.nt]段名,如果还要限定在x86为基础的Windows 2000平台上,则提供[install-section-name.ntx86]段名。设备安装程序将搜索最合适后缀的install段,例如,假设有3个install段,第一个无后缀,后两个分别带有.NT和.NTx86后缀。如果安装到x86平台上的Windows 2000中,安装程序会使用.NTx86段;如果安装到非Intel平台上运行的Windows 2000中,安装程序将使用.NT段;如果安装到Windows 98中,安装程序使用无后缀段。
Install段包含指导安装程序安装所需软件的实际指示。该段必须在一个设备或者型号(Model)的条目中引用。每个Models的每个Install段包括一个可选的DriverVer条目和一个或多个引用INFormation中附加命令段的命令,这些命令索引用的段包含安装驱动程序文件及向注册表写入设备专用的和驱动程序专用信息命令。这里,首先列出这个断的常用格式
[install-section-name]
[install-section-name.nt]
[install-section-name.ntx86]
[CopyFiles=@filename|file-list-section]
Addreg=add-registry-section
[include=filename.inf]
… …
… …
首先,看到有3个可选的段名,在Windows 9x平台中,提供了一个无修饰的Install段名[install-section-name],其中规定设备的安装条目。在Windows 2000平台中,提供相应的
[install-section-name.nt]段名,如果还要限定在x86为基础的Windows 2000平台上,则提供[install-section-name.ntx86]段名。设备安装程序将搜索最合适后缀的install段,例如,假设有3个install段,第一个无后缀,后两个分别带有.NT和.NTx86后缀。如果安装到x86平台上的Windows 2000中,安装程序会使用.NTx86段;如果安装到非Intel平台上运行的Windows 2000中,安装程序将使用.NT段;如果安装到Windows 98中,安装程序使用无后缀段。
☆[CopyFiles=@filename|file-list-section]:或者指定一个要从源媒体拷贝到目标设备的文件名,或者引用一个或多个INFormation编写者定义的段,其中列出了源媒体上要拷贝到目标设备的相关文件。这个命令是可选的,但是大多数的段都包括这个命令。
☆Addreg=add-registry-section:这个命令引用一个或多个INFormation编写者定义的段,其中规定了要写入注册表的新的子键,这些新关键字可能有初始条目,在这些段中也可以修改 已有关键字的值。范例中索引用的段如下:
[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","MaximumTransferSize",0x10001,4096
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","DebugLevel",0x10001,2
HKLM是注册表的根键,它是HKEY_LOCAL_MACHINE的缩写。而HKR与注册表关键字相关,最适合于AddReg命令出现的地方。比如,注册表中每个设备的“硬件”子键:..\Enum\枚举器ID\设备ID,与此相对的注册表中每个驱动程序指定的“软件”子键:..CLASS\类GUID\设备ID等。除此之外还有HKCR、HKCU、HKLM和HKU。
前面所举范例的Install段如下:
[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
所需拷贝的两个文件在INF编写者定义的BULKUSB.Files.Ext和BULKUSB.Files.Inf段中,而要添加到注册表的项目则在BULKUSB.AddReg段中。
☆Addreg=add-registry-section:这个命令引用一个或多个INFormation编写者定义的段,其中规定了要写入注册表的新的子键,这些新关键字可能有初始条目,在这些段中也可以修改 已有关键字的值。范例中索引用的段如下:
[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","MaximumTransferSize",0x10001,4096
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","DebugLevel",0x10001,2
HKLM是注册表的根键,它是HKEY_LOCAL_MACHINE的缩写。而HKR与注册表关键字相关,最适合于AddReg命令出现的地方。比如,注册表中每个设备的“硬件”子键:..\Enum\枚举器ID\设备ID,与此相对的注册表中每个驱动程序指定的“软件”子键:..CLASS\类GUID\设备ID等。除此之外还有HKCR、HKCU、HKLM和HKU。
前面所举范例的Install段如下:
[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
所需拷贝的两个文件在INF编写者定义的BULKUSB.Files.Ext和BULKUSB.Files.Inf段中,而要添加到注册表的项目则在BULKUSB.AddReg段中。
6、Install.Service段
该段包含一个或者多个AddService命令,用以控制一个特定驱动程序的服务装载的时间方式,控制本服务对其他服务和下一级驱动程序的依赖等,房里中的定义如下:
[BULKUSB.Dev.NT.Services]
Addservice = BULKUSB, 0x00000002, BULKUSB.AddService
其中,BULKUSB是指定的所需安装服务的名称。对于一个设备,这个值通常是该设备驱动程序的属性。0x00000002是一个系统指定的标记(Flag),不同的标记有不同的服务功能。最后一项BULKUSB.AddService是INF文件编写者定义的特定段,其中包括了所需添加的服务项目,其范例的定义如下:
[BULKUSB.AddService]
DisplayName = %BULKUSB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\BULKUSB.sys
LoadOrderGroup = Base
8、[Strings]段
[Strings]段就是字符串段。该段定义了其他段内所指定的字符串,段内的每一个项目都符合一个在其他段内使用百分比符号(%)包括起来的字符串。范例中的定义如下:
[Strings]
MSFT="Microsoft"
MfgName="Intel"
USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"
BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"
[Strings]段就是字符串段。该段定义了其他段内所指定的字符串,段内的每一个项目都符合一个在其他段内使用百分比符号(%)包括起来的字符串。范例中的定义如下:
[Strings]
MSFT="Microsoft"
MfgName="Intel"
USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"
BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"