EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT Rückruffunktion (mbbcx.h)
Die EvtMbbDeviceSendMbimFragment Ereignisrückruffunktion eines Clienttreibers weist das Gerät an, die durch die MBIM-Steuerelementmeldung angegebene Aufgabe auszuführen. Diese Rückruffunktion entspricht der in der MBIM-Spezifikation definierten SendEncapsulatedCommand Anforderung.
Syntax
EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;
void EvtMbbDeviceSendMbimFragment(
WDFDEVICE Device,
MBBREQUEST SendRequest
)
{...}
Parameter
Device
Ein Handle zu einem Framework-Geräteobjekt, das der Clienttreiber aus einem vorherigen Aufruf von WdfDeviceCreateabgerufen hat.
SendRequest
Ein Handle für das Framework-Objekt, das die Anforderung zum Senden einer fragmentierten MBIM-Nachricht an das Gerät darstellt.
Rückgabewert
Nichts
Bemerkungen
Ein MBBCx-Clienttreiber muss einen EvtMbbDeviceSendMbimFragment Rückruffunktion registrieren, indem MbbDeviceInitializeaufgerufen wird.
Das MBBCx-Framework ruft diese Rückruffunktion auf, wenn ein Befehl im Format einer MBIM-Steuerelementnachricht an den Clienttreiber ausgegeben werden soll. Wenn die Größe der MBIM-Steuerelementnachricht größer als die vom Clienttreiber in der MBB_DEVICE_MBIM_PARAMETERS-Struktur festgelegte maximale Fragmentgröße ist, teilt das MBBCx-Framework die MBIM-Steuerelementnachricht in mehrere fragmentierte Nachrichten auf und ruft diese Rückruffunktion einmal pro fragmentierter Nachricht auf.
Um das tatsächliche MBIM-Nachrichtenfragment abzurufen, das gesendet wird, sollte der Clienttreiber MbbRequestGetBuffer- aufrufen, um den Puffer abzurufen, in dem das MBIM-Nachrichtenfragment gespeichert ist. Sobald das Gerät die Steuerungsanforderung erfolgreich akzeptiert hat oder eine Fehlerbedingung aufgetreten ist, muss der Clienttreiber dies auf MBBCx bestätigen, indem er MbbRequestComplete entweder asynchron oder synchron aufruft.
Weitere Informationen finden Sie unter Behandeln von MBIM-Steuerelementnachrichten.
Beispiel
Fehlerbehandlungscode wurde aus diesem Beispiel aus Platz und Klarheit herausgelassen.
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);
}
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 10, Version 1809 |
Zielplattform- | Universal |
Minimale KMDF-Version | 1.27 |
Header- | mbbcx.h |
IRQL- | <= DISPATCH_LEVEL |