функция обратного вызова 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. Изначально этот дескриптор был передан в член MiracastHandle структуры DXGK_MIRACAST_DISPLAY_CALLBACKS при вызове функции DxgkDdiMiracastCreateContext .
[in] InputBufferSize
Размер входного буфера в байтах, на который указывает pInputBuffer.
[in] pInputBuffer
Указатель на входной буфер. InputBufferSize указывает размер буфера.
Дополнительные сведения о входных буферах см. в разделе Примечания.
[in] OutputBufferSize
Размер выходного буфера в байтах, на который указывает pOutputBuffer.
[out] pOutputBuffer
Указатель на выходной буфер. OutBufferSize указывает размер буфера.
Дополнительные сведения о выходном буфере см. в разделе Примечания.
[in, optional] pCallback
Необязательный указатель, предоставляемый драйвером мини-порта дисплея, на функцию обратного вызова DxgkCbMiracastSendMessageCallback .
Если драйвер мини-порта дисплея предоставляет указатель на DxgkCbMiracastSendMessageCallback, то после обработки сообщения драйвером пользовательского режима операционная система асинхронно отправляет сообщение драйверу пользовательского режима, вызывая DxgkCbMiracastSendMessageCallback.
Дополнительные сведения о вызовах DxgkCbMiracastSendMesssageCallback см. в разделах Возвращаемое значение и примечания.
[in, optional] pCallbackContext
Необязательный указатель на предоставленный драйвером контекст обратного вызова. После завершения операции операционная система передает этот контекст в предоставленную драйвером процедуру обратного вызова.
Возвращаемое значение
Возвращает STATUS_PENDING , если сообщение успешно доставлено. В противном случае возвращается один из кодов ошибок, определенных в ntstatus.h.
Если драйверу мини-порта дисплея необходимо знать состояние обработки сообщений в пользовательском режиме, он должен предоставить функцию DxgkCbMiracastSendMessageCallback в параметре pCallback и проверка состояние возврата в параметре pIoStatusBlock этой функции.
Комментарии
Если драйвер мини-порта дисплея предоставляет буферы pInputBuffer и pOutputBuffer , драйвер отвечает за хранение этих двух буферов до вызова функции DxgkCbMiracastSendMessageCallback . В противном случае может быть создана проблема с случайным повреждением памяти.
Если драйвер предоставляет DxgkCbMiracastSendMessageCallback в параметре pCallback , возможно, 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