共用方式為


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