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 |