DXGKCB_MIRACAST_SEND_MESSAGE función de devolución de llamada (dispmprt.h)

Envía un mensaje asincrónico al controlador de pantalla en modo de usuario.

Sintaxis

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
)
{...}

Parámetros

[in] MiracastHandle

Un controlador proporcionado por el controlador al dispositivo de visualización miracast. Este identificador se pasó originalmente en el miembro MiracastHandle de la estructura DXGK_MIRACAST_DISPLAY_CALLBACKS en una llamada a la función DxgkDdiMiracastCreateContext .

[in] InputBufferSize

Tamaño, en bytes, del búfer de entrada al que apunta pInputBuffer.

[in] pInputBuffer

Puntero al búfer de entrada. InputBufferSize especifica el tamaño del búfer.

Vea Comentarios para obtener más información sobre el búfer de entrada.

[in] OutputBufferSize

Tamaño, en bytes, del búfer de salida al que apunta pOutputBuffer.

[out] pOutputBuffer

Puntero al búfer de salida. OutBufferSize especifica el tamaño del búfer.

Consulte Comentarios para obtener más información sobre el búfer de salida.

[in, optional] pCallback

Puntero opcional, proporcionado por el controlador de minipuerto de pantalla, a la función de devolución de llamada DxgkCbMiracastSendMessageCallback .

Si el controlador de minipuerto de pantalla proporciona el puntero a DxgkCbMiracastSendMessageCallback, después de que el controlador en modo de usuario controle el mensaje, el sistema operativo envía un mensaje al controlador en modo de usuario de forma asincrónica llamando a DxgkCbMiracastSendMessageCallback.

Consulte las secciones Valor devuelto y Comentarios para obtener más información sobre las llamadas a DxgkCbMiracastSendMessageCallback.

[in, optional] pCallbackContext

Puntero opcional proporcionado por el controlador al contexto de devolución de llamada proporcionado por el controlador. El sistema operativo pasa este contexto a la rutina de devolución de llamada proporcionada por el controlador una vez completada la operación.

Valor devuelto

Devuelve STATUS_PENDING si entrega correctamente el mensaje. De lo contrario, devuelve uno de los códigos de error definidos en Ntstatus.h.

Si el controlador de minipuerto de pantalla necesita conocer el estado del control de mensajes en modo de usuario, debe proporcionar la función DxgkCbMiracastSendMessageCallback en el parámetro pCallback y comprobar el estado devuelto en el parámetro pIoStatusBlock de esa función.

Comentarios

Si el controlador de minipuerto de pantalla proporciona los búferes pInputBuffer y pOutputBuffer , es responsabilidad del controlador contener estos dos búferes hasta que se llama a la función DxgkCbMiracastSendMessageCallback . De lo contrario, se puede crear un problema aleatorio de daños en la memoria.

Si el controlador proporciona dxgkCbMiracastSendMessageCallback en el parámetro pCallback , es posible que DxgkCbMiracastSendMessageCallback devuelva antes de que DxgkCbMiracastSendMessage devuelva.

Secuencia de llamadas de ejemplo

Este es el código de ejemplo que muestra cómo usar esta función:
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);

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8.1
Servidor mínimo compatible Windows Server 2012 R2
Plataforma de destino Escritorio
Encabezado dispmprt.h (incluir Dispmprt.h)
IRQL PASSIVE_LEVEL

Consulte también

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext