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 ...
随机推荐
- AVAssetWriter视频数据编码
AVAssetWriter介绍 可以通过AVAssetWriter来对媒体样本重新做编码. 针对一个视频文件,只可以使用一个AVAssetWriter来写入,所以每一个文件都需要对应一个新的AVAss ...
- LTDC_DMA2D驱动实验
STM32F429芯片使用LTDC.DMA2D.及RAM存储器,构成了一个完整的液晶控制器.LTDC负责不断刷新液晶屏(将数据从显存搬运到液晶屏),DMA2D用于图像数据搬运.混合及格式转换(将数据搬 ...
- 【NLP学习其一】什么是命名实体识别NER?
命名实体识别 概念 命名实体识别(Named Entity Recognition,简称NER) , 是指识别文本中具有特定意义的词(实体),主要包括人名.地名.机构名.专有名词等等,并把我们需要识别 ...
- 如何设置Python环境变量
大家好,我是Yivies.相信很多python的初学者们在进行一顿下一步下一步的安装之后,在windows command命令行输入python的时候会出现这样的情况: 可我们希望它是这样子的: 其实 ...
- Linux 安装及管理程序
Linux 安装及管理程序 目录 一.Linux应用程序基础 1.1.应用程序与系统命令的关系 1.2.典型应用程序的目录结构 1.2.常见的软件包封装类型 二.RPM包管理工具 2.1.RPM软件包 ...
- 通过helm部署EFK收集应用日志,ingress-nginx日志解析。
前段时间看了马哥的k8s新书,最后几章讲了下EFK,尝试部署了下,很多问题, 这里改进下,写个笔记记录下吧. 准备工作 所有组件都通过helm3部署,选添加几个仓库. helm repo add bi ...
- 怎样用好PS中的钢笔工具(附练习钢笔工具网站)
想要在PS中得心应手的的描绘出自己想要的线条(也就是路径),就需要对[钢笔工具]有一个充分的理解. [钢笔工具]绘出来的线条全部都是贝赛尔曲线,所以你在学习[钢笔工具]之前,要补习一下贝赛尔曲线的常识 ...
- 记一次Struts中文乱码
起因 最近公司一个智能家具的项目,需要开发后端,APP/WEB的所有请求通过HTPP发送到后台,后台通过socket连接到智能设备.公司只有一个Java技术栈的同事,而他负责设备方面,我只能赶鸭子上架 ...
- linux 之管道命令与重定向
一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...
- XCTF 进阶区 CAT
这题脑洞是真的大,讲道理 看到这个,先尝试了一下命令拼接,发现字符被过滤了应该.fuzz一下看看,有哪些字符还没被过滤了 import requests dictory=["!", ...