Partager via


EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT fonction de rappel (mbbcx.h)

La fonction de rappel d’événement EvtMbbDeviceSendMbimFragment d’un pilote client indique à son appareil d’effectuer la tâche spécifiée par le message de contrôle MBIM. Cette fonction de rappel est l’équivalent de la requête SendEncapsulatedCommand définie dans la spécification MBIM.

Syntaxe

EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;

void EvtMbbDeviceSendMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST SendRequest
)
{...}

Paramètres

Device

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

SendRequest

Handle de l’objet framework qui représente la demande d’envoi d’un message MBIM fragmenté à l’appareil.

Valeur de retour

None

Remarques

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

L’infrastructure MBBCx appelle cette fonction de rappel lorsqu’elle souhaite émettre une commande au format d’un message de contrôle MBIM au pilote client. Si la taille du message de contrôle MBIM est supérieure à la taille de fragment maximale définie par le pilote client dans la structure MBB_DEVICE_MBIM_PARAMETERS , l’infrastructure MBBCx fractionne le message de contrôle MBIM en plusieurs messages fragmentés et appelle cette fonction de rappel une fois par message fragmenté.

Pour obtenir le fragment de message MBIM réel envoyé, le pilote client doit appeler MbbRequestGetBuffer pour obtenir la mémoire tampon où le fragment de message MBIM est stocké. Une fois que son appareil a accepté la demande de contrôle ou qu’une condition d’échec s’est produite, le pilote client doit en accuser réception auprès de MBBCx en appelant MbbRequestComplete de manière asynchrone ou synchrone.

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

Exemple

Le code de gestion des erreurs a été omis de cet exemple pour des raisons de concision et de clarté.

VOID
EvtMbbDeviceSendMbimFragment(
    WDFDEVICE  Device,
    MBBREQUEST SendRequest
)
{
    // The client driver-specified framework object context
    PMY_DEVICE_CONTEXT myContext = GetMyDeviceContext(Device);

    size_t bufferSize = 0;
    PVOID buffer = MbbRequestGetBuffer(SendRequest, &bufferSize);

    // This client driver example uses asynchronous completion
    auto myDeviceSendCompletionRoutine = [](MBBREQUEST SendRequest, NTSTATUS NtStatus)
    {
        //Acknowledge back to MBBCx
        MbbRequestComplete(SendRequest, NtStatus);
    };

    // The client driver-specified function call into its device
    NTSTATUS sendStatus = MyDeviceAsyncSend(

        // The client driver-specific handle
        myContext->MyDeviceHandle,

        // The context for completion
        SendRequest,

        // MBIM message               
        buffer,

        // MBIM message size
        bufferSize,   

        // Can be used for logging purpose, for example              
        MbbRequestGetActivityId(SendRequest), 

        // The client driver-specific completion routine
        myDeviceSendCompletionRoutine);

    if (sendStatus != STATUS_PENDING)
    {
        // Acknowledge back to MBBCx
        myDeviceSendCompletionRoutine(
            SendRequest,
            sendStatus);
    }
}

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 <= DISPATCH_LEVEL