次の方法で共有


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 レベルの から呼び出すか、同期された DDI 呼び出し 第 3 レベル 必要があります。 それ以外の場合、dxgkCbExcludeAdapterAccess 関数 は失敗します。

DXGK_EXCLUDE_BRIDGE_ACCESS

ドライバーがルート ポート構成スペースにアクセスする必要がある場合に、PCI Express (PCIe) ルート ポートへのアクセスを保護します。 Attributes パラメーターをこの値に設定してから、DxgkCbReadDeviceSpace 呼び出すか、DataType パラメーターをDXGK_WHICHSPACE_BRIDGEに設定して DxgkCbWriteDeviceSpace 関数を します。

[in] DxgkProtectedCallback

アダプターへのすべてのアクセスが停止したときにコールバック ルーチンが呼び出されます。

[in] ProtectedCallbackContext

DxgkProtectedCallback コールバック ルーチンの ProtectedCallbackContext パラメーターに渡す値へのポインター。

戻り値

DxgkCbExcludeAdapterAccess 、成功した場合はSTATUS_SUCCESSを返します。 それ以外の場合は、Ntstatus.hで定義されているエラー コードのいずれかを返します。

備考

アプリケーション要求は、この関数が返されるまでブロックされます。 この保護状態では、指定された DxgkProtectedCallback コールバック ルーチンが IRQL = PASSIVE_LEVELで呼び出されます。

DxgkCbExcludeAdapterAccess は、ディスプレイ アダプターとすべてのリンクに対するグラフィックス関連の I/O 操作を防ぐために、排他的なアダプター アクセスを取得します。 これにより、呼び出しの間、GPU が実質的にアイドル状態になります。

この関数は、DXGK_EXCLUDE_BRIDGE_ACCESSが Attributes パラメーターで指定されている場合、PCI Express (PCIe) ルート ポートへのすべての PCI 構成領域アクセスも防止します。

ドライバーは、DxgkProtectedCallback コールバック ルーチンが返されるのを待って、呼び出し元のスレッドの継続的な実行をブロックしないでください。 たとえば、ドライバーは、コールバック ルーチンを処理する非同期ワーカー スレッドをスケジュールできます。

このアプリケーション要求のブロックの例外は、ユーザー モードのディスプレイ ドライバーが、pfnLockCb 関数の呼び出しで D3DDDICB_LOCKFLAGS 構造体の Flags メンバーで、UseAlternateVA ビット フィールド フラグを設定した場合に発生します。 DxgkCbExcludeAdapterAccess 、この種類の割り当てロックはブロックされず、CPU は保護されたコールバック ルーチンの実行中にディスプレイ アダプターにアクセスできます。

UseAlternateVA が pfnLockCb の呼び出しで設定されている場合、ディスプレイ ミニポート ドライバーは DxgkCbExcludeAdapterAccess 呼び出すべきではありません。
 

必要条件

要件 価値
サポートされる最小クライアント Windows Vista
ターゲット プラットフォーム デスクトップ
ヘッダー dispmprt.h (Dispmprt.h を含む)
IRQL PASSIVE_LEVEL

関連項目

DxgkProtectedCallback