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