概述
ZC:在查MSDN资料的时候,发现 32位 64位 的OS可能 INF中的内容写法上有区别,∴ 文章标题栏上有 "x86"字样
1、... 1_Windows驱动开发技术详解-源代码chapter01WDM_Driver1HelloWDM.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,System32Drivers ;--------- Manufacturer and Models Sections ---------------------------------- [Manufacturer] %MfgName%=Mfg0 [Mfg0] ; PCI hardware Ids use the form ; PCIVEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd ;改成你自己的ID %DeviceDesc%=YouMark_DDI, PCIVEN_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%System32DriversHelloWDM.sys [YouMark_NT_AddReg] HKLM, "SystemCurrentControlSetServicesHelloWDMParameters", "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: 翻墙Google查到,有人说这里设置是一种方式,另一种方式是 通过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,System32Drivers ; ZC: 这里应该是 将驱动从源文件中复制到目标目录中。这里的 "YouMark_Files_Driver" 对应下面“文件节”中的[YouMark_Files_Driver] ; ZC: 上面的"10"是 目录的ID,是有具体含义的,10表示"%SystemRoot%",后面的"System32Drivers"表示子目录,合在一起就是 系统目录下的"System32Driver"文件夹 ; ZC: 这里,可以做一个实验,(1)改变 目标文件夹位置; (2)复制多个文件,看看现象是怎么样的? ;--------- 制造商节 ---------------------------------- [Manufacturer] %MfgName%=Mfg0 ; ZC: 注意:(1)前面部分 应该是引用下面的字符串节的内容; (2)后面部分 是指向下面的节 [Mfg0] ; PCI hardware Ids use the form ; ZC: PCI硬件ID信息 使用如下的格式(aaaa,bbbb,cccccccc,dd 应该就是指具体的?位数字) ; PCIVEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd ; 改成你自己的ID %DeviceDesc%=YouMark_DDI, PCIVEN_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 ...CurrentControlSetServices tree. ; ZC: (MSDN)从Win2000开始,安装驱动的INF文件 必须包含 DDInstall.Services节 用以指明 "device/driver"的注册表信息 该信息存储于注册表的"...CurrentControlSetServices"树中 [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%System32DriversHelloWDM.sys [YouMark_NT_AddReg] HKLM, "SystemCurrentControlSetServicesHelloWDMParameters", "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,System32Drivers ;--------- 制造商节 ---------------------------------- [Manufacturer] %MfgName%=Mfg0 [Mfg0] %DeviceDesc%=YouMark_DDI, PCIVEN_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%System32DriversHelloWDM.sys ; ZC: <== <== <== <== <== <== <== <== <== <== <== 驱动文件 [YouMark_NT_AddReg] HKLM, "SystemCurrentControlSetServicesHelloWDMParameters", "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,System32Drivers ;--------- 制造商节 ---------------------------------- [Manufacturer] %MfgName%=Mfg0 [Mfg0] %DeviceDesc%=YouMark_DDI, PCIVEN_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%System32DriversHelloWDM.sys [YouMark_NT_AddReg] HKLM, "SystemCurrentControlSetServicesHelloWDMParameters", "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、
转载于:https://www.cnblogs.com/DriverSkill/p/10102558.html
最后
以上就是洁净万宝路为你收集整理的W驱开技详.简单的INF文件剖析_ZC(XPx86)的全部内容,希望文章能够帮你解决W驱开技详.简单的INF文件剖析_ZC(XPx86)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复