教程:基于模板编写通用 Windows 驱动程序 (UMDF 2)
本主题介绍如何使用 User-Mode Driver Framework (UMDF) 2 编写 通用 Windows 驱动程序。 你将从 Microsoft Visual Studio 模板开始,然后在单独的计算机上部署并安装驱动程序。
先决条件
按照步骤安装 Windows 驱动程序工具包(WDK)。 安装 WDK 时,将包括适用于 Windows 的 调试工具。
安装 Visual Studio 2022。 安装 Visual Studio 2022 时,选择使用 C++ 进行桌面开发工作负荷,然后在单独组件下添加:
- MSVC v143 - VS 2022 C++ ARM64/ARM64EC Spectre 缓解库(最新版本)
- MSVC v143 - VS 2022 C++ x64/x86 Spectre 缓解库(最新版本)
- 带有 Spectre 缓解库的适用于最新 v143 生成工具的 C++ ATL (ARM64/ARM64EC)
- 带有 Spectre 缓解库的适用于最新 v143 生成工具的 C++ ATL (x86 & x64)
- 带有 Spectre 缓解库的适用于最新 v143 生成工具的 C++ MFC (ARM64/ARM64EC)
- 带有 Spectre 缓解库的适用于最新 v143 生成工具的 C++ MFC (x86 & x64)
- Windows 驱动程序工具包
创建和生成驱动程序
注意
创建新的 KMDF 或 UMDF 驱动程序时,必须选择包含 32 个字符或更少字符的驱动程序名称。 此长度限制在 wdfglobals.h 中定义。
打开 Visual Studio。 在“文件”菜单上,选择“新建 > 项目”。
在“创建新项目 对话框中,选择左侧下拉列表中的 C++,在中间下拉列表中选择 Windows,然后选择右侧下拉列表中的 驱动程序。
从项目类型列表中选择 用户模式驱动程序(UMDF V2)。 选择“下一步”。
提示
如果在 Visual Studio 中找不到驱动程序项目模板,WDK Visual Studio 扩展未正确安装。 若要解决此问题,请启动 Visual Studio Installer,选择 "修改",然后在 "单个组件" 选项卡中添加 Windows 驱动程序工具包,最后选择 "修改"。
在 配置新项目 对话框中,在 项目名称 字段中输入“UmdfDriver”。
注意
创建新的 KMDF 或 UMDF 驱动程序时,必须选择包含 32 个字符或更少字符的驱动程序名称。 此长度限制在 wdfglobals.h 中定义。
在 位置 字段中,输入要创建新项目的目录。
选中“将解决方案和项目置于同一目录中”,然后选择“创建”。
Visual Studio 创建一个项目和一个解决方案。 可以在 解决方案资源管理器 窗口中看到它们。 (如果 解决方案资源管理器 窗口不可见,请从 视图 菜单中选择 解决方案资源管理器。该解决方案有一个名为 UmdfDriver 的驱动程序项目。 若要查看驱动程序源代码,请打开 源文件下的任何文件。 Driver.c 和 Device.c 是开始的好位置。
解决方案资源管理器
在 解决方案资源管理器 窗口中,选择并按住(或右键单击)解决方案“UmdfDriver”(共 1 个项目),然后选择 配置管理器。 为驱动程序项目选择配置和平台。 例如,选择 调试 和 x64。
在 解决方案资源管理器 窗口中,选择并按住 UmdfDriver (或右键单击),然后选择 属性。 导航到 配置属性 > 驱动程序设置 > 常规,请注意,目标平台 默认为 通用。
若要生成驱动程序,请从 生成 菜单中选择 生成解决方案。 Microsoft Visual Studio 在 输出 窗口中显示生成进度。 (如果 输出 窗口不可见,请从 视图 菜单中选择 输出。
验证生成输出是否包括:
> Driver is 'Universal'.
验证解决方案是否已成功生成后,可以关闭 Visual Studio。
若要查看生成的驱动程序,请在文件资源管理器中转到 UmdfDriver 文件夹,然后 x64\Debug\UmdfDriver。 该目录包括以下文件:
- UmdfDriver.dll - 用户模式驱动程序文件
- UmdfDriver.inf -- 安装驱动程序时 Windows 使用的信息文件
部署并安装通用 Windows 驱动程序
通常在测试和调试驱动程序时,调试器和驱动程序在单独的计算机上运行。 运行调试器的计算机称为 主计算机,运行驱动程序的计算机称为 目标计算机。 目标计算机也称为 测试计算机。
重要
到目前为止,你已使用 Visual Studio 在主计算机上生成驱动程序。 现在需要配置目标计算机。 按照预配计算机以便进行驱动程序部署和测试 (WDK 10) 中的说明进行操作。 然后,便可以部署、安装、加载和调试驱动程序。
在主计算机上,在 Visual Studio 中打开解决方案。 可以在 UmdfDriver 文件夹中双击解决方案文件UmdfDriver.sln。
在 解决方案资源管理器 窗口中,选择并按住 UmdfDriver (或右键单击),然后选择 属性。
在“UmdfDriver 属性页”窗口中,依次转到“配置属性”>“驱动程序安装”>“部署”,如此处所示。
在部署 之前检查删除以前的驱动程序版本。
对于 目标设备名称,请选择配置为测试和调试的计算机的名称。
选择 硬件 ID 驱动程序更新,然后输入驱动程序的硬件 ID。 在本练习中,硬件 ID 为 Root\UmdfDriver。 选择“确定”。
注意 在本练习中,硬件 ID 未标识硬件的真实部分。 它标识了虚构设备,该设备位于设备树中,作为根节点的子节点。 对于真实的硬件,不要选择“硬件 ID 驱动程序更新”,而要选择“安装并验证”。 可以在驱动程序的信息(INF)文件中查看硬件 ID。 在 解决方案资源管理器 窗口中,转到 UmdfDriver > 驱动程序文件,然后双击 UmdfDriver.inf。 硬件 ID 位于 [Standard.NT$ARCH$] 下。
[Standard.NT$ARCH$] %DeviceName%=MyDevice_Install,Root\UmdfDriver
在 “调试”菜单上,选择“开始调试”,或在键盘上按 F5。
等待驱动程序部署、安装、加载到目标计算机上。 这可能需要几分钟时间。
使用驱动程序模块框架 (DMF)
驱动程序模块框架(DMF) 是 WDF 的扩展,可为 WDF 驱动程序开发人员启用额外的功能。 它可帮助开发人员更好地更快地编写任何类型的 WDF 驱动程序。
DMF 作为框架允许创建称为 DMF 模块的 WDF 对象。 这些 DMF 模块的代码可以在不同的驱动程序之间共享。 此外,DMF 捆绑了我们为驱动程序开发的 DMF 模块库,并且感觉将为其他驱动程序开发人员提供价值。
DMF 不替换 WDF。 DMF 是与 WDF 一起使用的第二个框架。 利用 DMF 的开发人员仍使用 WDF 及其所有基元来编写设备驱动程序。
有关详细信息,请参阅 驱动程序模块框架(DMF)。
相关主题
适用于 Windows 的 调试工具