1、驱动类型
设备函数驱动
设备筛选器驱动
软件驱动
文件系统筛选器驱动
文件系统驱动
- 驱动类型关乎代码的实现和驱动的安装
- NT式驱动程序以services的形式运行
- 其它驱动采用同样的INF文件安装
- 软件驱动程序2个选项:KMDF和内核模式window NT驱动程序模型
- 基于WDF的驱动开发
各种对象:驱动对象、设备对象、WDF对象、文件对象、队列对象
驱动上下文:称为设备扩展,用于存储特定设备对象相关信息的数据结构
对象的释放:考虑不同性质对象释放的时机
中断请求级别:处理不当容易导致蓝屏
分页与非分页
同步锁:回调同步锁、框架等待锁、自旋锁、中断锁等
日志跟踪记录:调试必备,可采用WPP(window软件追踪预处理器)或简单的DebugPrint输出
与应用程序通讯:控制代码IoCtrlxxx,IRQ、请求队列 - 驱动安装
测试环境下安装驱动前:
- 开启测试模式:bcdedit /set testsigning on
- 重启设备
- 关闭测试模式:bcdedit /set testsigning off
5.1 以服务形式运行
NT式的驱动程序允许以service的形式运行
5.2 使用INF文件安装
设备相关的驱动安装可以选择INF进行安装,
- 通过设备管理器手动安装:打开cmd,输入devmgmt
- 通过程序实现自行安装:
可以参考 WDF Sample 中的Driver Install Frameworks API (DIFxAPI) Sample 和Device Console (DevCon) Tool 两个工程,分别提供了不同调用接口的驱动安装方式,Device Console (DevCon) Tool 生成的devcon.exe 是一个功能强大的工具,不仅可用于驱动(包)的安装和卸载,还可以获取设备的硬件ID,描述符以及设备所安装的驱动列表等信息,开发人员可以从中一窥究竟。
在驱动的安装过程中,系统会自动记录安装的日志,在INF目录(路径一般在 C:\Windows\inf下)下可以找到两个日志文件 setupapi.app.log 和 Setupapi.dev.log ,查看这两个日志文件有利于理解驱动安装的执行过程,同时也有利于排查驱动安装过程中出现的异常。
- 驱动签名
6.1 测试环境
通过VS集成开发环境创建 Driver 解决方案后会生成两个项目,右键属性打开 XXX Package,左侧选中 Driver Signing ,在右侧栏 Sign Mode 选择 Test Sign,在 Test Certificate选择 <Create test certificate...>,则在编译时会自动生成测试签名证书
6.2 生产环境
从Win10开始,驱动文件包不仅需要进行扩展验证 (EV) 代码签名,还需要提交到硬件开发中心仪表盘,具体操作指南可以参考此处,你可以在该文档上找到驱动签名所需的任何内容
Windows下如何创建低权限进程
https://www.cnblogs.com/liaoguifa/p/lower-process-integrity.html
本地系统服务例程:Nt和Zw系列函数
https://www.cnblogs.com/liaoguifa/p/9647870.html