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 を指定した場合、DxgkCbMiracastSendMessageCallback が DxgkCbMiracastSendMessage が返される前にが返される可能性があります。
呼び出しシーケンスの例
この関数の使用方法を示すコード例を次に示します。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