C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载
基于Windows驱动开发技术详解这本书
一、简单的INF文件剖析
INF文件是一个文本文件,由若干个节(Section)组成。每个节的名称用一个方括号指示,紧接着方括号后面的就是节内容。每一行就是一项内容,其形式都是类似SomeEntry=SomwValue。每个项的顺序是可以颠倒的,但系统分析INF文件的时候,是顺序解析的。INF中注释语句是用分号开头的。
二、WDM设备安装在注册表中的变化
WDM式驱动程序的安装会在三个方面修改注册表,分别是硬件子键(Hardware)、类子键(Class)、服务子键(Service)。注册表从这三个方面的子键描述WDM设备。在安装好WDM驱动后,会根据INF的信息,在注册表中有所体现。
安装完WDM式驱动后,除了在注册表中得到体现外,在设备管理器中,设备会同时显示出来。在INF描述的各种信息,都可以从设备管理器中得到体现。
1、硬件子键
硬件子键,也称实例子键。其信息存储在注册表的Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum位置里。访问此子键必须拥有系统管理员的访问权限,因此访问这个子键只能运行在内核的程序或者拥有系统访问权限的应用程序。
我们自己写的设备是一个模拟设备,当安装了以后可以在设备管理器中看见,也可以在注册表中查看Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\KMDFDriver1\0000.这个可以根据设备管理器中的详细信息查到,可以想到,如果PC中有多于一个的同类设备,序号会顺序排列下去0000、0001、0002。。。观察注册表,会有如下内容,且这些内容会和INF中描述的一致。
》ClassGUID:指明此设备所属的类的GUID。
》Class:指明此设备所属于的设备类
》HardwareID:root\驱动名
》Driver:指明驱动的位置。
》Mfg:指明设备制造商的名称
》Service:指明此设备在服务子键的位置。
》DeviceDesc:显示的是此设备在设备管理器中显示的名字。
2、类子键
每个设备都会从属于一个设备类。类子键负责记录这个类的信息。类子键位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的片段更改,且同时作用于设备管理器中所显示出来的驱动供应商,驱动版本日期,数字签名等信息。
3、服务子键
服务子键是为了兼容以前的NT式驱动程序,可以用同样的方法观察NT式驱动程序的服务子键。服务子键的位置在Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services目录下
》ImagePath:记录驱动程序的执行文件路径。
》Type为1:指示该表描述一个内核模式的驱动。
》Start为3:指示系统应动态装入这个驱动程序。此值会与SERVICE_DEMOND_START常量对应
》ErrorContro为1:指出如果装入驱动程序失败,系统应弹出一个错误提示对话框
C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载的更多相关文章
- C++第三十九篇 -- 研究一下Windows驱动开发(二)-- 驱动程序中重要的数据结构
数据结构是计算机程序的核心,I/O管理器定义了一些数据结构,这些数据结构是编写驱动程序时所必须掌握的.驱动程序经常要创建和维护这些数据结构的实例. 一.驱动对象(DRIVER_OBJECT) 每个驱动 ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- 第三十八篇、给UITabBar按钮的动画效果
在很多情况下,我们也时常有这样的需求,就是在UITabBar切换的时候,添加一些动画效果 1.在UITabBar触发点击方法的时候捕获当前点击的item 2.使用coreAnimation设置动画效果 ...
- 第三十八篇-logcat的使用
很多時候,程序有问题时都需要debug,一般会设置几个信息点,查看程序是否运行,之前学过Toast,可以广播,但是终归是不太方便,今天学习一下logcat的用法. logcat里面是一些日志,内容太多 ...
- 第三十八篇 入门机器学习——Numpy.array的基本操作——查看向量或矩阵
No.1. 初始化状态 No.2. 通过ndim来查看数组维数,向量是一维数组,矩阵是二维数组 No.3. 通过shape来查看向量中元素的个数或矩阵中的行列数 No.4. 通过size来查看数组中的 ...
- 第三十八篇:vue3路由
好家伙,水博客怎么说 1.0.安装:简简单单的淘宝镜像安装 装一下淘宝镜像(一般都有) npm install -g cnpm --registry=https://registry.npm.taob ...
- 第四十八篇:webpack的基本使用(二) --安装和配置webpack-dev-server插件
好家伙, 1.webpack中的默认约定 默认的打包入口文件为src -->index.js 默认的输出文件路径为dist -->main.js 既然有默认,那么就说明肯定能改 2.en ...
- 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
随机推荐
- .Net Core with 微服务 - Consul 注册中心
上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...
- 我试了试用 SQL查 Linux日志,好用到飞起
大家好,我是小富~ 最近发现点好玩的工具,迫不及待的想跟大家分享一下. 大家平时都怎么查Linux日志呢? 像我平时会用tail.head.cat.sed.more.less这些经典系统命令,或者aw ...
- 【题解】入阵曲 luogu3941 前缀和 压维
丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂 题目 题目描述 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时 ...
- 【dog与lxy】8.25题解-land
land 题目描述 dog终于有了一块领地,但是现在可怜的dog面临着lxy的入侵,于是他决定在自己的领地设置炮楼来保卫自己免受QJ.现在dog找到它可以在领地上设置炮楼的N个地点.但是留给dog的时 ...
- JavaScript中子函数访问外部变量的方法
我们在写web页面时,肯定会经常遇到下面这种情况: <body> <div class="btns-wrapper"></div> <sc ...
- 重新整理 .net core 实践篇————polly失败重试[三十四]
前言 简单整理一下polly 重试. 正文 在开发程序中一般都有一个重试帮助类,那么polly同样有这个功能. polly 组件包: polly 功能包 polly.Extensions.Http 专 ...
- Terraform状态State管理,让变更有记录
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...
- Vue前端基础学习
vue-cli vue-cli 官方提供的一个脚手架(预先定义好的目录结构及基础代码,咱们在创建Maven项目的时可以选择创建一个骨架项目,这个骨架项目就是脚手架),用于快速生成一个vue项目模板 主 ...
- TS基础应用 & Hook中的TS
说在前面 本文难度偏中下,涉及到的点大多为如何在项目中合理应用ts,小部分会涉及一些原理,受众面较广,有无TS基础均可放心食用. **>>>> 阅完本文,您可能会收获到< ...
- 10 一键部署LNMP网站平台
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin NGINX_V=1.19.1 P ...