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 函式,並將 DataType 參數設定為 DXGK_WHICHSPACE_BRIDGE 之前,請先將 Attributes 參數設定為此值。
[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 Express (PCIe 的所有 PCI 組態空間存取) 根埠。
驅動程式不應該等候 DxgkProtectedCallback 回 呼例程傳回,來封鎖呼叫線程的繼續執行。 例如,驅動程式可以排程異步背景工作線程來處理回呼例程。
當使用者模式顯示驅動程式在呼叫 pfnLockCb 函式中,於 D3DDDICB_LOCKFLAGS 結構的 Flags 成員中設定 UseAlternateVA 位欄位旗標時,就會發生此應用程式要求的封鎖例外狀況。 DxgkCbExcludeAdapterAccess 不會封鎖這種類型的配置鎖定,而且 CPU 可以在受保護的回呼例程執行時存取顯示適配卡。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista |
目標平台 | 桌面 |
標頭 | dispmprt.h (包括 Dispmprt.h) |
IRQL | PASSIVE_LEVEL |