Compartilhar via


DXGKCB_MIRACAST_SEND_MESSAGE função de retorno de chamada (dispmprt.h)

Envia uma mensagem assíncrona para o driver de exibição do modo de usuário.

Sintaxe

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

Um identificador fornecido pelo driver para o dispositivo de exibição Miracast. Esse identificador foi originalmente passado no membro MiracastHandle da estrutura DXGK_MIRACAST_DISPLAY_CALLBACKS em uma chamada para a função DxgkDdiMiracastCreateContext .

[in] InputBufferSize

O tamanho, em bytes, do buffer de entrada apontado por pInputBuffer.

[in] pInputBuffer

Um ponteiro para o buffer de entrada. InputBufferSize especifica o tamanho do buffer.

Consulte Comentários para obter mais informações sobre o buffer de entrada.

[in] OutputBufferSize

O tamanho, em bytes, do buffer de saída apontado por pOutputBuffer.

[out] pOutputBuffer

Um ponteiro para o buffer de saída. OutBufferSize especifica o tamanho do buffer.

Consulte Comentários para obter mais informações sobre o buffer de saída.

[in, optional] pCallback

Um ponteiro opcional, fornecido pelo driver de miniporto de exibição, para a função de retorno de chamada DxgkCbMiracastSendMessageCallback .

Se o driver de miniporto de exibição fornecer o ponteiro para DxgkCbMiracastSendMessageCallback, depois que o driver do modo de usuário manipular a mensagem, o sistema operacional enviará uma mensagem para o driver do modo de usuário de forma assíncrona chamando DxgkCbMiracastSendMessageCallback.

Confira As seções Valor retornado e Comentários para obter mais informações sobre chamadas para DxgkCbMiracastSendMessageCallback.

[in, optional] pCallbackContext

Um ponteiro opcional fornecido pelo driver para o contexto de retorno de chamada fornecido pelo driver. O sistema operacional passa esse contexto para a rotina de retorno de chamada fornecida pelo driver após a conclusão da operação.

Retornar valor

Retorna STATUS_PENDING se ele entregar com êxito a mensagem. Caso contrário, ele retornará um dos códigos de erro definidos em Ntstatus.h.

Se o driver de miniporto de exibição precisar saber o status do tratamento de mensagens no modo de usuário, ele deverá fornecer a função DxgkCbMiracastSendMessageCallback no parâmetro pCallback e marcar o retorno status no parâmetro pIoStatusBlock dessa função.

Comentários

Se o driver de miniporto de exibição fornecer os buffers pInputBuffer e pOutputBuffer , é responsabilidade do driver manter esses dois buffers até que a função DxgkCbMiracastSendMessageCallback seja chamada. Caso contrário, um problema aleatório de corrupção de memória pode ser criado.

Se o driver fornecer o DxgkCbMiracastSendMessageCallback no parâmetro pCallback , é possível que DxgkCbMiracastSendMessageCallback retorne antes que DxgkCbMiracastSendMessage retorne.

Exemplo de sequência de chamadas

Aqui está o código de exemplo que mostra como usar essa função:
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 com suporte Windows 8.1
Servidor mínimo com suporte Windows Server 2012 R2
Plataforma de Destino Área de Trabalho
Cabeçalho dispmprt.h (inclua Dispmprt.h)
IRQL PASSIVE_LEVEL

Confira também

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext