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 |