Поделиться через


функция обратного вызова EVT_MBB_DEVICE_RECEIVE_MBIM_FRAGMENT (mbbcx.h)

Функция обратного вызова события EvtMbbDeviceReceiveMbimFragment клиентского драйвера предоставляет ответное сообщение, возвращенное с устройства в ответ на предыдущее сообщение элемента управления MBIM, отправленное из MBBCx. Эта функция обратного вызова эквивалентна запросу GetEncapsulatedResponse, определенному в спецификации MBIM.

Синтаксис

EVT_MBB_DEVICE_RECEIVE_MBIM_FRAGMENT EvtMbbDeviceReceiveMbimFragment;

void EvtMbbDeviceReceiveMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST ReceiveRequest
)
{...}

Параметры

Device

Дескриптор объекта устройства платформы, полученный драйвером клиента при предыдущем вызове WdfDeviceCreate.

ReceiveRequest

Дескриптор объекта платформы, который представляет запрос на получение фрагментированного сообщения MBIM от устройства.

Возвращаемое значение

None

Remarks

Драйвер клиента MBBCx должен зарегистрировать функцию обратного вызова EvtMbbDeviceReceiveMbimFragment , вызвав MbbDeviceInitialize.

Платформа MBBCx вызывает эту функцию обратного вызова после получения от клиентского драйвера уведомления о доступности сообщения MBIM с устройства либо в качестве ответа на предыдущий запрос управляющего сообщения MBIM от платформы, либо в качестве события незапрашиваемого устройства.

В этой функции обратного вызова драйвер клиента помещает ответное сообщение MBIM в буферное пространство, предварительно выделенное платформой MBBCx. Если размер одного ответного сообщения больше размера предварительно выделенного буфера, то ответное сообщение необходимо разделить на несколько фрагментированных сообщений, как описано в спецификации MBIM. Когда происходит фрагментация, MBBCx будет продолжать вызывать эту функцию обратного вызова один раз на фрагмент, пока не будут получены все фрагменты сообщения MBIM ответа.

Чтобы получить доступ к предварительно выделенному буферу и его размеру, драйвер клиента должен вызвать MbbRequestGetBuffer. После того как драйвер клиента заполняет это буферное пространство ответным сообщением или фрагментом ответного сообщения, он должен вызвать MbbRequestCompleteWithInformation с фактически заполненным числом байтов. Это можно сделать асинхронно или синхронно.

Дополнительные сведения см. в разделе Обработка сообщений элементов управления MBIM.

Пример

Обработка ошибок была оставлена вне этого примера для краткости и ясности.

VOID
EvtMbbDeviceReceiveMbimFragment(
    WDFDEVICE  Device,
    MBBREQUEST ReceiveRequest
)
{
    size_t filledSize = 0;
    size_t bufferSize = 0;
    PVOID buffer = MbbRequestGetBuffer(ReceiveRequest, &bufferSize);

    // 
    // Write the response MBIM message into the buffer.
    // This example uses memset as an illustration of how
    // it can being completed synchronously.
    //
    memset(buffer, '*', bufferSize);
    filledSize = bufferSize;

    MbbRequestCompleteWithInformation(ReceiveRequest,
        STATUS_SUCCESS,
        filledSize);
}

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 1809
Целевая платформа Универсальное
Минимальная версия KMDF 1.27
Верхняя часть mbbcx.h
IRQL PASSIVE_LEVEL