функция обратного вызова 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.

Дополнительные сведения о вызовах DxgkCbMiracastSendMessageCallbackсм. в разделах "Возвращаемое значение" и "Примечания".

[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 (include Dispmprt.h)
IRQL PASSIVE_LEVEL

См. также

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext