W驱开技详.简单的INF文件剖析_ZC(XPx86)

ZC:在查MSDN资料的时候,发现 32位 64位 的OS可能 INF中的内容写法上有区别,∴ 文章标题栏上有 "x86"字样

1、...\01_Windows驱动开发技术详解-源代码\chapter01\WDM_Driver\1\HelloWDM.inf

;; The Win2K DDK documentation contains an excellent INF reference.

;--------- Version Section ---------------------------------------------------

[Version]
Signature="$CHICAGO$"
Provider=Zhangfan_Device
DriverVer=11/1/2007,3.0.0.3

; If device fits one of the standard classes, use the name and GUID here,
; otherwise create your own device class and GUID as this example shows.

Class=ZhangfanDevice
ClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B0}


;--------- 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 = "HelloWDM",Disk1,,

[SourceDisksFiles]
HelloWDM.sys = 1,MyDriver_Check,

;--------- 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,,,,%DeviceClassName%
HKR,,Icon,,"-5"

;--------- DestinationDirs Section -------------------------------------------

[DestinationDirs]
YouMark_Files_Driver = 10,System32\Drivers

;--------- Manufacturer and Models Sections ----------------------------------

[Manufacturer]
%MfgName%=Mfg0

[Mfg0]

; PCI hardware Ids use the form
; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;改成你自己的ID
%DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999

;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------

; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98

[YouMark_DDI]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_9X_AddReg

