DXGKCB_MIRACAST_SEND_MESSAGE funzione di callback (dispmprt.h)

Invia un messaggio asincrono al driver di visualizzazione in modalità utente.

Sintassi

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

Parametri

[in] MiracastHandle

Handle fornito dal driver al dispositivo di visualizzazione Miracast. Questo handle è stato originariamente passato nel membro MiracastHandle della struttura DXGK_MIRACAST_DISPLAY_CALLBACKS in una chiamata alla funzione DxgkDdiMiracastCreateContext .

[in] InputBufferSize

Dimensioni, in byte, del buffer di input a cui fa riferimento pInputBuffer.

[in] pInputBuffer

Puntatore al buffer di input. InputBufferSize specifica le dimensioni del buffer.

Per altre informazioni sul buffer di input, vedere Osservazioni.

[in] OutputBufferSize

Dimensioni, in byte, del buffer di output a cui fa riferimento pOutputBuffer.

[out] pOutputBuffer

Puntatore al buffer di output. OutBufferSize specifica le dimensioni del buffer.

Per altre informazioni sul buffer di output, vedere Osservazioni.

[in, optional] pCallback

Puntatore facoltativo, fornito dal driver miniport visualizzato, alla funzione di callback DxgkCbMiracastSendMessageCallback .

Se il driver miniport visualizzato fornisce il puntatore a DxgkCbMiracastSendMessageCallback, dopo che il driver in modalità utente gestisce il messaggio, il sistema operativo invia un messaggio al driver in modalità utente in modo asincrono chiamando DxgkCbMiracastSendMessageCallback.

Per altre informazioni sulle chiamate a DxgkCbMiracastSendMessageCallback, vedere Le sezioni Restituito valore e osservazioni.

[in, optional] pCallbackContext

Puntatore facoltativo fornito dal driver al contesto di callback fornito dal driver. Il sistema operativo passa questo contesto alla routine di callback fornita dal driver dopo il completamento dell'operazione.

Valore restituito

Restituisce STATUS_PENDING se recapita correttamente il messaggio. In caso contrario, restituisce uno dei codici di errore definiti in Ntstatus.h.

Se il driver miniport visualizzato deve conoscere lo stato della gestione dei messaggi in modalità utente, deve fornire la funzione DxgkCbMiracastSendMessageCallback nel parametro pCallback e controllare lo stato restituito nel parametro pIoStatusBlock di tale funzione.

Commenti

Se il driver miniport visualizzato fornisce i buffer pInputBuffer e pOutputBuffer , è responsabilità del driver conservare questi due buffer finché non viene chiamata la funzione DxgkCbMiracastSendMessageCallback . In caso contrario, è possibile creare un problema di danneggiamento della memoria casuale.

Se il driver fornisce dxgkCbMiracastSendMessageCallback nel parametro pCallback , è possibile che DxgkCbMiracastSendMessageCallback venga restituito prima che DxgkCbMiracastSendMessage restituisca.

Sequenza di chiamate di esempio

Ecco il codice di esempio che illustra come usare questa funzione:
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);

Requisiti

Requisito Valore
Client minimo supportato Windows 8.1
Server minimo supportato Windows Server 2012 R2
Piattaforma di destinazione Desktop
Intestazione dispmprt.h (include Dispmprt.h)
IRQL PASSIVE_LEVEL

Vedi anche

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext