Поделиться через


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

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext