Windows驱动程序开发 - 初识驱动
什么是驱动程序?
驱动(Driver)可以简单理解为设备的操作程序,通常驱动是要符合操作系统规范的。
情景一:没有操作系统的情况(裸机)
- 应用通过直接操作接口来发送命令编码,这一过程需要开发人员熟悉数据手册。
- 设备通过接口接收命令,直接执行
- 最后把命令封装成函数,形成库
情景二:应用基于操作系统
- 设备的驱动按照OS规范进行编写,并安装注册到操作系统
- 应用的调用会传递到操作系统,进而调用驱动程序来操作设备。
[1]. 搭建Windows驱动开发环境
早期的windows驱动开发是基于WDM(Windows Driver Model)的,开发难度大。
最新官方推荐的是基于WDF(Windows Driver Foundation)的,有两种模式KMDF(Kernel-Mode内核模式驱动)和UMDF(User-Mode用户模式驱动)。
环境搭建的步骤如下:
- 安装Visual Studio (配置C++环境)以及Windows SDK版本
- 下载安装对应SDK版本的Windows Driver Kit (WDK),安装程序会检测是否已安装对应的SDK
- WDK安装完成会弹出提示,安装VS插件,选择安装
本机采用(适用于 Windows 10 版本 1903 的 WDK)和(Windows SDK 10.0.18362.0),IDE使用VS2019进行开发测试,系统和驱动均为64位。
[2]. 第一个驱动程序
打开Visual Stuido 2019,可以创建UMDF和KMDF模板项目、WDM空项目,我们直接使用模板创建项目。
- 创建 User-Mode Driver (UMDF V2) 项目
- 修改配置为Debug模式 x64
- 编译生成
- 安装inf,需要注意的是此时驱动并没有合法的签名,安装会报错(x64)
[3]. 双机调试
- 安装VMWare虚拟机,以及需要调试的目标(测试)主机系统,配置需要的驱动设备
- 测试主机开启调试模式,以及安装WDK Test Target到测试主机
- 在开发主机VS上添加和配置设备
- VS部署到测试主机,使用附加到进程Kernel的方式调试(前提是驱动安装到目标机)
参考
总结
Windows驱动开发是一门相对入门比较难的技术,微软对系统做了安全限制,因为驱动处于系统较底层,若没有有效的安全机制将会导致入侵计算机的可能性增大。微软的官方文档的操作很全面和详细了,在这里就只记录简化的步骤。
接触驱动,要保持足够的耐心,驱动不难,贵在坚持。
版权声明:本文为gehong3641原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。