функция обратного вызова 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 от устройства.
Возвращаемое значение
Никакой
Замечания
Драйвер клиента 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 |