EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT función de devolución de llamada (mbbcx.h)

La función de devolución de llamada de eventos EvtMbbDeviceSendMbimFragment del controlador de cliente indica a su dispositivo que realice la tarea especificada por el mensaje de control MBIM. Esta función de devolución de llamada es el equivalente de la solicitud SendEncapsulatedCommand definida en la especificación MBIM.

Sintaxis

EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;

void EvtMbbDeviceSendMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST SendRequest
)
{...}

Parámetros

Device

Identificador de un objeto de dispositivo de marco que el controlador cliente obtuvo de una llamada anterior a WdfDeviceCreate.

SendRequest

Identificador del objeto framework que representa la solicitud para enviar un mensaje MBIM fragmentado al dispositivo.

Valor devuelto

None

Observaciones

Un controlador cliente MBBCx debe registrar una función de devolución de llamada EvtMbbDeviceSendMbimFragment llamando a MbbDeviceInitialize.

El marco MBBCx llama a esta función de devolución de llamada cuando quiere emitir un comando con el formato de un mensaje de control MBIM al controlador cliente. Si el tamaño del mensaje de control MBIM es mayor que el tamaño máximo de fragmento establecido por el controlador cliente en la estructura MBB_DEVICE_MBIM_PARAMETERS , el marco MBBCx divide el mensaje de control MBIM en varios mensajes fragmentados y llama a esta función de devolución de llamada una vez por mensaje fragmentado.

Para obtener el fragmento de mensaje MBIM real que se envía, el controlador de cliente debe llamar a MbbRequestGetBuffer para obtener el búfer donde se almacena el fragmento de mensaje MBIM. Una vez que su dispositivo haya aceptado correctamente la solicitud de control o se haya producido cualquier condición de error, el controlador cliente debe confirmarlo en MBBCx llamando a MbbRequestComplete de forma asincrónica o sincrónica.

Para obtener más información, consulte Control de mensajes de control MBIM.

Ejemplo

El código de control de errores se ha dejado fuera de este ejemplo para mayor brevedad y claridad.

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);
    }
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1809
Plataforma de destino Universal
Versión mínima de KMDF 1.27
Encabezado mbbcx.h
IRQL <= DISPATCH_LEVEL