Partager via


EVT_MBB_DEVICE_RECEIVE_MBIM_FRAGMENT fonction de rappel (mbbcx.h)

La fonction de rappel d’événement EvtMbbDeviceReceiveMbimFragment pilote client fournit le message de réponse retourné par son appareil en réponse à un message de contrôle MBIM précédent envoyé à partir de MBBCx. Cette fonction de rappel est l’équivalent de la requête GetEncapsulatedResponse définie dans la spécification MBIM.

Syntaxe

EVT_MBB_DEVICE_RECEIVE_MBIM_FRAGMENT EvtMbbDeviceReceiveMbimFragment;

void EvtMbbDeviceReceiveMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST ReceiveRequest
)
{...}

Paramètres

Device

Handle vers un objet d’appareil framework que le pilote client obtenu à partir d’un appel précédent à WdfDeviceCreate.

ReceiveRequest

Handle vers l’objet framework qui représente la demande de réception d’un message MBIM fragmenté de l’appareil.

Valeur de retour

Aucun

Remarques

Un pilote client MBBCx doit inscrire une fonction de rappel EvtMbbDeviceReceiveMbimFragment en appelant MbbDeviceInitialize.

L’infrastructure MBBCx appelle cette fonction de rappel après avoir été avertie par le pilote client que un message MBIM est disponible à partir de l’appareil, soit en réponse à une demande de message de contrôle MBIM précédente de l’infrastructure, soit en tant qu’événement d’appareil non sollicité.

Dans cette fonction de rappel, le pilote client place le message MBIM de réponse dans l’espace tampon pré-alloué par l’infrastructure MBBCx. Si la taille d’un message de réponse unique est supérieure à la taille de la mémoire tampon pré-allouée, elle doit fractionner ce message de réponse en plusieurs messages fragmentés, comme décrit dans la spécification MBIM. Lorsque la fragmentation se produit, MBBCx continue à appeler cette fonction de rappel, une fois par fragment, jusqu’à ce que tous les fragments du message MBIM de réponse ait été reçu.

Pour accéder à l’espace tampon pré-alloué et à sa taille, le pilote client doit appeler MbbRequestGetBuffer. Une fois que le pilote client remplit cet espace tampon avec le message de réponse ou un fragment du message de réponse, il doit appeler MbbRequestCompleteWithInformation avec le nombre d’octets en cours de remplissage. Cette opération peut être effectuée de manière asynchrone ou synchrone.

Pour plus d’informations, consultez Gestion des messages de contrôle MBIM.

Exemple

La gestion des erreurs a été laissée hors de cet exemple pour la concision et la clarté.

VOID
EvtMbbDeviceReceiveMbimFragment(
    WDFDEVICE  Device,
    MBBREQUEST ReceiveRequest
)
{
    size_t filledSize = 0;
    size_t bufferSize = 0;
    PVOID buffer = MbbRequestGetBuffer(ReceiveRequest, &bufferSize);

    // 
    // Write the response MBIM message into the buffer.
    // This example uses memset as an illustration of how
    // it can being completed synchronously.
    //
    memset(buffer, '*', bufferSize);
    filledSize = bufferSize;

    MbbRequestCompleteWithInformation(ReceiveRequest,
        STATUS_SUCCESS,
        filledSize);
}

Exigences

Exigence Valeur
client minimum pris en charge Windows 10, version 1809
plateforme cible Universel
version minimale de KMDF 1.27
d’en-tête mbbcx.h
IRQL PASSIVE_LEVEL