EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT função de retorno de chamada (mbbcx.h)

A função de retorno de chamada de evento EvtMbbDeviceSendMbimFragment de um driver de cliente instrui seu dispositivo a executar a tarefa especificada pela mensagem de controle MBIM. Essa função de retorno de chamada é equivalente à solicitação SendEncapsulatedCommand definida na especificação do MBIM.

Sintaxe

EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;

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

Parâmetros

Device

Um identificador para um objeto de dispositivo de estrutura que o driver cliente obteve de uma chamada anterior para WdfDeviceCreate.

SendRequest

Um identificador para o objeto framework que representa a solicitação para enviar uma mensagem MBIM fragmentada para o dispositivo.

Retornar valor

Nenhum

Comentários

Um driver cliente MBBCx deve registrar uma função de retorno de chamada EvtMbbDeviceSendMbimFragment chamando MbbDeviceInitialize.

A estrutura MBBCx chama essa função de retorno de chamada quando deseja emitir um comando no formato de uma mensagem de controle MBIM para o driver cliente. Se o tamanho da mensagem de controle MBIM for maior que o tamanho máximo do fragmento definido pelo driver do cliente na estrutura MBB_DEVICE_MBIM_PARAMETERS , a estrutura MBBCx dividirá a mensagem de controle MBIM em várias mensagens fragmentadas e chamará essa função de retorno de chamada uma vez por mensagem fragmentada.

Para obter o fragmento de mensagem MBIM real que está sendo enviado, o driver do cliente deve chamar MbbRequestGetBuffer para obter o buffer em que o fragmento de mensagem MBIM está armazenado. Depois que o dispositivo tiver aceitado com êxito a solicitação de controle ou qualquer condição de falha, o driver do cliente deverá confirmar isso ao MBBCx chamando MbbRequestComplete de forma assíncrona ou síncrona.

Para obter mais informações, consulte Manipulando mensagens de controle MBIM.

Exemplo

O código de tratamento de erros foi deixado de fora deste exemplo para fins de brevidade e clareza.

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);
    }
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1809
Plataforma de Destino Universal
Versão mínima do KMDF 1.27
Cabeçalho mbbcx.h
IRQL <= DISPATCH_LEVEL