共用方式為


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 參數中的傳回狀態。

言論

如果顯示迷你埠驅動程式提供 pInputBufferpOutputBuffer 緩衝區,則驅動程式必須負責保存這兩個緩衝區,直到呼叫 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

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext