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

A função de retorno de chamada de evento EvtMbbDeviceReceiveMbimFragment de um driver cliente fornece a mensagem de resposta retornada de seu dispositivo em resposta a uma mensagem de controle MBIM anterior enviada de MBBCx. Essa função de retorno de chamada é equivalente à solicitação GetEncapsulatedResponse definida na especificação do MBIM.

Sintaxe

EVT_MBB_DEVICE_RECEIVE_MBIM_FRAGMENT EvtMbbDeviceReceiveMbimFragment;

void EvtMbbDeviceReceiveMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST ReceiveRequest
)
{...}

Parâmetros

Device

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

ReceiveRequest

Um identificador para o objeto de estrutura que representa a solicitação para receber uma mensagem do MBIM fragemented do dispositivo.

Retornar valor

Nenhum

Comentários

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

A estrutura MBBCx chama essa função de retorno de chamada depois de ser notificada pelo driver cliente de que uma mensagem MBIM está disponível no dispositivo, seja como uma resposta a uma solicitação de mensagem de controle MBIM anterior da estrutura ou como um evento de dispositivo não solicitado.

Nessa função de retorno de chamada, o driver cliente coloca a mensagem MBIM de resposta no espaço de buffer pré-alocado pela estrutura MBBCx. Se o tamanho de uma única mensagem de resposta for maior que o tamanho do buffer pré-alocado e, em seguida, ele deverá dividir essa mensagem de resposta em várias mensagens fragmentadas, conforme descrito na especificação do MBIM. Quando a fragmentação ocorrer, o MBBCx continuará a chamar essa função de retorno de chamada, uma vez por fragmento, até que todos os fragmentos da mensagem MBIM de resposta sejam recebidos.

Para acessar o espaço de buffer pré-alocado e seu tamanho, o driver cliente deve chamar MbbRequestGetBuffer. Depois que o driver do cliente preencher esse espaço de buffer com a mensagem de resposta ou um fragmento da mensagem de resposta, ele deverá chamar MbbRequestCompleteWithInformation com o número de bytes realmente sendo preenchidos. Isso pode ser feito de forma assíncrona ou síncrona.

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

Exemplo

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

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 sycnchronously.
    //
    memset(buffer, '*', bufferSize);
    filledSize = bufferSize;

    MbbRequestCompleteWithInformation(ReceiveRequest,
        STATUS_SUCCESS,
        filledSize);
}

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 PASSIVE_LEVEL