функция обратного вызова 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 sycnchronously.
    //
    memset(buffer, '*', bufferSize);
    filledSize = bufferSize;

    MbbRequestCompleteWithInformation(ReceiveRequest,
        STATUS_SUCCESS,
        filledSize);
}

Требования

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