INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。
INF的功能
1 复制文件、删除文件、或重新命名文件。
2 新增或删除注册表(Registry)中的项目。
3 修改重要的系统设置文件(如 Autoexec.bat、Config.sys、.INI 等)
INF的规则
INF是纯文本文件,它是分节的,这点和INI文件类似,每节以"[]"扩起来,每一个节名最长为255个字符(Windows 2000/XP/2003操作系统中)或28个字符(Windows 98操作系统中)。在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都由=分开,如a="b"。如果每一个条目的等号后有多个值,则每一个值之间用","号分隔开。INF对大小写不敏感,行注释语句命令是";",类似VB里的'。如果一行写不下,使用""来换行。
INF的运行
.INF文件是由Windows的SetupAPI解释执行的脚本文件,它的运行过程很简单,是一种线性的执行,线性的意思就是.INF文件的运行过程不存在分支语句,也就是没有条件语句,一旦开始执行,就是沿着固定的路线运行。它的运行是按照节为单位来执行的,从某一个[Install]节开始执行,从上到下执行该节中的条目,如果该条目是一个节,那么就一条条执行子节中的条目,如此递归执行。在WINDOW上运行只要右击这个文件,点击安装即可。
INF的语法结构
;指定版本和签名节
[VERSION]
;系统根据Signuture看是不是适合当前版本,如果适合的话就执行,否则不执行,当然强制安装是可以的
;用于WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
;指定安装文件布局,该行是可选的,如果没有提供布局信息文件,则在INF文件内必须包含[SourceDisksNames]和[SourceDisksFiles]节
LayoutFile=filename.inf
[SourceDisksNames]节
[SourceDisksNames]节罗列源文件所在盘符序列码、盘描述符、盘卷标号和盘序列号。
[SourceDisksNames]节内语句的语法为:
disk-ordinal=“disk-description”,disk-label,disk-serial-number
其中disk-ordinal为必选项,是盘符序列码,标识一个源盘,具有惟一性,一般可设置为从1开始递增的整数,0不是一个有效的盘符序列码。当存在多个源盘时,盘符序列码之间不能重复。
disk-description为必选项,是盘描述符,用双引号括起的字符串或字符串宏描述盘的内容或目的。安装引擎将该字符串显示在对话框内以提示用户。
disk-label为源盘的卷标识。
disk-serial-number未使用,但必须被设置为0。
[SourceDisksFiles]节
[SourceDisksFiles]节指定安装时使用的源文件和盘符序列码、盘描述符。
[SourceDisksFiles]节内语句的语法为:
file-name=disk-number[,subdir] [,file-size]
其中file-name为必选项,是源盘上文件的名称。
disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在[SourceDisksNames]节中列出,并大于或等于1。
Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。
file-size为可选项,表明文件的大小,以字节为单位。
[DestinationDirs]
;指定CopyFiles、RenFiles或DelFiles入口的缺省操作目录
;语法file-list-section=LDID,[Subdir]
;LDID列表如下:
;01 ;current directory
;04 ;backup directory
;10 ;windows directory
;11 ;system dir
;12 ;iosubsys
;13 ;command
;14 ;control panel directory
;15 ;printers directory
;16 ;workgrou dir
;17 ;inf dir
;18 ;help dir
;19 ;administration dir
;20 ;fonts
;21 ;viewers
;22 ;vmm32
;23 ;color dir
;25 ;shared dir
;26 ;winboot
;28 ;host winboot
;30 ;root of boot drive
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists
;以下例子为安装到window\web目录下
;DefaultDestDir=10,"web"
;[Install]节提供了一个INF文件安装过程的总览,它识别文件内其他包含安装信息节的详细动作,是Windows内建安装函数识别安装过程和内容的真正入口
;[Install]节分[DefaultInstall]和[OtherInstall]两类
;[DefaultInstall]节节名DefaultInstall如前面表格内容所述被显式地在注册表中指定。
;该节也是系统获取INF文件中安装信息的首要入口,当用户右击INF文件选“安装”时该节内容被执行。
;[OtherInstall]与[DefaultInstall]节遵循相同的语法,但必须被显式地调用,常被用来定义反安装动作
;缺省安装节
[DefaultInstall]
;指明添加注册表的子节,等号后面的为自定义节名
ADDREG=add
;指明要删除的注册表子节,等号后面的为自定义节名
DELREG=del
;指明要要复制的文件子节,用于安装,Copyfiles命令可以替换系统正在访问的文件。这些功能通过普通的del和copy命令都无法实现
CopyFiles=cfile
;指明要要删除的文件子节,用于反安装,多个节以逗号隔开,该命令如果发现要删除的文件被锁定,就会把文件放到系统删除队列中排队
;等系统重启动的时候,该文件就自动被删除了
DelFiles=删除文件段
;[删除文件段]
;文件名列表
;例子:
;a.exe
;b.sys
;重命名文件段
;RenFiles=重命名文件段
;[重命名文件段]
;语法:
;[file-list-section]
;new-file-name,old-file-name
;file1,file2 ;
修改文件名file1为file2
;更新INI文件段内容子节
UpdateInis = 更新INI文件段
;[更新INI文件段]
;ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags]
;ini-file 包含要更改条目的 .ini 文件名
;ini-section 包含要更改条目的节名
;old-ini-entry 可选,常用形式为 Key=Value
;new-ini-entry 可选,常用形式为
;Key=Value。flags 是可选操作标记
;例子
;%01%\wincmd.ini, Configuration,,"InstallDir=%01%"
;%01%\wincmd.ini, Configuration,,"Mainmenu=%01%\LANGUAGE\TCExtMenu.mnu"
;更新ini文件值内容
updateinifield =
;ini文件更新注册表
ini2reg=aa.ini
;更新config.sys内容
updatecfgsys=更新autoexec.bat段
[更新autoexec.bat段]
;更新autoexec.bat内容
updateautobat=更新autoexec.bat段
[更新autoexec.bat段]
;定义字符串资源节,像资源文件,调用时使用%REG_SZ%就代表了0x00000000
[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001
;自定义添加注册表项的节
[add]
;注意格式:HKEY(根键缩写),Subkey(子键),Valuename(键值名),Type(键值类型),Value(键值)
;HKCU -> HKEY_CURRENT_USER
;HKCR -> HKEY_CLASSES_ROOT
;HKLM -> HKEY_LOCAL_MACHINE
;HKU -> HKEY_USERS
;HKU -> HKEY_USERS
;HKCC -> HKEY_CURRENT_CONFIG
;HKDD -> HKEY_DYN_DATA
;解禁注册表编辑器
HKCU,Software\Microsoft\Windows\CurrentVersion\Policies\System,DisableRegistryTools,1,0
;解禁IE的Internet选项
HKCU,Software\Policies\Microsoft\Internet Explorer\Restrictions,NoBrowserOptions,1,0
;解禁IE的Internet选项里面的各个具体选项
HKCU,Software\Policies\Microsoft\Internet Explorer\Restrictions,NoBrowserOptions,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Settings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,HomePage,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,GeneralTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Cache,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,History,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Colors,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Fonts,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Languages,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Accessibility,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,SecurityTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,SecChangeSettings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,SecAddSites,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ContentTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Ratings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Certificates,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,CertifPers,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,CertifSite,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,CertifPub,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,FormSuggest,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,FormSuggest Passwords,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Wallet,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Profiles,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ConnectionsTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Connection Wizard,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Connwiz Admin Lock,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Connection Settings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Proxy,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,AutoConfig,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ProgramsTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ResetWebSettings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Check_If_Default,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,AdvancedTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Advanced,1,0
;解禁下载(可单独使用)
HKCU,Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3,1803,1,0
;自动修改IE标题栏文字、主页、搜索页等等
HKCU,Software\Microsoft\Internet Explorer\Main,Window Title,0,"Internet Explorer"
[dfile]
;该节定义了将要删除的文件列表,filename后面的1是一个标志,指明如果文件当前无法删除,就等到系统重启动后删除。
;格式:filename,,,1
;例子:
a.exe,,,1
明明白白Inf文件
明书安装电脑硬件一样,我们就是Windows系统,说明书就是INF文件。
[Strings]字符串信息,用于常量定义。
[DestinationDirs]定义系统路径信息。
[SourceDisksNames]指明源盘信息。
[SourceDisksNames]指明源盘文件名。
[Version]
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="添加文件关联演示"
Version="1.0"
Author="薛飞"
Copyright="Copyright?2002 by Rainsoft"
CustomFile="inf" ;修改您需要的文件名后缀
Program="NOTEPAD.EXE" ;修改您需要关联的应用程序名
[Add.Reg]
HKCR,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File
HKCR,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安装信息
HKCR,%CustomFile%"File\shell","",FLG_ADDREG_TYPE_SZ,open
HKCR,%CustomFile%"File\shell\open\command","",FLG_ADDREG_TYPE_SZ,%program% %1
[DefaultInstall] //这个节在上面已经说了,SetupAPI解释器默认入口.这里表示增加注册表内容,即修改注册表
AddReg=Add.Reg
再看下面一个例子:
[Version]
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="文件复制和安装演示"
Version="1.0"
Author="薛飞"
Copyright="Copyright?2002 for Rainstorey"
[FileList]
ProcessList.exe ;
[FileList1]
Wordpad.exe
[DestinationDirs]
FileList=11
FileList1=10
[DefaultInstall]
Copyfiles=FileList,FileList1
注册表操作的常量定义:
----------------------------------------------------------
常量
HKCR HKEY_CLASSES_ROOT.
HKCU HKEY_CURRENT_USER.
HKLM HKEY_LOCAL_MACHINE.
HKU HKEY_USERS.
-----------------------------------------------------------
FLG_ADDREG_APPEND
FLG_ADDREG_TYPE_SZ
FLG_ADDREG_TYPE_MULTI_SZ
FLG_ADDREG_TYPE_EXPAND_SZ
FLG_ADDREG_TYPE_BINARY
FLG_ADDREG_TYPE_DWORD
FLG_ADDREG_TYPE_NONE
----------------------------------------------------------
[DestinationDirs]节中所定义的常量路径
----------------------------------------------------------
01 源目录(后跟路径)
10 Windows目录
11 Windows系统目录
12 驱动目录
17 INF文件目录
18 帮助文件目录
20 字体目录
21 根目录
24 应用程序目录
25 共享目录
30 当前根目录
50 System目录
51 Spool 目录
52 Spool 驱动目录
53 用户配置目录
----------------------------------------------------------
[DefaultInstall]节中定义的操作(可以理解为inf命令)
----------------------------------------------------------
LogConfig
Copyfiles
Renfiles
Delfiles
UpdateInis
UpdateIniFields
AddReg
DelReg
Ini2Reg
-----------------------------------------------------------
再看一个完整驱动安装文件:
; HelloWdm.Inf - install information file for simple WDM example
; Copyright (c) 1998 Compuware Corporation
;--------- Version Section ---------------------------------------------------
[Version]
Signature="$Windows 95$"
Provider=%Compuware%
; If device fits one of the standard classes, use the
; name and GUID here, otherwise create your own as
; this example shows.
;;当设备适合一个标准类,就用下面的类和GUID,否则你自己显式创建
Class=CompuwareUnknown
ClassGUID={312b5210-8a24-11d2-9448-00105a075f6b}
;--------- 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 = "Install Disk",Disk1,,
;[SourceDisksFiles]
;HelloWdm.sys=1,,
;--------- 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,,,,%CompuwareClassName%
HKR,,Icon,,"-18"
;--------- DestinationDirs Section -------------------------------------------
[DestinationDirs]
DefaultDestDir=10,System32
SimpleWdm_Files_Driver=10,System32\Drivers
;--------- Manufacturer and Models Sections ----------------------------------
指定生产厂商和models节中相应的名称
[Manufacturer]
%MfgName% = Compuware_Mfg
[Compuware_Mfg]
%SimpleWdmDevice%=SimpleWdm_DDI, *SimpleWdmDevice
;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 98 -----------------
; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98
//经验表明, DDInstall根名称大于19个字符会造成问题在Windows 98
[SimpleWdm_DDI]
CopyFiles=SimpleWdm_Files_Driver
AddReg=SimpleWdm_9X_AddReg
[SimpleWdm_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,HelloWdm.sys
HKR,,Description,,%HelloWdm_DeviceDesc%
; --------- Windows NT -----------------
[SimpleWdm_DDI.NT]
CopyFiles=SimpleWdm_Files_Driver
[SimpleWdm_DDI.NT.Services]
Addservice = HelloWdm, 0x00000002, SimpleWdm_Service
[SimpleWdm_Service]
DisplayName
ServiceType
StartType
ErrorControl
ServiceBinary = %10%\System32\Drivers\HelloWdm.sys
; --------- Files ----------------------
[SimpleWdm_Files_Driver]
HelloWdm.sys,,,2
;--------- Strings Section ---------------------------------------------------
[Strings]
Compuware="Compuware Corporation"
MfgName="Compuware Corporation"
SimpleWdmDevice="Simple WDM Device"
HelloWdm_DeviceDesc="HelloWdm Device"
HelloWdm_SvcDesc="Driver for Simple WDM Sample"
CompuwareClassName="Compuware Other Devices"
---------------------------------
INF文件必须包含以下规则:
必须包含版本信息节以表明自己属于win95还是winnt4格式。
值(Value)由%strkey%替代的表达式字符串表达组成,strkey必须在strings节中定义。如果出现%,则用%%替代。
Setup程序使用以下各节:
[Version]
[Version]
Signature="signature-name"
Class=class-name
ClassGUID=GUID
Provider=INF-creator
LayoutFile=filename.inf[,filename.inf]...
Signature-name
参数可以取值 $Windows NT$, $Chicago$, or $Windows 95$(引号括起来).如果不是以上这些字符串,则不被认可为inf文件。
Class-name
此参数用于安装设备驱动。详细信息见DDK Programmer's Guide.
GUID
此参数用于安装设备驱动。详细信息见DDK Programmer's Guide.
INF-creator
标示INF的创建者. 典型的情况,此值为inf文件的创建者所在组织
filename.inf
INF文件必须包含SourceDisksFiles 和 SourceDisksNames 节。这些文件的描述文件通常命名为 LAYOUT.INF. 如果文件名不是特别指定,SourceDisksNames 和 SourceDisksFiles 必须出现在当前inf文件中
以下为典型的例子:
[Version]
Signature="$Windows NT$"
Class=Mouse
ClassGUID={4D36E96F-E325-11CE-BFC1-08002BE10318}
Provider=%Provider%
LayoutFile=layout.inf
[Strings]
Provider="Corporation X"
[Install]
LogConfig=log-config-section-name[,log-config-section-name]...
Copyfiles=file-list-section[,file-list-section]...
Renfiles=file-list-section[,file-list-section]...
Delfiles=file-list-section[,file-list-section]...
UpdateInis=update-ini-section[,update-ini-section]...
UpdateIniFields=update-inifields-section[,update-inifields-section]...
AddReg=add-registry-section[,add-registry-section]...
DelReg=del-registry-section[,del-registry-section]...
Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...
如果安装驱动程序,仅仅使用LogConfig条目。详见DDK Programmer's Guide.
CopyFiles= @MyFile.exe
此文件将拷贝到缺省目标目录。
为适应不同平台,可以在install节后加上不同的后缀。可以出现defaultInstall.nt这样的节名。install-section-name可选的后缀:
Extension
.Win
.NT
.NTx86
.NTMIPS
.NTAlpha
.NTPPC
以下例子展示了如何出现两个copyfiles节:
[Ser_Inst]
CopyFiles=Ser_CopyFiles, mouclass_CopyFiles
[Ser_CopyFiles]
sermouse.sys
[mouclass_CopyFiles]
mouclass.sys
[Add Registry]
reg-root-string, [subkey], [value-name], [flags], [value]
[reg-root-string, [subkey], [value-name], [flags], [value]]
HKCU
HKLM
HKU
HKR
subkey
可选,例如 key1\key2\key3....
value-name
可选,标示subkey的值名称。对于字符串类型可以空,标示缺省字符串值
flag
Value
FLG_ADDREG_BINVALUETYPE
FLG_ADDREG_NOCLOBBER
FLG_ADDREG_DELVAL
FLG_ADDREG_APPEND
FLG_ADDREG_TYPE_MASK
FLG_ADDREG_TYPE_SZ
FLG_ADDREG_TYPE_MULTI_SZ
FLG_ADDREG_TYPE_EXPAND_SZ REG_EXPAND_SZ.
FLG_ADDREG_TYPE_BINARY
FLG_ADDREG_TYPE_DWORD
FLG_ADDREG_TYPE_NONE
value
可选. 16进值或者字符串
[CopyFiles]
destination-file-name[,source-file-name][,temporary-file-name][,flag]
[destination-file-name[,source-file-name][,temporary-file-name]][,flag]
.
目标文件名,如果没有给出源文件名,那么此名也是源文件名.
source-file-name
源文件名,如果没有给出目标文件名,那么此名也是目标文件名.
temporary-file-name
被忽略,setup函数自动处理临时文件.
flag
可选,用于控制文件如何被拷贝。你必须配置实际值
COPYFLG_WARN_IF_SKIP (0x00000001)
如果用户试图在发生一个错误后跳过将显示警告信息
COPYFLG_NOSKIP (0x00000002)
不允许用户跳过拷贝此文件
COPYFLG_NOVERSIONCHECK (0x00000004)
如果文件存在于目标目录,忽略
COPYFLG_FORCE_FILE_IN_USE (0x00000008)
替换被使用得文件?,当拷贝时文件被使用
COPYFLG_NO_OVERWRITE (0x00000010)
不覆盖目标文件中已存文件
COPYFLG_NO_VERSION_DIALOG (0x00000020)
如果目标文件已存且新则不覆盖也不出现对话框
COPYFLG_REPLACEONLY (0x00000040)
替换目标文件
[delete Registry]
reg-root-string, [subkey], [value-name], [flags], [value]
[reg-root-string, [subkey], [value-name], [flags], [value]]
HKCU
HKLM
HKU
HKR
subkey
value-name
可选,标示subkey的值名称。对于字符串类型可以空,标示缺省字符串值
[Delete Files]
file-name[,,,flag]
DELFLG_IN_USE (0x00000001)
当因为文件正被使用,SetupCommitFileQueue 取消, 将排队在系统重新启动时候被删除。
如果不使用此值,则安装时候被使用的文件不会被delete files指定节删除
DELFLG_IN_USE1 (0x00010000)
高字节版本的DELFLG_IN_USE. Setting DELFLG_IN_USE1 差别在于同样可适用于Copyfiles节和delete Files节即使COPYFLG_WARN_IF_SKIP 标志被使用。
[INI File to Registry] 此节指示那些ini文件中的条目将对应到注册表。
ini-file, ini-section, [ini-key],reg-root-string,subkey[,flags]
ini-file
ini文件名.
ini-section
ini文件的节
ini-key
条目
flags
指示当注册表存在对应的注册表项目是否是否覆盖旧值。
Bit
0
0
1
1
[Rename Files]
new-file-name,old-file-name
new-file-name
新文件名
old-file-name
原来的文件名。此参数必须定义于 SourceDisksFiles 节中。