DXGKCB_EXCLUDE_ADAPTER_ACCESS回调函数 (dispmprt.h)
DxgkCbExcludeAdapterAccess 函数阻止对显示适配器的所有访问,并在处于此受保护状态时调用提供的 DxgkProtectedCallback 回调例程。
语法
DXGKCB_EXCLUDE_ADAPTER_ACCESS DxgkcbExcludeAdapterAccess;
NTSTATUS DxgkcbExcludeAdapterAccess(
[in] HANDLE DeviceHandle,
[in] ULONG Attributes,
[in] DXGKDDI_PROTECTED_CALLBACK DxgkProtectedCallback,
[in] PVOID ProtectedCallbackContext
)
{...}
参数
[in] DeviceHandle
表示显示适配器的句柄。 显示微型端口驱动程序在传递给 DxgkDdiStartDevice 的 DXGKRNL_INTERFACE 结构的 DeviceHandle 成员中获取此句柄。
[in] Attributes
一个 指定视频内存操作的 值。 此参数可以是以下位标志值的任意组合,但DXGK_EXCLUDE_EVICT_ALL和DXGK_EXCLUDE_CALL_SYNCHRONOUS互斥。 这些值在 Dispmprt.h 中定义。
DXGK_EXCLUDE_EVICT_ALL
适配器中的所有视频内存都复制到系统内存;这是一项代价高昂的操作。 如果未将 Attributes 参数设置为此值,则会暂停对系统内存中锁定图面的访问。
DXGK_EXCLUDE_CALL_SYNCHRONOUS
在调用方所在的同一线程上下文中执行受保护的 DxgkProtectedCallback 驱动程序回调例程。 调用方必须从 第二级 或 第三级 同步 DDI 调用调用。 否则, DxgkCbExcludeAdapterAccess 函数将失败。
DXGK_EXCLUDE_BRIDGE_ACCESS
当驱动程序需要访问根端口配置空间时,保护对 PCI Express (PCIe) 根端口的访问。 在调用 DxgkCbReadDeviceSpace 或 DxgkCbWriteDeviceSpace 函数之前,将 Attributes 参数设置为此值,并将 DataType 参数设置为DXGK_WHICHSPACE_BRIDGE。
[in] DxgkProtectedCallback
停止对适配器的所有访问时要回调的回调例程。
[in] ProtectedCallbackContext
指向要传递给 DxgkProtectedCallback 回调例程的 ProtectedCallbackContext 参数的值的指针。
返回值
如果成功,DxgkCbExcludeAdapterAccess 将返回STATUS_SUCCESS。 否则,它将返回 Ntstatus.h 中定义的错误代码之一。
注解
应用程序请求将被阻止,直到此函数返回为止。 处于此保护状态时,在 IRQL = PASSIVE_LEVEL 调用提供的 DxgkProtectedCallback 回调例程。
DxgkCbExcludeAdapterAccess 获取独占适配器访问权限,以防止对显示适配器和所有链接执行与图形相关的 I/O 操作。 这会在调用的整个持续时间内有效地将 GPU 空闲。
如果在 Attributes 参数中指定了DXGK_EXCLUDE_BRIDGE_ACCESS,此函数还会阻止所有 PCI 配置空间访问 PCI Express (PCIe) 根端口。
驱动程序不应通过等待 DxgkProtectedCallback 回调例程返回来阻止调用线程的继续执行。 例如,驱动程序可以计划异步工作线程来处理回调例程。
当用户模式显示驱动程序在调用 pfnLockCb 函数时,在 D3DDDICB_LOCKFLAGS 结构的 Flags 成员中设置了 UseAlternateVA 位字段标志时,应用程序请求的此阻止将发生异常。 DxgkCbExcludeAdapterAccess 不会阻止这种类型的分配锁,并且 CPU 可以在执行受保护的回调例程时访问显示适配器。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
目标平台 | 桌面 |
标头 | dispmprt.h (包括 Dispmprt.h) |
IRQL | PASSIVE_LEVEL |