Freigeben über


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