Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция обратного вызова события драйвера клиента EvtMbbDeviceSendMbimFragment указывает устройству выполнить задачу, указанную сообщением элемента управления MBIM. Эта функция обратного вызова эквивалентна запросу SendEncapsulatedCommand, определенному в спецификации MBIM.
Синтаксис
EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;
void EvtMbbDeviceSendMbimFragment(
WDFDEVICE Device,
MBBREQUEST SendRequest
)
{...}
Параметры
Device
Дескриптор объекта устройства платформы, полученный из предыдущего вызова WdfDeviceCreate.
SendRequest
Дескриптор объекта платформы, представляющий запрос на отправку фрагментированного сообщения MBIM на устройство.
Возвращаемое значение
Никакой
Замечания
Драйвер клиента MBBCx должен зарегистрировать функцию обратного вызова EvtMbbDeviceSendMbimFragment путем вызова MbbDeviceInitialize.
Платформа MBBCx вызывает эту функцию обратного вызова, когда она хочет выдать команду в формате сообщения элемента управления MBIM драйверу клиента. Если размер сообщения элемента управления MBIM превышает максимальный размер фрагмента, заданный драйвером клиента в структуре MBB_DEVICE_MBIM_PARAMETERS, платформа MBBCx разбивает сообщение элемента управления MBIM на несколько фрагментированных сообщений и вызывает эту функцию обратного вызова один раз на фрагментованное сообщение.
Чтобы получить фактический фрагмент сообщения MBIM, драйвер клиента должен вызвать MbbRequestGetBuffer, чтобы получить буфер, в котором хранится фрагмент сообщения MBIM. После успешного принятия запроса на управление или любого условия сбоя драйвер клиента должен подтвердить это в MBBCx путем вызова MbbRequestComplete асинхронно или синхронно.
Дополнительные сведения см. в обработке сообщений управления MBIM.
Пример
Код обработки ошибок не был оставлен в этом примере для краткости и ясности.
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);
}
}
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 версии 1809 |
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.27 |
заголовка | mbbcx.h |
IRQL | <= DISPATCH_LEVEL |