Windows驱动程序开发 - 初识驱动


什么是驱动程序?

驱动(Driver)可以简单理解为设备的操作程序,通常驱动是要符合操作系统规范的。

情景一:没有操作系统的情况(裸机)

  1. 应用通过直接操作接口来发送命令编码,这一过程需要开发人员熟悉数据手册。
  2. 设备通过接口接收命令,直接执行
  3. 最后把命令封装成函数,形成库
命令
命令
设备
接口
应用

情景二:应用基于操作系统

  1. 设备的驱动按照OS规范进行编写,并安装注册到操作系统
  2. 应用的调用会传递到操作系统,进而调用驱动程序来操作设备。
设备
驱动
OS
应用

[1]. 搭建Windows驱动开发环境

早期的windows驱动开发是基于WDM(Windows Driver Model)的,开发难度大。
最新官方推荐的是基于WDF(Windows Driver Foundation)的,有两种模式KMDF(Kernel-Mode内核模式驱动)和UMDF(User-Mode用户模式驱动)。

环境搭建的步骤如下:

  1. 安装Visual Studio (配置C++环境)以及Windows SDK版本
  2. 下载安装对应SDK版本的Windows Driver Kit (WDK),安装程序会检测是否已安装对应的SDK
  3. WDK安装完成会弹出提示,安装VS插件,选择安装

本机采用(适用于 Windows 10 版本 1903 的 WDK)和(Windows SDK 10.0.18362.0),IDE使用VS2019进行开发测试,系统和驱动均为64位。

[2]. 第一个驱动程序

打开Visual Stuido 2019,可以创建UMDF和KMDF模板项目、WDM空项目,我们直接使用模板创建项目。

  1. 创建 User-Mode Driver (UMDF V2) 项目
  2. 修改配置为Debug模式 x64
  3. 编译生成
  4. 安装inf,需要注意的是此时驱动并没有合法的签名,安装会报错(x64)

[3]. 双机调试

  1. 安装VMWare虚拟机,以及需要调试的目标(测试)主机系统,配置需要的驱动设备
  2. 测试主机开启调试模式,以及安装WDK Test Target到测试主机
  3. 在开发主机VS上添加和配置设备
  4. VS部署到测试主机,使用附加到进程Kernel的方式调试(前提是驱动安装到目标机)

参考

Windows 驱动程序入门

总结

Windows驱动开发是一门相对入门比较难的技术,微软对系统做了安全限制,因为驱动处于系统较底层,若没有有效的安全机制将会导致入侵计算机的可能性增大。微软的官方文档的操作很全面和详细了,在这里就只记录简化的步骤。
接触驱动,要保持足够的耐心,驱动不难,贵在坚持。


版权声明:本文为gehong3641原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。