Compartir a través de


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

Identificador 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.

Consulte 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 DxgkCbMiracastSendMessageCall back.

Si el controlador de minipuerto de pantalla proporciona el puntero para 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 debe conocer el estado del control de mensajes en modo de usuario, debe proporcionar el DxgkCbMiracastSendMessageCallback función en el parámetro pCallback y comprobar el estado devuelto en el parámetro pIoStatusBlock de esa función.

Observaciones

Si el controlador de miniporte de pantalla proporciona el pInputBuffer y búferes de 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 el DxgkCbMiracastSendMessageCallback en el parámetro pCallback, es posible que DxgkCbMiracastSendMessageCallback devuelva antes de que DxgkCbMiracastSendMessage devuelva.

secuencia de llamadas de ejemplo de

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 Valor
cliente mínimo admitido Windows 8.1
servidor mínimo admitido Windows Server 2012 R2
de la plataforma de destino de Escritorio
encabezado de dispmprt.h (incluya Dispmprt.h)
irQL PASSIVE_LEVEL

Consulte también

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

dxgkDdiMiracastCreateContext