[YouMark_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,HelloWDM.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0

; --------- Windows NT -----------------

[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg

[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService

[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\HelloWDM.sys

[YouMark_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\HelloWDM\Parameters",\
"BreakOnEntry", 0x00010001, 0


; --------- Files (common) -------------

[YouMark_Files_Driver]
HelloWDM.sys

;--------- Strings Section ---------------------------------------------------

[Strings]
ProviderName="Zhangfan."
MfgName="Zhangfan Soft"
DeviceDesc="Hello World WDM!"
DeviceClassName="Zhangfan_Device"
SvcDesc="Zhangfan"

2、注释改成中文后(HelloWDM__ZC01.inf)

  ZC:这里,集中所有的注释

;; Win2K DDK 文档中有详细参考

;--------- 版本区域 ---------------------------------------------------

[Version]
Signature="$CHICAGO$"
Provider=Zhangfan_Device_01
DriverVer=11/1/2007,3.0.0.3
; ZC: 这个应该是对应 设备管理器中的该硬件的属性的 数字签名程序的。但是未找到"CHICAGO"字样,在注册表中也没搜索到"CHICAGO"字符串

; 如果设备是一个标准类别,使用标准类别的名称和GUID
; 否则创建一个自定义的类别名称,并且定义它的GUID
; ZC: 上面的注释中,张帆是这么说的,但是实际上 XP的注册表中并没有创建新的 自定义的类别名称,而是放在了 UNKNOWN中(即 KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ Root \ UNKNOWN \ 0000)
; ZC:    难道 XP是把它不认识的自定义的硬件 都是放在UNKNOWN中? (控制面板-->添加硬件-->选择"已安装的硬件"的界面选择的是"添加新的硬件设备")
; ZC: FQGoogle查到,有人说这里设置是一种方式,另一种方式是 通过IRP_MN_QUERY_DEVICE_TEXT和IRP_MN_QUERY_DEVICE_ID的方式(该方式暂时不知道怎么使用,∴暂未测试...)
; Class=ZhangfanDevice
Class=ccc
; ClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B0}
ClassGUID={F06012E4-B9BB-41fa-BE7D-F7A8C5AD7A99}


;--------- 安装磁盘节 -----------------------
; 这些节确定安装盘和安装文件的路径
; 读者可以按照自己的需要修改

[SourceDisksNames]
1 = "HelloWDM01",Disk1,,
; ZC: 这里的 "Disk1"难道也是和下面的"MyDriver_Check"一样,指的是 文件夹(目录)?
; ZC: 后面带的2个参数,貌似没有起作用(在注册表里面没有搜到它们...)
; ZC: 难道"Disk1"是指 磁盘1??以后再观察现象 再判断吧...

[SourceDisksFiles]
HelloWDM.sys = 1,MyDriver_Check,
; ZC: 上面的"MyDriver_Check"这里看不出到底是什么,测试观察下来是 用来指明 相对路径的(相对于inf所在目录)
; ZC: 尝试的时候,将 HelloWDM__ZC01.inf文件与HelloWDM.sys 放在同一目录下,发现在安装的时候 会不成功,说找不到sys文件
; ZC:    看它的提示是要将sys文件放到MyDriver_Check,于是这样做了,就安装成功了(按照第1章说的,在设备管理器里面 也能看到 设备Zhangfan_Device)
; ZC: 如果写成"HelloWDM.sys = 1,," 应该就是在 inf文件目录下找驱动了(测试过,就是这样的)

;--------- ClassInstall/ClassInstall32 Section -------------------------------
; 如果使用标准类别设备,下面的 不是必须的

; NT Style
[ClassInstall32]
Addreg=Class_AddReg


; ZC: 这里查资料的话,应该搜索"INF AddReg Directive",∵是上面的 "Addreg" 指明了使用下面的节
[Class_AddReg]
HKR,,,,%DeviceClassName%  ; ZC: 指明了设备管理器中某一列设备的名称。具体里面的某一个设备显示的描述名称 是通过 Manufacturer节中的"%DeviceDesc%"来对应的
HKR,,Icon,,"-5"


;--------- 目标文件节 -------------------------------------------

[DestinationDirs]
YouMark_Files_Driver = 10,System32\Drivers
; ZC: 这里应该是 将驱动从源文件中复制到目标目录中。这里的 "YouMark_Files_Driver" 对应下面“文件节”中的[YouMark_Files_Driver]
; ZC: 上面的"10"是 目录的ID,是有具体含义的,10表示"%SystemRoot%",后面的"System32\Drivers"表示子目录,合在一起就是 系统目录下的"System32\Driver"文件夹
; ZC: 这里,可以做一个实验,(1)改变 目标文件夹位置; (2)复制多个文件,看看现象是怎么样的?

;--------- 制造商节 ----------------------------------

[Manufacturer]
%MfgName%=Mfg0
; ZC: 注意:(1)前面部分 应该是引用下面的字符串节的内容; (2)后面部分 是指向下面的节

[Mfg0]

; PCI hardware Ids use the form  ; ZC: PCI硬件ID信息 使用如下的格式(aaaa,bbbb,cccccccc,dd 应该就是指具体的?位数字)
; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
; 改成你自己的ID
%DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999
; ZC: 上面的 YouMark_DDI 会对应到下面的节

;---------- DDInstall Sections -----------------------------------------------

; --------- Windows NT -----------------

[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg

; ZC: Starting with Windows 2000, an INF file that installs drivers must have DDInstall.Services sections to specify device/driver registry information to be stored in the registry's ...\CurrentControlSet\Services tree. 
; ZC: (MSDN)从Win2000开始,安装驱动的INF文件 必须包含 DDInstall.Services节 用以指明 "device/driver"的注册表信息 该信息存储于注册表的"...\CurrentControlSet\Services"树中
[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService


; ZC: 下面节中 具体的数值对应什么含义,看MSDN中的"INF AddService Directive"
[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\HelloWDM.sys

[YouMark_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\HelloWDM\Parameters",\
"BreakOnEntry", 0x00010001, 0 ; ZC: 这是什么意思?感觉和 断点有关,进DriverEntry就断下来 的意思??应该就是


; --------- 文件节 (common) -------------

[YouMark_Files_Driver]
HelloWDM.sys

;--------- 字符串节 ---------------------------------------------------

; ZC: 下面的内容不会自己在 注册表/设备管理器中 体现出来,只有别的节 引用了这里的字符串,才会有所体现
[Strings]
ProviderName="Zhangfan."
MfgName="Zhangfan Soft"
DeviceDesc="Hello World WDM!"
DeviceClassName="Zhangfan_Device"
SvcDesc="Zhangfan"

 

3、关键字:YouMark,HelloWDM

  ZC:YouMark --> 是对应 inf中某些节 需要用这个来对应好

  ZC:HelloWDM --> 是这个 驱动是 HelloWDM.sys

 3.1、这里的一些 inf的含义等的信息,我是查询的 MSDN的内容,里面的内容可能 地址会变化,因此这里就不贴具体的地址了,到时候 要再查的话 再搜索吧...

 3.2、去掉了 "Windows 9X" 的部分

 3.3、这个驱动,是当做 新增的硬件的驱动来安装的(见 第1章 的安装部分的内容,手动在 管理工具 中 添加硬件 然后 手动的选择驱动程序)

 

4、用于 修改信息,为了适应别的驱动的安装  (HelloWDM__ZC_改信息.inf)

;; Win2K DDK 文档中有详细参考

;--------- 版本区域 ---------------------------------------------------

[Version]
Signature="$CHICAGO$"
Provider=Zhangfan_Device_01 ;        ZC: <== <== <== <== <== <== <== <== <== <== <== Regedit键值
DriverVer=11/1/2007,3.0.0.3 ;        ZC: <== <== <== <== <== <== <== <== <== <== <== Regedit键值

Class=ccc ;                 ZC: <== <== <== <== <== <== <== <== <== <== <== Regedit键值
ClassGUID={F06012E4-B9BB-41fa-BE7D-F7A8C5AD7A99} ; ZC: <== <== <== <== <== <== <== <== <== <== <==


;--------- 安装磁盘节 -----------------------
; 这些节确定安装盘和安装文件的路径
; 读者可以按照自己的需要修改

[SourceDisksNames]
1 = "HelloWDM01",Disk1,, ;         ZC: <== <== <== <== <== <== <== <== <== <== <== 字符串

[SourceDisksFiles]
HelloWDM.sys = 1,MyDriver_Check, ;     ZC: <== <== <== <== <== <== <== <== <== <== <== 驱动文件

;--------- ClassInstall/ClassInstall32 Section -------------------------------
; 如果使用标准类别设备,下面的 不是必须的

; NT Style
[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName% ;         ZC: <== <== <== <== <== <== <== <== <== <== <== Regedit键值
HKR,,Icon,,"-5"


;--------- 目标文件节 -------------------------------------------

[DestinationDirs]
YouMark_Files_Driver = 10,System32\Drivers

;--------- 制造商节 ----------------------------------

[Manufacturer]
%MfgName%=Mfg0

[Mfg0]
%DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999 ; ZC: <== <== <== <== <== <== <== <== <== <== <== 硬件ID(这里是2处数字)

;---------- DDInstall Sections -----------------------------------------------

; --------- Windows NT -----------------

[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg

[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService ;    ZC: <== <== <== <== <== <== <== <== <== <== <== 应该是 Regedit中的项


[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\HelloWDM.sys ;     ZC: <== <== <== <== <== <== <== <== <== <== <== 驱动文件

[YouMark_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\HelloWDM\Parameters",\
"BreakOnEntry", 0x00010001, 0


; --------- 文件节 (common) -------------

[YouMark_Files_Driver]
HelloWDM.sys ;                        ZC: <== <== <== <== <== <== <== <== <== <== <== 驱动文件

;--------- 字符串节 ---------------------------------------------------

[Strings] ; ZC: <== <== <== <== <== <== <== <== <== <== <==
ProviderName="Zhangfan." ;                 ZC: <== <== <== <== <== <== <== <== <== <== <== 未引用
MfgName="Zhangfan Soft"    ;                 ZC: <== <== <== <== <== <== <== <== <== <== <== 1处引用
DeviceDesc="Hello World WDM!" ;             ZC: <== <== <== <== <== <== <== <== <== <== <== 1处引用
DeviceClassName="Zhangfan_Device" ;             ZC: <== <== <== <== <== <== <== <== <== <== <== 1处引用
SvcDesc="Zhangfan" ;                     ZC: <== <== <== <== <== <== <== <== <== <== <== 1处引用

 

5、INF中的信息,对应 设备管理器 和 Regedit 中的哪些信息  (HelloWDM__ZC_信息体现.inf)

;; Win2K DDK 文档中有详细参考

;--------- 版本区域 ---------------------------------------------------

[Version]
Signature="$CHICAGO$" ; ZC: 设备管理器
Provider=Zhangfan_Device_01 ; ZC: 设备管理器 & Regedit (类子键[Class])
DriverVer=11/1/2007,3.0.0.3 ; ZC: 设备管理器 & Regedit (类子键[Class])

Class=ccc ; ZC: 设备管理器 & Regedit (硬件子键[Hardware] & 类子键[Class])
ClassGUID={F06012E4-B9BB-41fa-BE7D-F7A8C5AD7A99} ; ZC: 设备管理器 & Regedit (类子键[Class])


;--------- 安装磁盘节 -----------------------
; 这些节确定安装盘和安装文件的路径
; 读者可以按照自己的需要修改

[SourceDisksNames]
1 = "HelloWDM01",Disk1,,

[SourceDisksFiles]
HelloWDM.sys = 1,MyDriver_Check,

;--------- ClassInstall/ClassInstall32 Section -------------------------------
; 如果使用标准类别设备,下面的 不是必须的

; NT Style
[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName% ; ZC: 设备管理器 & Regedit
HKR,,Icon,,"-5"


;--------- 目标文件节 -------------------------------------------

[DestinationDirs]
YouMark_Files_Driver = 10,System32\Drivers

;--------- 制造商节 ----------------------------------

[Manufacturer]
%MfgName%=Mfg0

[Mfg0]
%DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999 ; ZC: 设备管理器 & Regedit

;---------- DDInstall Sections -----------------------------------------------

; --------- Windows NT -----------------

[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg

[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService ; ZC: Regedit


[YouMark_AddService] ; ZC: Regedit
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\HelloWDM.sys

[YouMark_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\HelloWDM\Parameters",\
"BreakOnEntry", 0x00010001, 0 ; ZC: Regedit


; --------- 文件节 (common) -------------

[YouMark_Files_Driver]
HelloWDM.sys

;--------- 字符串节 ---------------------------------------------------

[Strings]
ProviderName="Zhangfan."
MfgName="Zhangfan Soft"
DeviceDesc="Hello World WDM!"
DeviceClassName="Zhangfan_Device"
SvcDesc="Zhangfan"

 

6、

7、

8、

9、

 

posted @ 2018-12-11 15:36  DriverSkill  阅读(585)  评论(0编辑  收藏  举报