DXGKDDI_BEGINEXCLUSIVEACCESS回调函数 (d3dkmddi.h)

Dxgkrnl 调用 DxgkDdiBeginExclusiveAccess 以通知内核模式驱动程序即将发生 IOMMU 域切换。

语法

DXGKDDI_BEGINEXCLUSIVEACCESS DxgkddiBeginexclusiveaccess;

NTSTATUS DxgkddiBeginexclusiveaccess(
  IN_CONST_HANDLE hAdapter,
  IN_PDXGKARG_BEGINEXCLUSIVEACCESS pBeginExclusiveAccess
)
{...}

参数

hAdapter

[in]与显示适配器关联的上下文块的句柄。

pBeginExclusiveAccess

[in]指向包含 DxgkDdiBeginExclusiveAccess 输入参数的 DXGKARG_BEGINEXCLUSIVEACCESS 结构的指针。

返回值

如果操作成功,DxgkDdiBeginExclusiveAccess 应返回STATUS_SUCCESS。 否则,它应返回相应的 NTSTATUS 错误代码。

注解

IOMMU 域附加和分离速度极快,但目前不是原子的。 这意味着,在交换到具有不同映射的域时,不保证通过 PCIe 发出的事务能够正确转换。

为了处理这种情况, Dxgkrnl 调用以下 KMD DDI 对:

  • DxgkDdiBeginExclusiveAccess 通知 KMD 即将发生 IOMMU 域切换。
  • IOMMU 域切换完成后的 DxgkDdiEndExclusiveAccess

每当设备切换到新的 IOMMU 域时,驱动程序必须确保其硬件是无提示的。 也就是说,驱动程序必须确保在两次调用之间不会从设备读取或写入系统内存。

在这两次调用之间, Dxgkrnl 保证以下内容:

  • 计划程序将暂停。 将刷新所有活动工作负载,并且不会向硬件发送或计划任何新工作负载。
  • 不会进行其他 DDI 调用。

作为这些调用的一部分,驱动程序可以选择禁用和禁止中断, (包括独占访问期间) 的 vsync 中断,即使没有来自 OS 的显式通知。

要求

要求
最低受支持的客户端 Windows 10,版本 1803 (WDDM 2.4)
标头 d3dkmddi.h
IRQL PASSIVE_LEVEL

另请参阅

DRIVER_INITIALIZATION_DATA

DXGKARG_BEGINEXCLUSIVEACCESS

DxgkDdiEndExclusiveAccess