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 |