Partager via


DXGKCB_MIRACAST_SEND_MESSAGE fonction de rappel (dispmprt.h)

Envoie un message asynchrone au pilote d’affichage en mode utilisateur.

Syntaxe

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

Paramètres

[in] MiracastHandle

Handle fourni par le pilote sur l’appareil d’affichage Miracast. Ce handle a été passé à l’origine dans le membre MiracastHandle de la structure DXGK_MIRACAST_DISPLAY_CALLBACKS dans un appel à la fonction DxgkDdiMiracastCreateContext.

[in] InputBufferSize

Taille, en octets, de la mémoire tampon d’entrée pointée par pInputBuffer.

[in] pInputBuffer

Pointeur vers la mémoire tampon d’entrée. InputBufferSize spécifie la taille de la mémoire tampon.

Pour plus d’informations sur la mémoire tampon d’entrée, consultez les remarques.

[in] OutputBufferSize

Taille, en octets, de la mémoire tampon de sortie pointée par pOutputBuffer.

[out] pOutputBuffer

Pointeur vers la mémoire tampon de sortie. OutBufferSize spécifie la taille de la mémoire tampon.

Pour plus d’informations sur la mémoire tampon de sortie, consultez Les remarques.

[in, optional] pCallback

Pointeur facultatif, fourni par le pilote de miniport d’affichage, vers la fonction de rappel DxgkCbMiracastSendMessageCallback.

Si le pilote miniport d’affichage fournit le pointeur vers DxgkCbMiracastSendMessageCallback, puis après que le pilote en mode utilisateur gère le message, le système d’exploitation envoie un message au pilote en mode utilisateur de manière asynchrone en appelant DxgkCbMiracastSendMessageCallback.

Pour plus d’informations sur les appels à DxgkCbMiracastSendMessageCallback, consultez les sections Retour et Remarques.

[in, optional] pCallbackContext

Pointeur facultatif fourni par le pilote vers le contexte de rappel fourni par le pilote. Le système d’exploitation transmet ce contexte à la routine de rappel fournie par le pilote une fois l’opération terminée.

Valeur de retour

Retourne STATUS_PENDING s’il remet correctement le message. Sinon, elle retourne l’un des codes d’erreur définis dans Ntstatus.h.

Si le pilote display miniport doit connaître l’état de la gestion des messages en mode utilisateur, il doit fournir la fonction DxgkCbMiracastSendMessageCallback dans le paramètre pCallback et vérifier l’état de retour dans le paramètre pIoStatusBlock paramètre.

Remarques

Si le pilote miniport d’affichage fournit le pInputBuffer et mémoires tampons pOutputBuffer, il incombe au pilote de conserver ces deux mémoires tampons jusqu’à ce que la fonction DxgkCbMiracastSendMessageCallback soit appelée. Sinon, un problème de corruption de mémoire aléatoire peut être créé.

Si le pilote fournit le DxgkCbMiracastSendMessageCallback dans le paramètre pCallback, il est possible que DxgkCbMiracastSendMessageCallback retourne avant DxgkCbMiracastSendMessage.

Exemple de séquence d’appel

Voici un exemple de code qui montre comment utiliser cette fonction :
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);

Exigences

Exigence Valeur
client minimum pris en charge Windows 8.1
serveur minimum pris en charge Windows Server 2012 R2
plateforme cible Bureau
d’en-tête dispmprt.h (include Dispmprt.h)
IRQL PASSIVE_LEVEL

Voir aussi

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext