次の方法で共有


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

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

構文

DXGKDDI_BEGINEXCLUSIVEACCESS DxgkddiBeginexclusiveaccess;

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

パラメーター

hAdapter

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

pBeginExclusiveAccess

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

戻り値

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

注釈

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

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

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

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

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

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

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

要件

要件
サポートされている最小のクライアント Windows 10バージョン 1803 (WDDM 2.4)
Header d3dkmddi.h
IRQL PASSIVE_LEVEL

こちらもご覧ください

DRIVER_INITIALIZATION_DATA

DXGKARG_BEGINEXCLUSIVEACCESS

DxgkDdiEndExclusiveAccess