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


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

Функция обратного вызова события EvtMbbDeviceSendMbimFragment клиентского драйвера указывает устройству выполнить задачу, указанную сообщением элемента управления MBIM. Эта функция обратного вызова является эквивалентом запроса SendEncapsulatedCommand , определенного в спецификации MBIM.

Синтаксис

EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;

void EvtMbbDeviceSendMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST SendRequest
)
{...}

Параметры

Device

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

SendRequest

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

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

None

Remarks

Драйвер клиента 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