次の方法で共有


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 がディスプレイ アダプターにアクセスできます。

メモUseAlternateVApfnLockCb の呼び出しで設定されている場合、ディスプレイ ミニポート ドライバーは DxgkCbExcludeAdapterAccess を呼び出さないでください。
 

要件

要件
サポートされている最小のクライアント Windows Vista
対象プラットフォーム デスクトップ
Header dispmprt.h (Dispmprt.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

DxgkProtectedCallback