次の方法で共有


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

ユーザー モード ディスプレイ ドライバーに非同期メッセージを送信します。

構文

DXGKCB_MIRACAST_SEND_MESSAGE DxgkcbMiracastSendMessage;

NTSTATUS DxgkcbMiracastSendMessage(
  [in]           HANDLE MiracastHandle,
  [in]           ULONG InputBufferSize,
  [in]           VOID *pInputBuffer,
  [in]           ULONG OutputBufferSize,
  [out]          VOID *pOutputBuffer,
  [in, optional] DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK pCallback,
  [in, optional] PVOID pCallbackContext
)
{...}

パラメーター

[in] MiracastHandle

Miracast ディスプレイ デバイスへのドライバー提供のハンドル。 このハンドルは、DxgkDdiMiracastCreateContext 関数の呼び出しで、DXGK_MIRACAST_DISPLAY_CALLBACKS構造体の MiracastHandle メンバーで最初に渡されました。

[in] InputBufferSize

pInputBuffer が指す入力バッファーのサイズ (バイト単位)。

[in] pInputBuffer

入力バッファーへのポインター。 InputBufferSize は、バッファーのサイズを指定します。

入力バッファーの詳細については、「解説」を参照してください。

[in] OutputBufferSize

pOutputBuffer が指す出力バッファーのサイズ (バイト単位)。

[out] pOutputBuffer

出力バッファーへのポインター。 OutBufferSize は、バッファーのサイズを指定します。

出力バッファーの詳細については、「解説」を参照してください。

[in, optional] pCallback

ディスプレイ ミニポート ドライバーによって提供される、 DxgkCbMiracastSendMessageCallback コールバック関数への省略可能なポインター。

ディスプレイ ミニポート ドライバーが DxgkCbMiracastSendMessageCallback へのポインターを提供する場合、ユーザー モード ドライバーがメッセージを処理した後、オペレーティング システムは DxgkCbMiracastSendMessageCallback を呼び出すことによって、ユーザー モード ドライバーに非同期的にメッセージを送信します。

DxgkCbMiracastSendMessageCallback の呼び出しの詳細については、「戻り値と解説」セクションを参照してください。

[in, optional] pCallbackContext

ドライバー提供のコールバック コンテキストへのオプションのドライバー提供ポインター。 オペレーティング システムは、操作が完了した後、ドライバーから提供されたコールバック ルーチンにこのコンテキストを渡します。

戻り値

メッセージが正常に配信された場合は 、STATUS_PENDING を返します。 それ以外の場合は、Ntstatus.h で定義されているエラー コードのいずれかを返します。

ディスプレイ ミニポート ドライバーは、ユーザー モードでメッセージ処理の状態を把握する必要がある場合は、pCallback パラメーターで DxgkCbMiracastSendMessageCallback 関数を指定し、その関数の pIoStatusBlock パラメーターで戻り状態をチェックする必要があります。

注釈

ディスプレイ ミニポート ドライバーが pInputBuffer バッファーと pOutputBuffer バッファーを提供する場合、 DxgkCbMiracastSendMessageCallback 関数が呼び出されるまで、これら 2 つのバッファーを保持するのはドライバーの責任です。 それ以外の場合は、ランダムなメモリ破損の問題を作成できます。

ドライバーが pCallback パラメーターに DxgkCbMiracastSendMessageCallback を指定した場合、DxgkCbMiracastSendMessageCallbackDxgkCbMiracastSendMessage が返される前にが返される可能性があります。

呼び出しシーケンスの例

この関数の使用方法を示すコード例を次に示します。
typedef struct _CALLBACK_CONTEXT
{
    UCHAR InputBuffer[INPUT_BUFFER_SIZE];
    UCHAR OutputBuffer[OUTPUT_BUFFER_SIZE];
} CALLBACK_CONTEXT, *PCALLBACK_CONTEXT;

...

_IRQL_requires_(PASSIVE_LEVEL)
VOID
DriverCallbackFunction(
    _In_ PVOID Context,
    _In_ PIO_STATUS_BLOCK pIoStatusBlock
    )
{
    PCALLBACK_CONTEXT CallbackContex = (PCALLBACK_CONTEXT)Context;

    ExFreePool(CallbackContex);
}

...

    CallbackContex = (PCALLBACK_CONTEXT)ExAllocatePoolWithTag(
                            PagedPool,
                            sizeof(CALLBACK_CONTEXT),
                            DRIVER_TAG);

    if (CallbackContex == NULL)
    {
        return STATUS_NO_MEMORY;
    }

    RtlZeroMemory(CallbackContex, sizeof(CALLBACK_CONTEXT));

    CallbackContex->InputBuffer[0] = 0xaa;
    CallbackContex->InputBuffer[1] = 0x55;

    Status = 
      pDeviceContext->MiracastCallbacks.DxgkCbMiracastSendMessage(
          pDeviceContext->MiracastCallbacks.MiracastHandle,
          sizeof(CallbackContex->InputBuffer),
          CallbackContex->InputBuffer,
          sizeof(CallbackContex->OutputBuffer),
          CallbackContext->OutputBuffer,
          &DriverCallbackFunction,
          CallbackContex);

要件

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

こちらもご覧ください

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext