Freigeben über


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