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 函式為止。 否則,可以建立隨機記憶體損毀問題。
如果驅動程式在 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 |
目標平台 | 桌面 |
標頭 | dispmprt.h (包含 Dispmprt.h) |
IRQL | PASSIVE_LEVEL |
另請參閱
DXGK_MIRACAST_DISPLAY_CALLBACKS