引言
对于 Windows 驱动开发,在微软官方的文档中其实有很多有用的文档来进行讲解和学习,这里将驱动开发统一归类成了 Windows 硬件开发(https://learn.microsoft.com/zh-cn/windows-hardware/drivers/),在这个链接的相关文档中能够找到我们所需要的所有内容(由于Windows的不开源,所以我们对于Windows相关的学习要全部依赖官方释放的资料)。
开始学习 Windows 驱动开发,首先需要搭建属于自己的开发环境(这样在学习过程中能够自己尝试演示、验证),Windows 下的开发工作很多都依赖复杂的开发环境搭建,这部分工作量还挺大(相比 Linux 环境下),这是由于 Windows 的开发 IDE 虽然部署复杂但是使用起来会节省(掩盖)很多操作。
本章的主要内容如下:
- 了解 Windows 驱动开发环境
- 下载 Windows 驱动开发环境
- 编写一个最简单的 NT 驱动
- 编译完成 NT 驱动(表示当前开发环境已经搭建完成),后续在调试中会演示安装驱动及调试过程。
了解 Windows 驱动开发环境
早先的 Windows 驱动开发环境更多是通过 VC++ 来进行,结合使用 Windows 驱动开发工具包(WDK)进行编译完成。但是我接触这部分内容的时候 Windows 已经更新发布了 Windows11 了,所以对 Windows 驱动开发工具这部分也有了很大的变化和优化。
现如今,Windows 驱动程序开发环境和 Windows 调试器已集成到 Microsoft Visual Studio 中。 在此集成的驱动程序开发环境中,Visual Studio 界面中提供有编码、构建、打包、部署和测试驱动程序所需的大部分工具。Visual Studio 可以说是 Windows 操作系统中软件开发的利器,通过这个 IDE 我们可以进行 Windows 驱动开发、Windows 界面应用开发、Windows 程序调试等等。
所以,我们现在要部署 Windows 驱动开发环境,就需要先安装 Visual Studio,然后再安装 Windows 驱动开发工具包(WDK)。 要了解如何获取 Visual Studio 和 WDK,请访问 WDK 设置和下载页面(WDK 设置和下载页面)。 Windows 调试工具(Windows调试工具)包含在 WDK 安装中。
WDK 使用 MSBuild.exe,Visual Studio 用户界面中提供有此程序,并且它也可以作为命令行工具提供。 在 Visual Studio 环境中创建的驱动程序使用项目和解决方案文件来描述项目或项目组。 Visual Studio 环境提供有用于将旧源和目录文件转换成项目和解决方案文件的工具。
Visual Studio 环境提供适用于以下项的模板:
- 新驱动程序
- 驱动程序包
- 新测试
- 现有测试的增强功能
- 自定义驱动程序部署脚本
在 Visual Studio 环境中,你可以配置构建流程,使其自动创建和签署驱动程序包。 Visual Studio 中提供了静态和实时分析工具。 你可以配置用于测试驱动程序的目标计算机,并在每次重建时将你的驱动程序自动部署到目标计算机。 你可以从多个运行时测试中进行选择,也可以编写自己的测试。
下载 Windows 驱动开发环境
下载安装 Windows 驱动开发环境的操作步骤:
- 选择合适的 Visual Studio 版本进行下载安装;
- 选择对应的 WDK 版本进行下载安装;
根据需要下载安装对应版本的 Visual Studio
由于 Windows 操作系统的内核版本不同导致我们对于要开发 Windows 驱动也需要考虑该驱动要适配的 Windows 版本,不同的目标操作系统版本需要使用到不同版本的 VS 开发环境和不同版本的 WDK 包。具体可以参考如下表格内容:
下表指明了不同版本的 WDK 需要的 Visual Studio 版本。
Windows 目标版本 | Visual Studio 版本 |
---|---|
Windows 11 版本 21H2、Windows Server 2022、Windows 10 版本 2004、Windows 10 版本 1903 | Visual Studio Community 2019、Visual Studio Professional 2019、Visual Studio Enterprise 2019 |
Windows 10 版本 1809、Windows 10 版本 1803、Windows 10 版本 1709 | Visual Studio Community 2017、Visual Studio Professional 2017、Visual Studio Enterprise 2017 |
Windows 10 版本 1703、Windows 10 版本 1607 | Visual Studio Express 2015 桌面版、Visual Studio Community 2015、Visual Studio Professional 2015、Visual Studio Enterprise 2015 |
Windows 8.1 更新、Windows 8.1 | Visual Studio 2013 |
Windows 8 | Visual Studio Professional 2012、Visual Studio Ultimate 2012 |
安装 Visual Studio 时,选择 使用 C++ 的桌面开发
工作负载。 Windows 10 软件开发工具包 (SDK) 会自动包括在内,并显示在右侧的“摘要”窗格中。
若要开发 Arm/Arm64 驱动程序,请选择 单个组件
,然后在 编译器、生成工具和运行时
下选择 适用于 Arm/Arm64 的 Visual C++ 编译器和库
。
这里需要注意一下,由于我的版本比较高,只需要下载 Visual Studio 即可(内部包含了 Windows SDK)。如果开发的目标系统运行 Windows 10 版本 1607 或 Windows 10 版本 1703,则应安装 Visual Studio 2015,然后再下载并安装适用于目标 Windows 10 版本的 Windows SDK 版本,如下表所示。
Windows 目标版本 | Windows SDK 版本 |
---|---|
Windows 10 版本 1703 | 适用于 Windows 10.0.15063.468 的 Windows SDK |
Windows 10 版本 1607 | 适用于 Windows 10.0.14393.795 的 Windows SDK |
Windows 8.1 | 适用于 Windows 8.1 的 Windows SDK |
Windows 8 | 适用于 Windows 8 的 Windows SDK |
Windows SDK 未包含在 Visual Studio 2015 中,因此必须单独安装 SDK。 更高版本的 Visual Studio 包含 Windows SDK。
我这里选择的目标 Windows 操作系统版本是 Windows 10 22H2 版本。
选择 Visual Studio 版本只需要考虑 Windows 大版本即可,不过要注意 Windows 10 1903、Windows 10 1809、Windows 10 1703 这几个有跨度的版本所需要的 Visual Studio 版本是不一致的,分别对应 2019、2017、2015。
我们这里选择下载使用 Visual Studio 2019 社区版。
我这里已经安装完成,并且我由于不同的目标版本原因,还同时安装了不同版本的 Visual Studio,这里只需要安装 2019 版本,并且安装只需要选择 使用C++的桌面开发
这里选择完成后,执行下载安装即可。(这个过程可能需要一点时间,并且要确保网络正常)
完成后启动打开就能看到 Visual Studio 2019 的启动界面了。
现在我们还没有安装对应的 WDK(Windows 驱动开发包),所以现在选择新建项目还没有 driver 对应的解决方案可以选择。
下载安装对应的 WDK 工具包
和 Visual Studio 选择版本一样,我们也需要根据情况选择安装对应的 WDK 版本。
WDK 与 Visual Studio 和 Windows 调试工具 (WinDbg) 集成在一起。 此集成环境提供了开发、生成、打包、部署、测试和调试驱动程序所需的工具。(从 Windows 10 版本 1709 开始,安装 WDK 时会默认安装 Visual Studio 的 WDK 扩展。 这些扩展是将 WDK 与 Visual Studio 集成所必需的。)
Windows 目标版本 | WDK 和相关下载 |
---|---|
Windows 11 版本 22H2 | 下载 Windows 驱动程序工具包 (WDK) |
Windows 11 版本 21H2 | Windows 11 版本 21H2 WDK |
Windows Server 2022 | 适用于 Windows Server 2022 的 WDK |
Windows 10 版本 22H2、Windows 10 版本 21H2、Windows 10,版本 21H1、Windows 10 版本 20H2、Windows 10 版本 2004 | 适用于 Windows 10 版本 2004 的 WDK |
Windows 10 版本 1909、Windows 10 版本 1903 | 适用于 Windows 10 版本 1903 的 WDK |
Windows 10 版本 1809、Windows Server 2019 | 适用于 Windows 10 版本 1809 的 WDK |
Windows 10 版本 1803 | 适用于 Windows 10 版本 1803 的 WDK |
Windows 10 版本 1709 | 适用于 Windows 10 版本 1709 的 WDK |
Windows 10 版本 1703 | 适用于 Windows 10 版本 1703 的 WDK |
Windows 10 版本 1607、Windows 10 版本 1511、Windows 10 版本 1507、Windows Server 2016 | 适用于 Windows 10 版本 1607 的 WDK |
Windows 8.1 更新 | WDK 8.1 更新仅 (英语) - 永久不可用、WDK 8.1 更新测试包仅 (英语) - 永久不可用、WDK 8.1 示例(注意:可以使用从 Windows 10 版本 1607 到 Windows 11 版本 21H2 的任何 WDK 为Windows 8.1生成驱动程序。) |
Windows 7 | WDK 7.1.0 |
Windows 8 | WDK 8(仅英语)、WDK 8 可再发行组件(仅英语)、WDK 8 示例 |
由于我们需要的是 Windows10 22H2 对应版本的 WDK,所以根据上表对应选择适用于 Windows 10 版本 2004 的 WDK。(wdksetup.exe)
这个安装过程就很简单了,只需要一直 next 到最后就完成安装了。当这里安装完成 WDK 后,我们再次打开 Visual Studio 2019,然后选择新建项目,就可以在项目类型中选择 Driver
了,这就表示我们的 Windows 驱动开发环境已经搭建完成了。
编写第一个驱动代码
在上一部分,我们已经完成了 Windows 的驱动开发环境部署。这里,就尝试编写一个最简单的驱动来验证我们的环境。
打开 Visual Studio 2019,选择新建项目,项目类型中选择
Driver
,然后选择Kernel Model Driver(KMDF)
,点击下一步
。输入新建项目名称、存储路径,点击
创建
。
IDE 工具会自动帮我们完成基础的文件创建,在解决方案资源管理器中可以看到已经自动创建的文件。什么都不改,直接选择
生成
-生成解决方案
,会编译生成一个空的 Windows driver 文件在刚刚我们存储的路径下
这里就完成了一个最基本的 Windows driver 的创建和编译生成。
在后面的章节中,我们了解到关于 Windows 驱动相关的概念后,再进行添加代码和部署、调试等操作。
总结
本章内容简单介绍了关于 Windows 驱动开发环境的相关知识,并基于 Windows 10 22H2 的操作系统版本进行了 Windows 驱动开发环境的部署验证。要完成 Windows 驱动开发环境需要根据自己开发的目标操作系统版本选择对应的 Visual Studio 版本及 WDK(Windows 驱动工具包)版本。安装步骤也是先安装 Visual Studio 后安装 WDK。如果是高版本的 Windows 操作系统这两步就完成了(因为需要的 Windows SDK 已经集成到 Visual Studio 中),如果是 Visual Studio 2015 版本以下则需要再单独下载安装 Windows SDK 。
通过本章内容的学习,相信大家已经能够在自己的机器上部署完成 Windows 驱动开发环境了。后面就可以专心学习关于 Windows 驱动相关的技术内容了。
参考资料
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads