EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT fonction de rappel (mbbcx.h)
La fonction de rappel d’événement EvtMbbDeviceSendMbimFragment du 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 vers un objet d’appareil framework que le pilote client obtenu à partir d’un appel précédent à WdfDeviceCreate.
SendRequest
Handle vers l’objet framework qui représente la demande d’envoi d’un message MBIM fragmenté à l’appareil.
Valeur de retour
Aucun
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 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 le reconnaître 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é laissé hors de cet exemple pour la concision et la 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);
}
}
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 | <= DISPATCH_LEVEL |