EVT_MBB_DEVICE_RECEIVE_MBIM_FRAGMENT fonction de rappel (mbbcx.h)

La fonction de rappel de l’événement EvtMbbDeviceReceiveMbimFragment d’un 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 pour un objet d’appareil framework que le pilote client a obtenu à partir d’un appel précédent à WdfDeviceCreate.

ReceiveRequest

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

Valeur de retour

None

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 qu’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 solaire.

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, il doit fractionner ce message de réponse en plusieurs messages fragmentés, comme décrit dans la spécification MBIM. En cas de fragmentation, MBBCx continue d’appeler cette fonction de rappel, une fois par fragment, jusqu’à ce que tous les fragments du message MBIM de réponse soient reçus.

Pour accéder à l’espace tampon 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 effectivement renseigné. Cela peut être effectué de manière asychrone ou sychronously.

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

Exemple

La gestion des erreurs a été laissée en dehors de cet exemple pour des raisons de concision et de 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 sycnchronously.
    //
    memset(buffer, '*', bufferSize);
    filledSize = bufferSize;

    MbbRequestCompleteWithInformation(ReceiveRequest,
        STATUS_SUCCESS,
        filledSize);
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 1809
Plateforme cible Universal
Version KMDF minimale 1,27 %
En-tête mbbcx.h
IRQL PASSIVE_LEVEL