функция обратного вызова 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 |