DXGKDDI_MIRACAST_HANDLE_IO_CONTROL コールバック関数 (dispmprt.h)

MiracastIoControl 関数に対するユーザー モードディスプレイ ドライバーの呼び出しに応答して、ディスプレイ ミニポート ドライバーが同期 I/O 制御要求を処理するように要求するために、オペレーティング システムによって呼び出されます。

構文

DXGKDDI_MIRACAST_HANDLE_IO_CONTROL DxgkddiMiracastHandleIoControl;

NTSTATUS DxgkddiMiracastHandleIoControl(
  [in]  PVOID DriverContext,
  [in]  PVOID MiracastContext,
  [in]  ULONG InputBufferSize,
  [in]  VOID *pInputBuffer,
  [in]  ULONG OutputBufferSize,
  [out] VOID *pOutputBuffer,
  [out] ULONG *BytesReturned
)
{...}

パラメーター

[in] DriverContext

ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 ディスプレイ ミニポート ドライバーの DxgkDdiAddDevice 関数は、以前に DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。

[in] MiracastContext

オペレーティング システムによって提供される Miracast デバイス コンテキスト。 このコンテキストは、 DxgkDdiMiracastCreateContext 関数の呼び出しでディスプレイ ミニポート ドライバーによって提供されました。

[in] InputBufferSize

pInputBuffer が指す入力バッファーのサイズ (バイト単位) としてオペレーティング システムによって提供されます。 この値は、ユーザー モード の MiracastIoControl 関数の InputBufferSize パラメーターとして生成されます。

[in] pInputBuffer

入力バッファーへのポインターとしてオペレーティング システムによって提供されます。 この値は、ユーザー モード の MiracastIoControl 関数の InputBufferSize パラメーターとして生成されます。

InputBufferSize は、バッファーのサイズを指定します。

[in] OutputBufferSize

オペレーティング システムによって、 pOutputBuffer によって指される出力バッファーのサイズ (バイト単位) として提供されます。

この値は、ユーザー モード の MiracastIoControl 関数の OutputBufferSize パラメーターとして生成されます。

[out] pOutputBuffer

出力バッファーへのポインターとしてオペレーティング システムによって提供されます。 この値は、ユーザー モード の MiracastIoControl 関数の pOutputBuffer パラメーターとして生成されます。

OutBufferSize は、バッファーのサイズを指定します。

[out] BytesReturned

pOutputBuffer が指すバッファーでディスプレイ ミニポート ドライバーが返したバイト数である ULONG 型の値を保持するバッファーへのポインターとしてオペレーティング システムによって提供されます。

戻り値

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

注釈

オペレーティング システムは、 DxgkDdiMiracastIoControl の呼び出しが、ユーザー モード の MiracastIoControl 要求が呼び出されるのと同じプロセス空間で行われることを保証します。

オペレーティング システムは 、MiracastIoControl の各パラメーターから入力バッファー サイズと出力バッファー サイズの値をコピーするだけですが、ディスプレイ ミニポート ドライバーはバッファーを使用する前にバッファー サイズを確認します。 また、ドライバーは、 ProbeForRead 関数または ProbeForWrite 関数を使用して、呼び出しブロックを除く try/except 内でプローブ操作を実行して、入力バッファーが指すユーザー モード メモリを確認する必要があります。

この I/O 制御操作は、ユーザー モード の MiracastIoControl 関数の呼び出しで同期的に処理されます。

同期

オペレーティング システムは 、DxgkDdiMiracastCreateContextDxgkDdiMiracastDestroyContextおよび DxgkDdiMiracastIoControl 関数を Miracast クラスとしてグループ化します。

この関数のスレッドと同期レベルは、MiracastIoControl 関数の呼び出しでユーザー モード ドライバーが HardwareAccess パラメーターを設定する方法によって設定されます。

  • HardwareAccessFALSE の場合、オペレーティング システムは DxgkDdiMiracastIoControl がスレッド処理と同期の第 2 レベルで定義されている第 2 レベルの同期モードに従っていることを保証します。 DxgkDdiMiracastIoControl は、レベル 2 関数の他のレベル 0、1、または Miracast 以外のクラスが別のスレッド コンテキストで呼び出されている場合に呼び出すことができます。 ただし、一度に呼び出すことができるレベル 2 の Miracast クラス関数は 1 つだけです。
  • HardwareAccessTRUE の場合、DxgkDdiMiracastIoControl は、スレッド処理と同期の第 3 レベルで定義されている第 3 レベルの同期モードに従います。 GPU のフラッシュにより、処理オーバーヘッドが大幅に増加することに注意してください。

要件

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

こちらもご覧ください

DxgkDdiAddDevice

DxgkDdiMiracastCreateContext

MiracastIoControl

ProbeForRead

ProbeForWrite