次の方法で共有


DXGKDDI_BEGINEXCLUSIVEACCESS コールバック関数 (d3dkmddi.h)

Dxgkrnl 、DxgkDdiBeginExclusiveAccess 呼び出して、IOMMU ドメイン スイッチが発生しようとしていることをカーネル モード ドライバーに通知します。

構文

DXGKDDI_BEGINEXCLUSIVEACCESS DxgkddiBeginexclusiveaccess;

NTSTATUS DxgkddiBeginexclusiveaccess(
  IN_CONST_HANDLE hAdapter,
  IN_PDXGKARG_BEGINEXCLUSIVEACCESS pBeginExclusiveAccess
)
{...}

パラメーター

hAdapter

[in]ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。

pBeginExclusiveAccess

[in]DxgkDdiBeginExclusiveAccess の入力引数含む DXGKARG_BEGINEXCLUSIVEACCESS 構造体へのポインター。

戻り値

操作 成功した場合、DxgkDdiBeginExclusiveAccess はSTATUS_SUCCESSを返す必要があります。 それ以外の場合は、適切な NTSTATUS エラー コードが返されます。

備考

IOMMU ドメインのアタッチとデタッチは非常に高速ですが、現時点ではアトミックではありません。 つまり、異なるマッピングを持つドメインにスワップする際に、PCIe 経由で発行されたトランザクションが正しく変換されるとは限りません。

この状況に対処するために、Dxgkrnl 次の KMD DDI ペアを呼び出します。

  • DxgkDdiBeginExclusiveAccess して、IOMMU ドメイン スイッチが発生しようとしていることを KMD に通知します。
  • IOMMU ドメイン スイッチの完了後に DxgkDdiEndExclusiveAccessします。

ドライバーは、デバイスが新しい IOMMU ドメインに切り替えるたびに、そのハードウェアがサイレントであることを確認する必要があります。 つまり、ドライバーは、これら 2 つの呼び出しの間にデバイスからシステム メモリの読み取りまたは書き込みが行われないことを確認する必要があります。

これら 2 つの呼び出しの間 Dxgkrnl では、次の点が保証されます。

  • スケジューラは中断されます。 すべてのアクティブなワークロードがフラッシュされ、新しいワークロードはハードウェアに送信されたり、ハードウェアでスケジュールされたりしません。
  • 他の DDI 呼び出しは行われません。

これらの呼び出しの一環として、ドライバーは、OS からの明示的な通知がなくても、排他的アクセスの期間中に割り込み (vsync 割り込みを含む) を無効にして抑制することを選択できます。

必要条件

要件 価値
サポートされる最小クライアント Windows 10 バージョン 1803 (WDDM 2.4)
ヘッダー d3dkmddi.h
IRQL PASSIVE_LEVEL

関連項目

DRIVER_INITIALIZATION_DATA

DXGKARG_BEGINEXCLUSIVEACCESS

DxgkDdiEndExclusiveAccessする