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