关于inf文件
来源:互联网 发布:杨氏弹性模量实验数据 编辑:程序博客网 时间:2024/06/05 01:02
大部分人都会安装驱动程序,但不是每个会安装驱动的人都可以看的懂inf文件格式,甚至很多写过一点驱动的人都不是很明白,结合网上看到的关于inf文件的介绍和WDM书籍的介绍,写一些自己的理解。
INF是DeviceInformation File的缩写,是微软公司为硬件厂商发布硬件驱动开发的一种文件格式,INF文件包含硬件信息和控制脚本以控制硬件驱动的安装。
copyright注释
在设备级的驱动中应该包含一个“copyright”的注释(以分号开头的行),以满足CHKINF程序的检查,操作系统可以接受没有这个注释的INF文件,但Microsoft不会认证没有这项内容的驱动程序。(是不是说没有这项内容,微软数字签名是不成功的呢?)
INF文件结构
INF文件包含一些由方括号[]括起来的段(或称节),有些段是必须的,而其它是驱动程序特定的,每个部分是一些安装动作﹐或者连接或者列举其它部分。文件中的顺序是不重要的,但每个段名长度被限制在28个字符内,大小写是不敏感的,这样做是为了与win98兼容,段名可以包含下划线和圆点字符。文件内容的一般格式如下:
entry = value[, value...]
entry是指令,关键词或者文件名。value是被entry应用的属性。entry和value都可以指定为用百分号(%)代替的表示符,标示符必须在[Strings]段中给出定义。
把一个大的INF文件看成是一个树结构的线形描述可以更容易理解INF文件。一个段就是树上的一个节点,而每个指令就是指向另一个段的指针。
[Version]
一个有效的inf文件从一个命名为[Version]的段开始,它想一个inf文件的头和标示,但并不一定要在文件的最顶端。
Entry
Value
Signature
“$Windws NT$”,”$Windows 95$”和”$Chicago$”中的一个。
Class
驱动程序类名,下表列出
ClassGUID
一个类的独一无二的GUID。
Provider
Inf提供者的名字,一般在[Strings]指定
CatalogFile
一般指定数字签名文件
DriverVer
mm/dd/yyyy[,x,y,v,z],必须的条目﹐包含版本信息。
INF类名
描述
1394
IEEE 1394总线控制器(不是外设)
Battery
电池设备
CDROM
CD-ROM驱动器,包括SCSI和IDE
DiskDrive
硬盘驱动器
Display
显示适配器
FDC
软盘控制器
FloppyDisk
软盘驱动器
HDC
硬盘控制器
HIDClass
人机接口设备
Image
静态图象捕捉设备,包括数码相机和扫描仪
Infrared
Serial-IR和Fast-IR红外端口的NDIS miniport驱动程序
Keyboard
键盘
MediumChanger
SCSI媒体交换器设备
Media
多媒体设备,包括音频、DVD、游戏杆、全动态视频捕捉设备
Modem
调制解调器
Monitor
监视器
Mouse
鼠标和其它指点设备
MTD
内存设备的内存技术驱动程序
Multifunction
多功能设备
MultiportSerial
智能多端口串行卡
Net
网络适配器
NetClient
网络文件系统和打印提供者(客户方)
NetService
网络文件系统的服务器方支持
NetTrans
网络协议驱动程序
PCMCIA
PCMCIA和CardBus主机控制器(不是外设)
Ports
串行和并行口
Printer
打印机
SCSIAdapter
SCSI和RAID控制器,主机总线适配器miniports,和磁盘阵列控制器
SmartCardReader
智能卡读写器
System
系统设备
TapeDrive
磁带驱动器
USB
USB主控制器和hub(不是外设)
Volume
逻辑存储卷驱动程序
[Manufacturers]
必须段。列出硬件描述的所有公司。条目形式:
manufacturer=model
可以包含多个条目。安装多个驱动,甚至是不同厂家的驱动。model是硬件型号段。一般指向另一个继续安装的段。例如:
[manufacturer]
"Walter Oney Software"=DeviceList
"Finest Organization On Earth Yet"=FOOEY
[DeviceList]
...
[FOOEY]
...
在model后面可以跟NTx86, NTia64, NTamd64等,用逗号隔开。是为了区分不同平台的安装。(不要也可以?)这样做也可以在model根据平台的不同,提供不同的Desciption或InstallSectionName,或是DeviceID。
[model]
每个model段描述了一个或多个设备。条目形式如下:
device-description=install-section-name,hw-id[,compatible-id...]
device-description描述了设备列表,install-section-name指向的是DDInstall的部分
[DeviceList]
"AMCC S5933 Development Board(DMA)"=DriverInstall,PCI\VEN_10E8&DEV_4750
[DDInstall]
它的名字是model段指定的install-section-name,可能再加上.NTx86或.NTia64或是.NTamd64。用后缀来控制平台的最佳安装条目。例如,假设你有三个install段,第一个无后缀,后两个分别带有.NT后缀和.NTx86后缀。如果你安装到x86平台的Windows 2000系统中,安装程序会使用.NTx86段。如果安装到在非Intel平台上运行的Windows 2000中,它将使用.NT段。如果windows支持ARM等处理器,可能要用到.NT段了。
Entry
Value
DriverVer
mm/dd/yyyy[,x,y,v,z]﹐必须的条目﹐包含可选择的版本号码
CopyFiles
另一个指定需要复制的文件列表的部分或者一个单独的有”@”为前缀的文件名
AddReg
必须的﹐另一个包含需要的注册表信息的部分
Include
指向其它的INF文件名指针列表
Needs
Include条目的子集﹐列出了它的INF文件中需要的部分
DelFiles
指定另一个需要删除的文件列表的部分(一般是升级的目的)
RenFiles
指定另一个需要重命名的文件列表的部分(一般是存储安装之前的状态)
DelReg
指定另一个需要删除的系统注册表信息的部分
ProfileItems
指定另一个需要更改系统开始菜单的部分
AddReg条目在语法上是必须的﹐CopyFiles条目对于[DDInstall]部分是重要的。
CopyFiles语法如下:
CopyFiles=file-list-section[,file-list-section...]或者CopyFiles=@filename。
前者是更普通的版本﹐它允许一个指向另一个包含一个安装文件列表的部分的指针﹒然而对于简单的驱动程序的安装﹐可以直接的使用文件名。
[CopyFiles]
即上面的file-list-section。
CopyFiles条目形式如下:
destination-filename[,source-filename,temp-filename,flag]
二进制值
符号名
描述
0x0400
COPYFLG_REPLACEONLY
如果已经有目标文件﹐则复制
0x0800
COPYFLG_NODECOMP
不解压﹐直接复制
0x0008
COPYFLG_FORCE_FILE_IN_USE
复制源文件为临时的名字﹐强制重新激活﹐重命名临时文件
0x0010
COPYFLG_NO_OVERWRITE
不替换已存在的文件
0x1000
COPYFLG_REPLACE_BOOT_FILE
文件是系统加载的一部分﹐强制重新激活
0x2000
COPYFLG_NOPRUNE
强制复制﹐甚至安装者认为不需要
0x0020
COPYFLG_NO_VERSION_DIALOG
不重写更新的文件
0x0004
COPYFLG_NOVERSIONCHECK
总是重写目标文件
0x0040
COPYFLG_OVERWRITE_OLDER_ONLY
重写老的目标文件
0x0001
COPYFLG_WARN_IF_SKIP
如果用户跳过文件﹐则警告
0x0002
COPYFLG_NOSKIP
不允许用户跳过文件
destination-filename是需要复制的文件名﹐如果与源文件名不同﹐source-filename必须被指定﹐temp-filename在WIN98中是为新文件指定一个中间的文件名直到系统重新激活﹐对于WIN2000来说﹐它是无用的。
flag值指定新的目标文件的部署﹒这些值可以OR起来使它有多个性质﹒应该确认没有互斥的项目
因为[CopyFiles]条目的语法不包含指定源文件的磁盘或者路径选项﹐所以﹐必须使用其它的INF文件的部分[SourceDisksNames]和[SourceDisksFiles]﹒[CopyFiles]是复制的源文件名﹐复制的目标则在[DestinationDirs]部分。
[AddReg]
[AddReg]段在DDInstall中指定。这个部分的目的是提供在系统注册表中添加或者修改条目﹐形式是﹕
reg-root[,subkey,value-name,flags,value]
reg-root是注册表根的缩写﹐子键描述根键下的键名﹐使用反斜线字符(\)分开子键﹒例如﹐Software\W2KDriverBook\Driver\Setting是有效的HKCU或者HKLM根键的子键﹒
缩写
意义
HKCR
HKEY_CLASSES_ROOT
HKCU
HKEY_CURRENT_USER
HKLM
HKEY_LOCAL_MACHINE
HKU
HKEY_USERS
HKR
设备安装的硬件子键
value-name指定被添加或者修改注册表值﹒每个系统注册表键包含零个或者多个不同数据类型的值﹒注册表编辑器在右边的窗格列出了子键的值﹒值的名字和值的数据也一起显示出来﹒左边的窗格仅仅显示子键﹒flags指定数据的类型﹒
flags类型如下:
二进制值
符号
意义
0x00000
FLG_ADDREG_TYPE_SZ
以零为结束的字符串
0x00001
FLG_ADDREG_BINVALUETYPE
二进制数据
0x00002
FLG_ADDREG_NOCLOBBER
不替换现有的值
0x00004
FLG_ADDREG_DELVALUE
删除子键或者值的名字
0x00010
FLG_ADDREG_KEYONLY
创建子键﹐不顾值
0x00020
FLG_ADDREG_OVERWRITEONLY
如果值存在﹐替换它﹐否则什幺也不作
0x10000
FLG_ADDREG_TYPE_MULTI_SZ
REG_MULTI_SZ值(数组)
0x00008
FLG_ADDREG_APPEND
附加到存在的REG_MULTI_SZ数组
0x20000
FLG_ADDREG_TYPE_EXPAND_SZ
REG_EXPAND_SZ数据
0x10001
FLG_ADDREG_TYPE_DWORD
DWORD值
0x20001
FLG_ADDREG_TYPE_NONE
REG_NONE值
[SourceDisksNames]
如果INF文件包含的驱动程序文件分布在多个磁盘上﹐INF文件就必须包含[Source-DisksNames]部分﹐这个部分包含文件分布的每个磁盘的人口.
diskid=disk-description[,tagfile,unused,path]
diskid是唯一的分配设置中的名字﹒通常﹐磁盘号从1开始﹐disk-description是一个提示用户合适的磁盘的字符串。
tagfile值有双重的作用﹒确定在安装过程中用户提供正确的磁盘﹐tagfile值在安装过程继续进行之前被检验﹐如果tagfile文件不存在﹐用户被重新提示插入正确的磁盘﹒如果agfile值包含.CAB的扩展名﹐表示磁盘上的驱动程序文件是压缩文件。
path值是一个以root-relative为磁盘根目录的驱动程序文件的路径﹒像tagfile值一样是可选择的
[SourceDisksFiles]
INF文件必须包含一个[SourceDisksFiles]部分﹒这个部分列出了在安装驱动程序过程中使用的文件名﹒每个文件都有相应的条目。
filename=diskid[,subdir,size]
diskid值是一个[SourceDisksNames]部分指定的可以找到文件名的磁盘﹐可选的subdir值指定文件的路径﹒可选的size值指定解压缩文件的字节大小﹐安装过程使用这个数据在尝试复制文件之前决定目标系统是否适合安装。
[DestinationDirs]
这是个必须的提供目标路径的部分。
file-list-section=dirid[,subdir] 或者
DefaultDestDir=dirid[,subdir]
file-list-section是一个被[CopyFiles]的指示器唤起的部分﹒它指定所有的被指示器复制的文件安装到指定的路径﹒对于DefaultDestDir﹐用于[CopyFiles]中所有的指示器﹐通常与file-list-section联合使用。
以下是 DestinationDirsID定义:
值
意义
12
%windir%\system32\drivers 对于 Windows 2000
%windir%\system\IoSubsys 对于 Windows 98
10
%windir%
11
%windir%\system32 对于 Windows 2000﹐%windir%\system对于 Windows 98
30
根驱动器的根路径
54
Windows 2000的根路径
1
这个INF文件的路径
17
INF文件的路径
20
Fonts的路径
51
假脱机的路径
52
假脱机的驱动程序路径
55
打印机处理机路径
23
Color (ICM)
-1
绝对路径
21
Viewers路径
53
User Profile路径
24
应用软件路径
25
共享路径
18
帮助路径
16406
All Users\Start Menu
16407
All Users\Start Menu\Programs
16408
All Users\Start Menu\Programs\Startup
16409
All Users\Desktop
16415
All Users\Favorites
16419
All Users\Application Data
16422
Program Files
16427
Program Files\Common
16429
All Users\Templates
16430
All Users\Documents
[DDInstall.Services]
为了让复制的文件在目标系统中起驱动程序的作用﹐必须通知服务控制管理器(SCM)﹐在WIN2000中安装的每个驱动程序在注册表的HKLM\System\CurrentControlSet\Services下面﹐ServiceType值是1表示内核模式的驱动程序﹒StartType指出在系统引导过程中在何时加载驱动程序﹒ErrorControl值决定在驱动程序加载的过程中如果遇到错误后如何是好﹒ServiceBinary值指出驱动程序的位置(.SYS文件)﹒但是可能会被遗漏﹐如果二进制文件在%windir%\system32\drivers路径并且与HKLM\...\Services下面的子键名的名字相同的时候就发生这种情况。
DDInstall.Services部分条目的形式是﹕
AddService=ServiceName,[flags],service-install-
section[,eventlog-install-section]
ServiceName描述服务的名字﹐典型的是驱动程序的名字(没有.SYS扩展名)。
flags定义如下:
二进制值
符号名
意义
0x0002
ASSOCSERVICE
驱动程序是一个FDO﹐不是滤波驱动程序
0x0008
NOCLOBBER_DISPLAYNAME
不重写friendly名字
0x0100
NOCLOBBER_DESCRIPTION
不重写Description
0x0010
NOCLOBBER_STARTTYPE
不重写starttype
0x0020
NOCLOBBER_ERRORCONTROL
不重写错误控制
service-install部分和可选的eventlog-install部分唤起附加的控制服务值条目的INF部分(例如﹐ServiceType和StartType)。
[ServiceInstall]
[ServiceInstall]部分﹐它的名字在DDInstall.Services部分的AddService条目中唯一指定﹐控制和安装驱动程序到服务控制管理器。
条目列表如下:
条目
值
DisplayName
驱动程序的Friendly名字﹐显示在设备管理器中
Description
简短的描述驱动程序或者服务的目的﹐显示在设备管理器中
ServiceType
驱动程序类型: 0x01 -内核驱动程序﹐0x02 -文件系统驱动程序
StartType
何时驱动程序加载: 0 -引导时﹐1 -系统开始时,2 -系统开始后自动加载﹐3 -需要时手动﹐4 -禁止使用
ErrorControl
驱动程序加载时错误部署: 0 -忽视所有错误﹐1 -显示错误给用户﹐2 -使用最后的良好状态重新激活﹐忽视错误﹐3 -使用最后的良好状态重新激活﹐调试错误
ServiceBinary
驱动程序的全路径名﹐可能包含dirid值
未完待续!
文件大部分内容转自: http://wfpb.blogbus.com/logs/5596832.html
- 关于inf文件
- 关于inf文件
- 关于INF文件的一些用法
- 关于 WEB-INF 下的 jsp 文件
- INF文件
- INF文件
- INF文件
- INF文件
- Inf文件
- INF文件
- inf文件
- inf文件
- INF 文件
- 关于WEB-INF目录的文件访问问题
- 关于WEB-INF
- 关于autorun.inf
- AutoRun.inf文件
- 解析INF文件
- 学生管理系统
- js控制打印属性
- Ubuntu10 Apache2 php5 下修改网站的默认根目录
- Windows8开发预览版提供下载【最新有下载地址有真相】
- 解决Ubuntu11.04中Opera中文输入法ibus的问题
- 关于inf文件
- Delphi UPD通讯演示
- 开源的Web Service测试工具介绍
- finalbuilder 自动编译,编译后有错以邮件的形成提示程序员
- ResourceBundle
- Java IO浅析
- 最全的编码总结笔记
- 如何使Linux支持中文字符
- Install and Configure Edge Transport Role