C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载

基于Windows驱动开发技术详解这本书工具

1、简单的INF文件剖析blog

INF文件是一个文本文件,由若干个节(Section)组成。每一个节的名称用一个方括号指示,紧接着方括号后面的就是节内容。每一行就是一项内容,其形式都是相似SomeEntry=SomwValue。每一个项的顺序是能够颠倒的,但系统分析INF文件的时候,是顺序解析的。INF中注释语句是用分号开头的。开发

2、WDM设备安装在注册表中的变化io

WDM式驱动程序的安装会在三个方面修改注册表,分别是硬件子键(Hardware)、类子键(Class)、服务子键(Service)。注册表从这三个方面的子键描述WDM设备。在安装好WDM驱动后,会根据INF的信息,在注册表中有所体现。硬件

安装完WDM式驱动后,除了在注册表中获得体现外,在设备管理器中,设备会同时显示出来。在INF描述的各类信息,均可以从设备管理器中获得体现。权限

一、硬件子键程序

硬件子键,也称实例子键。其信息存储在注册表的Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum位置里。访问此子键必须拥有系统管理员的访问权限,所以访问这个子键只能运行在内核的程序或者拥有系统访问权限的应用程序。方法

咱们本身写的设备是一个模拟设备,当安装了之后能够在设备管理器中看见,也能够在注册表中查看Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\KMDFDriver1\0000.这个能够根据设备管理器中的详细信息查到,能够想到,若是PC中有多于一个的同类设备,序号会顺序排列下去0000、000一、0002。。。观察注册表,会有以下内容,且这些内容会和INF中描述的一致。im

》ClassGUID:指明此设备所属的类的GUID。技术

》Class:指明此设备所属于的设备类

》HardwareID:root\驱动名

》Driver:指明驱动的位置。

》Mfg:指明设备制造商的名称

》Service:指明此设备在服务子键的位置。

》DeviceDesc:显示的是此设备在设备管理器中显示的名字。

 

二、类子键

每一个设备都会从属于一个设备类。类子键负责记录这个类的信息。类子键位Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class目录下。这里记录了系统里全部的设备类,且每一个设备类都是以一个GUID记录的。GUID是一组128位的数字,形如{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}。用户可使用GUIDGEN.exe工具产生一组新的GUID,且保证这个GUID号码不会与旧的GUID重复(是小几率意义上保证的)。GUIDGEN.exe是VC提供的一个附加工具,路径在:安装目录\Microsoft Visual Studio\2017\Enterprise\Common7\Tools下面

经过硬件组件的ClassGUID在类子键里面找到类的信息。这些内容,能够对照INF的片断更改,且同时做用于设备管理器中所显示出来的驱动供应商,驱动版本日期,数字签名等信息。

 

三、服务子键

服务子键是为了兼容之前的NT式驱动程序,能够用一样的方法观察NT式驱动程序的服务子键。服务子键的位置在Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services目录下

》ImagePath:记录驱动程序的执行文件路径。

》Type为1:指示该表描述一个内核模式的驱动。

》Start为3:指示系统应动态装入这个驱动程序。此值会与SERVICE_DEMOND_START常量对应

》ErrorContro为1:指出若是装入驱动程序失败,系统应弹出一个错误提示对话框

相关文章
相关标签/搜索