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 |