转自: http://www.itstudy.net/html/200911/30/20091130234443.htm
第十五章.驱动程序的安装
Entry
|
Value
|
Signature
|
“$Windows NT$" "$Windows 95$" "$Chicago$"的其中一个
|
Class
|
驱动程序的整个家族的类名﹒一些名字是预先确定的﹐例如﹐Net或者Display
|
ClassGuid
|
一个类的独一无二的GUID
|
Provider
|
INF文件提供者的名字
|
LayoutFile
|
只有在系统支持的INF文件中使用﹐OEM支持的INF文件用SourceDisksNames
和 SourceDisksFiles代替
|
DriverVer
|
mm/dd/yyyy[,x,y,v,z],必须的条目﹐包含可选的版本信息
|
Entry
|
Value
|
DriverVer
|
mm/dd/yyyy[,x,y,v,z]﹐必须的条目﹐包含可选择的版本号码
|
CopyFiles
|
另一个指定需要复制的文件列表的部分或者一个单独的有”@”为前缀的文件名
|
AddReg
|
必须的﹐另一个包含需要的注册表信息的部分
|
Include
|
指向其它的INF文件名指针列表
|
Needs
|
Include条目的子集﹐列出了它的INF文件中需要的部分
|
DelFiles
|
指定另一个需要删除的文件列表的部分(一般是升级的目的)
|
RenFiles
|
指定另一个需要重命名的文件列表的部分(一般是存储安装之前的状态)
|
DelReg
|
指定另一个需要删除的系统注册表信息的部分
|
ProfileItems
|
指定另一个需要更改系统开始菜单的部分
|
二进制值
|
符号名
|
描述
|
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
|
不允许用户跳过文件
|
缩写
|
意义
|
HKCR
|
HKEY_CLASSES_ROOT
|
HKCU
|
HKEY_CURRENT_USER
|
HKLM
|
HKEY_LOCAL_MACHINE
|
HKU
|
HKEY_USERS
|
HKR
|
设备安装的硬件子键
|
二进制值
|
符号
|
意义
|
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值
|
值
|
意义
|
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的根路径
|
01
|
这个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
|
二进制值
|
符号名
|
意义
|
0x0002
|
ASSOCSERVICE
|
驱动程序是一个FDO﹐不是滤波驱动程序
|
0x0008
|
NOCLOBBER_DISPLAYNAME
|
不重写friendly名字
|
0x0100
|
NOCLOBBER_DESCRIPTION
|
不重写Description
|
0x0010
|
NOCLOBBER_STARTTYPE
|
不重写starttype
|
0x0020
|
NOCLOBBER_ERRORCONTROL
|
不重写错误控制
|
条目
|
值
|
DisplayName
|
驱动程序的Friendly名字﹐显示在设备管理器中
|
Description
|
简短的描述驱动程序或者服务的目的﹐显示在设备管理器中
|
ServiceType
|
驱动程序类型: 0x01 -内核驱动程序﹐0x02 -文件系统驱动程序
|
StartType
|
何时驱动程序加载: 0 -引导时﹐1 -系统开始时
2 -系统开始后自动加载﹐3 -需要时手动﹐4 -禁止使用
|
ErrorControl
|
驱动程序加载时错误部署: 0 -忽视所有错误﹐1 -显示错误给用户﹐
2 -使用最后的良好状态重新激活﹐忽视错误﹐
3 -使用最后的良好状态重新激活﹐调试错误
|
ServiceBinary
|
驱动程序的全路径名﹐可能包含dirid值
|
类名
|
意义
|
GUID
|
1394
|
1394火线控制器
|
{6bdd1fc1-810f-11d0-bec7-08002be2092f}
|
Battery
|
电池设备
|
{72631e54-78a4-11d0-bcf7-00aa00b7b32a}
|
CDROM
|
CD-ROM设备
|
{4d36e965-e325-11ce-bfc1-08002be10318}
|
DiskDrive
|
磁盘设备
|
{4d36e967-e325-11ce-bfc1-08002be10318}
|
Display
|
显示适配器
|
{4d36e968-e325-11ce-bfc1-08002be10318}
|
FloppyDisk
|
软盘控制器
|
{4d36e980-e325-11ce-bfc1-08002be10318}
|
HDC
|
硬盘控制器
|
{4d36e96a-e325-11ce-bfc1-08002be10318}
|
HIDClass
|
人性化的输入设备
|
{745a17a0-74d3-11d0-b6fe-00a0c90f57da}
|
Image
|
成像设备
|
{6bdd1fc6-810f-11d0-bec7-08002be2092f}
|
Infrared
|
IrDA设备
|
{6bdd1fc5-810f-11d0-bec7-08002be2092f}
|
Keyboard
|
键盘
|
{4d36e96b-e325-11ce-bfc1-08002be10318}
|
MTD
|
存储器技术驱动程序
|
{4d36e970-e325-11ce-bfc1-08002be10318}
|
Media
|
多媒体设备
|
{4d36e96c-e325-11ce-bfc1-08002be10318}
|
Modem
|
调制解调器
|
{4d36e96d-e325-11ce-bfc1-08002be10318}
|
Monitor
|
监视器
|
{4d36e96e-e325-11ce-bfc1-08002be10318}
|
Mouse
|
鼠标器
|
{4d36e96f-e325-11ce-bfc1-08002be10318}
|
Multifunction
|
多功能设备
|
{4d36e971-e325-11ce-bfc1-08002be10318}
|
Network
|
网络适配器
|
{4d36e972-e325-11ce-bfc1-08002be10318}
|
NetClient
|
网络客户机
|
{4d36e973-e325-11ce-bfc1-08002be10318}
|
NetService
|
网络服务器
|
{4d36e974-e325-11ce-bfc1-08002be10318}
|
NetTrans
|
网络传输
|
{4d36e975-e325-11ce-bfc1-08002be10318}
|
PCMCIA
|
PCMCIA适配器
|
{4d36e977-e325-11ce-bfc1-08002be10318}
|
Ports
|
端口(COM & LPT)
|
{4d36e978-e325-11ce-bfc1-08002be10318}
|
Printer
|
打印机设备
|
{4d36e979-e325-11ce-bfc1-08002be10318}
|
Volume
|
存储卷
|
{71a27cdd-812a-11d0-bec7-08002be2092f}
|
System
|
系统设备
|
{4d36e97d-e325-11ce-bfc1-08002be10318}
|
USB
|
USB
|
{36fc9e60-c465-11cf-8056-444553540000}
|
2, 注册表
INF文件中的内容会在注册表中有所体现
硬件子键
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Enum/{设备管理器该设备属性的详细信息}
类子键
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{GUID}
服务子键
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/{Driver名称}
3, 安装流程
Step 1
Step 2
Step 3
Step 4
Step 5
注 * 从磁盘安装
Step 6
Step 7
Step 8
Step 9
安装完成
Step 10
在设备管理器中查看
Step 11
查看属性
4, 给出一个已经编译好的驱动(包括INF文件,符号文件和源代码)
代码就是《驱动开发技术详解》光盘中第一章的代码。
可以使用WinDBG和VMWare进行简单的调试练习。
关于WinDBG的使用会在下一篇Blog中描述。