为设备驱动程序启用 DMA 重新映射

为确保与内核 DMA 保护DMAGuard 策略兼容,PCIe 设备驱动程序可选择使用直接内存访问 (DMA) 重新映射。

设备驱动程序的 DMA 重新映射可防止内存损坏和恶意 DMA 攻击,并为设备提供更高级别的兼容性。 此外,与 DMA 重新映射兼容的驱动程序的设备可以启动和执行 DMA,而不考虑锁屏状态。

在启用了内核 DMA 保护的系统上,DMAGuard Policy 可能会阻止设备(具有 DMA 重新映射不兼容的驱动程序)连接到 外部/公开 的 PCIe 端口 (,例如 M.2、Thunderbolt™) ,具体取决于系统管理员设置的策略值。

启用和选择加入 DMA 重新映射的驱动程序要求

驱动程序使用以下接口执行 DMA:

若要调整驱动程序的 DMA 重新映射策略,请将如下所示的 INF 指令添加到服务安装部分:

  [MyServiceInstall_AddReg]
  HKR,Parameters,DmaRemappingCompatible,0x00010001,1    ; where 1 = opt-in

DmaRemappingCompatible 的有效值为:

含义
0 退出。这向系统指示驱动程序与 DMA 重新映射不兼容。
1 选择启用。 这向系统表明驱动程序与 DMA 重新映射完全兼容。
2 仅当满足以下一个或多个条件时才选择加入:A。如果设备是外部设备, (例如。Thunderbolt) ;B。如果在驱动程序验证程序中启用了 DMA 验证。
无注册表项 让系统确定策略。

测试驱动程序时,请启用驱动程序验证程序。 出于测试目的,在驱动程序验证程序下,用于选择外部设备的 INF 指令的值提升为 1。

使用启用了 VT-d/AMD-Vi 的 Windows 10 最新内部版本测试 Intel x64 和 AMD64 系统上的驱动程序功能。

警告

图形设备驱动程序不支持 DMA 重新映射。

对版本 3 的支持仅适用于 Windows 11。 在Windows 10,如果在 INF 中指定 3,系统将回退到值 2。

验证是否为特定设备驱动程序实例启用了 DMA 重新映射

若要检查特定驱动程序是否选择了 DMA 重新映射,请在设备的“详细信息”选项卡中查找与 DMA 重新映射策略属性对应的值设备管理器。 驱动程序可以查询 DEVPKEY_Device_DmaRemappingPolicy 属性,以确定设备的 DMA 重新映射功能。 查看该页上的潜在返回值,请注意,这些返回值与上一部分中列出的 DmaRemappingCompatible 的值不同。

设备管理器详细信息选项卡。

注意

对于版本 1803 和 1809 Windows 10,设备管理器 中的属性字段使用 GUID {83da6326-97a6-4088-9453-a1923f573b29}[18]