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 ドライバー コールバック ルーチンを実行します。 呼び出し元は、 第 2 レベル または 第 3 レベル の同期 DDI 呼び出しからを呼び出している必要があります。 それ以外の場合、 DxgkCbExcludeAdapterAccess 関数は失敗します。
DXGK_EXCLUDE_BRIDGE_ACCESS
ドライバーがルート ポート構成スペースにアクセスする必要がある場合に、PCI Express (PCIe) ルート ポートへのアクセスを保護します。 DataType パラメーターを DXGK_WHICHSPACE_BRIDGE に設定して DxgkCbReadDeviceSpace 関数または DxgkCbWriteDeviceSpace 関数を呼び出す前に、Attributes パラメーターをこの値に設定します。
[in] DxgkProtectedCallback
アダプターへのすべてのアクセスが停止したときにコールバック ルーチンが呼び出されます。
[in] ProtectedCallbackContext
DxgkProtectedCallback コールバック ルーチンの ProtectedCallbackContext パラメーターに渡す値へのポインター。
戻り値
DxgkCbExcludeAdapterAccess は、成功した場合STATUS_SUCCESSを返します。 それ以外の場合は、 Ntstatus.h で定義されているエラー コードのいずれかを返します。
注釈
アプリケーション要求は、この関数が返されるまでブロックされます。 この保護状態では、指定 された DxgkProtectedCallback コールバック ルーチンは IRQL = PASSIVE_LEVELで呼び出されます。
DxgkCbExcludeAdapterAccess は、ディスプレイ アダプターとすべてのリンクに対するグラフィックス関連の I/O 操作を防ぐために、排他的なアダプター アクセスを取得します。 これにより、呼び出しの間、GPU が実質的にアイドル状態になります。
また、 Attributes パラメーターでDXGK_EXCLUDE_BRIDGE_ACCESSが指定されている場合、この関数は PCI Express (PCIe) ルート ポートへのすべての PCI 構成領域アクセスを防止します。
ドライバーは、 DxgkProtectedCallback コールバック ルーチンが返されるのを待って、呼び出し元スレッドの継続的な実行をブロックしないでください。 たとえば、ドライバーは、コールバック ルーチンを処理する非同期ワーカー スレッドをスケジュールできます。
このアプリケーション要求のブロックの例外は、ユーザー モードのディスプレイ ドライバーが pfnLockCb 関数の呼び出しで、D3DDDICB_LOCKFLAGS構造体の Flags メンバーに UseAlternateVA ビット フィールド フラグを設定した場合に発生します。 DxgkCbExcludeAdapterAccess は、この種類の割り当てロックをブロックせず、保護されたコールバック ルーチンの実行中に CPU がディスプレイ アダプターにアクセスできます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
対象プラットフォーム | デスクトップ |
Header | dispmprt.h (Dispmprt.h を含む) |
IRQL | PASSIVE_LEVEL |