2012-08-28 22:01:01| 分类: windows driver | 标签: |举报 |字号大中小 订阅
最近看书看到一些内容,解决了以前遗留下来的INF写法的一些困惑,所以就写下INF文件用到的比较多的一些域的详解;
一般我们总是认为INF文件是系统设备的驱动程序,其实这是错误的认识,Windows之所以在安装某些硬件的驱动时提示需要INF文件是因为INF文件为该设备提供了一个全面描述硬件参数和相应驱动文件(DLL文件)的信息。
基本知识:
1.域,基本形式[]加上域名,如[DefaultInstall],相同域名的内容可以合并为一个域,每个域名最长为255字符
2.子域[A.B],如[DefaultInstall.Service]
3.指令 指令名=指令参数1、参数2...
4.;代表注释分号后面的内容,
5. 如果一个条目的内容过多,在一行无法书写完全,则用“\”将一行内容书写为多行
6.INF文件对大小写不敏感。
INF文件和初始化(或称私有化,Private File)文件相似,采用域(Section)和入口(Entries)的索引机制,域和入口定义了所有操作类型及操作对象。一个INF文件由不同类型的域组成,每类域都有其特殊的目的和不同的实现语法,每域的内容均服务于该域的目的。除了基本的识别INF格式的“Version”域外,INF文件中域的数目和类型没有限制,主要取决于具体安装任务。一个基本的INF文件,一般包含如下几域:
域的名称 | 域的作用 |
[Version] | INF文件头,提供有效INF文件的版本信息 |
[DefaultInstall] | 安装包含所关联动作(文件拷贝或删除,注册表键值更新、子键增删等)在INF文件内的域名指针,默认情况下首先执行该域内容 |
[OtherInstall] | 与[DefaultInstall]域遵循相同的语法,但必须显式的调用,常被用来定义反安装动作 |
[DestinationDirs] | 指定罗列于一个域内将被拷贝、删除或重命名的文件在硬盘上的位置 |
[FileCopy/Delete/RenameSection(s)] | 罗列将被拷贝、删除或重命名的文件 |
[RegistryUpdateSection(s)] | 指定对注册表键值更新、子键增删等动作 |
[IniFileUpdateSection(s)] | 指定对ini文件的更新、快捷方式可通过该域进行创建 |
[SourceDisksNames] | 罗列文件所在盘盘名、盘卷标、盘序列号 |
[SourceDisksFiles] | 罗列安装时使用的源文件及其所在盘 |
[Strings] | 罗列本地化字符串(或称宏字符串) |
CopyFiles | 等号右侧是拷贝文件罗列域域名,将文件拷贝到DestinationDirs域指定的目的地,所有的源文件必须在SourceDisksFiles域列出 |
RenFiles | 重命名文件 |
DelFiles | 删除文件 |
UpdateInis | 安装过程中更新INI初始化文件内容 |
UpdateIniField | 安装过程中更新INI初始化文件值内容 |
AddReg | 增加注册表键或键值 |
DelReg | 删除注册表键或键值 |
Ini2Reg | 用INI文件内容更新注册表 |
UpdateCfgSys | 更新Config.sys文件内的设置 |
UpdateAutoBat | 更新Autoexec.bat文件内的设置 |
在实际编写INF文件时,注册表根键通常采用缩写方式,如下表:
HKCR | HKEY_CLASSES_ROOT的简写 |
HKCU | HKEY_CURRENT_USER的简写 |
HKLM | HKEY_LOCAL_MACHINE的简写 |
HKU | HKEY_USERS的简写 |
HKR | 相对键,对于硬件设备驱动程序类安装的 |
[Classinstall32]
HKR = HKLM\SYSTEM\CurrentControlSet\Control\Class
[InterfaceInstall32]
HKR=HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\GUID
...更多HKR不同域内的值请参考《深入浅出Windows驱动开发P436》
由于上述表格内的内容展开实在太多,所以这里不详细展开,如果需要的话可以参考《深入浅出Windows驱动开发》第13章或者OSR上的http://www.osronline.com/ddkx/install/inf-format_2fzm.htm 详解
下面举例:
; OsnDf.inf
;
; Installation file (.inf) for Infocore Corporation OsnDiskCopy driver.
;
; (c) Copyright 2007-2008 Infocore Corporation
;
[Version]
Signature="$Windows NT$" ;签名是必须的,一般是$windows NT$
;$Chicago$和$windows NT$一个意思
Provider=%StorTrust% ;inf 文件作者,提供者
;设备安装类,一般用系统预定义的,像这个就是系统定义的diskguid,可以在注册表
;HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Class中找到自己要的设备类GUID
ClassGUID={4D36E967-E325-11CE-BFC1-08002BE10318}
Class=DiskDrive ;设备类名称
DriverVer=01/16/2001, 4.0.0 ;驱动版本 格式:日期(月/日/年,version num )
[DestinationDirs]
DefaultDestDir = 12 ;将文件copy到12=%systemroot%\system32\drivers
;
; Class installation section
;
[ClassInstall32] ;将新的设备注册或安装到系统中(以后先检查这个, ;如果已经存在就不继续注册了)
Addreg=DiskClassReg ;新创建的设备类在注册表中添加的必要信息, ;HKR,,,,%DevClassName%
[DiskClassReg]
HKR,,,0,%ClassName% ;class键值为diskdrive
HKR,,Icon,,-53 ;Icon(Icon键值)的作用为新建的类选择一个图标,-53等负数 ;为系统预定义的图标
;
; Driver information
;
[Manufacturer] ;厂商域
%StorTrust% = StorTrust.Mfg ;
[StorTrust.Mfg]
%StorTrust.DeviceDesc% = OsnDSS, *OsnDSS
;
; General installation section
;
[OsnDSS]
AddReg=OsnDSS.AddReg ;在class 中对应设备下注册表的upperfilters项里append OsnDSS
CopyFiles=OsnDSS.Files ;copy the OsnDSS.Files域中的文件,和文件域相关[SourceDisksFiles][DestinationDirs]
[OsnDSS.AddReg]
; append this service to existing REG_MULTI_SZ list, if any
HKR,,"UpperFilters",0x00010008,"OsnDSS" ;0x0001008表示 reg_muti_sz 类型和操作标志,不存在创; ; 建,存在添加在后面 ,添加内容 osndss
;
; File sections
;
[OsnDSS.Files]
OsnDSS.sys
;
; Service Installation
;
[OsnDSS.Services]
AddService = OsnDSS,, OsnDSS_Service_Inst, OsnDSS_EventLog_Install
[OsnDSS_Service_Inst]
DisplayName = %OsnDSS.SvcDesc% ;注册表diskplayName
ServiceType = 1 ; SERVICE_KERNEL_DRIVER ;
StartType = 0 ; SERVICE_BOOT_START ;详细在下面图2-1
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\OsnDSS.sys ;.sys 文件路径,注册表imagepath
[OsnDSS_EventLog_Install]
AddReg = OsnDSSEventLogInstall ;向EventLog\SYSTEM\OSNDSS注册表里写入键值信息
[OsnDSSEventLogInstall] ;设备向系统注册事件log入口
;键值名EventMessageFile,REG_EXPAND_SZ类型,值为;""里的内容
HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\drivers\OsnDSS.sys"
HKR,,TypesSupported,0x00010001,7 ;键TypesSupported,REG_DWORD,7
;
; Source file information
;
[SourceDisksNames]
1 = %DiskId1%,,,"" ;ID=磁盘描述[],一般都是"1=Disk1"这种简单类型的
[SourceDisksFiles]
OsnDSS.sys = 1,, ;文件名1= 磁盘号[,[路径] [,大小]]
[Strings]
;
; Non-Localizable Strings
;
REG_SZ = 0x00000000
REG_MULTI_SZ = 0x00010000
REG_EXPAND_SZ = 0x00020000
REG_BINARY = 0x00000001
REG_DWORD = 0x00010001
SERVICEROOT = "System\CurrentControlSet\Services"
;
; Localizable Strings
;
ClassName = "DiskDrive"
StorTrust = "Enterprise Information Management Inc."
DiskId1 = "EIM Installation Disk #1"
StorTrust.DeviceDesc = "EIM Disk Shadow Copy Driver"
OsnDSS.SvcDesc = "EIM Disk Shadow Copy Driver"
图2-1
评论