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 |