EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT Rückruffunktion (mbbcx.h)
Die EvtMbbDeviceSendMbimFragment-Ereignisrückruffunktion eines Clienttreibers weist das Gerät an, die in der MBIM-Steuerelementnachricht angegebene Aufgabe auszuführen. Diese Rückruffunktion entspricht der SendEncapsulatedCommand-Anforderung , die in der MBIM-Spezifikation definiert ist.
Syntax
EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;
void EvtMbbDeviceSendMbimFragment(
WDFDEVICE Device,
MBBREQUEST SendRequest
)
{...}
Parameter
Device
Ein Handle für ein Framework-Geräteobjekt, das der Clienttreiber aus einem vorherigen Aufruf von WdfDeviceCreate abgerufen hat.
SendRequest
Ein Handle für das Frameworkobjekt, das die Anforderung darstellt, eine fragmentierte MBIM-Nachricht an das Gerät zu senden.
Rückgabewert
Keine
Bemerkungen
Ein MBBCx-Clienttreiber muss eine EvtMbbDeviceSendMbimFragment-Rückruffunktion registrieren, indem MbbDeviceInitialize aufgerufen wird.
Das MBBCx-Framework ruft diese Rückruffunktion auf, wenn es einen Befehl im Format einer MBIM-Steuerelementnachricht an den Clienttreiber ausgeben möchte. Wenn die Größe der MBIM-Steuerelementnachricht größer als die maximale Fragmentgröße ist, die vom Clienttreiber in der MBB_DEVICE_MBIM_PARAMETERS-Struktur festgelegt wurde, teilt das MBBCx-Framework die MBIM-Steuerelementnachricht in mehrere fragmentierte Nachrichten auf und ruft diese Rückruffunktion einmal pro fragmentierter Nachricht auf.
Zum Abrufen des tatsächlich gesendeten MBIM-Nachrichtenfragments 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 für MBBCx bestätigen, indem Er MbbRequestComplete entweder asynchron oder synchron aufruft.
Weitere Informationen finden Sie unter Behandeln von MBIM-Steuerelementmeldungen.
Beispiel
Fehlerbehandlungscode wurde in diesem Beispiel aus Gründen der Kürze und Klarheit nicht verwendet.
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 |
---|---|
Unterstützte Mindestversion (Client) | Windows 10, Version 1809 |
Zielplattform | Universell |
KMDF-Mindestversion | 1,27 |
Kopfzeile | mbbcx.h |
IRQL | <= DISPATCH_LEVEL |