Compartilhar via


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA função de retorno de chamada (vmbuskernelmodeclientlibapi.h)

[Algumas informações relacionam-se ao produto de pré-lançamento, o qual poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não fornece nenhuma garantia, expressa ou implícita, com relação às informações fornecidas aqui.]

A função VmbChannelPacketGetExternalData obtém qualquer Listas de Descritor de Memória externo (MDLs) associado a um pacote durante o processamento de pacotes.

Sintaxe

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

NTSTATUS FnVmbChannelPacketGetExternalData(
  VMBPACKETCOMPLETION PacketCompletionContext,
  UINT32 Flags,
  PMDL *Mdl
)
{...}

Parâmetros

PacketCompletionContext

Um identificador que identifica o pacote de entrada e é usado para se referir ao pacote depois que o processamento é concluído.

Flags

Sinalizadores que controlam como o MDL é mapeado. Os valores de sinalizador possíveis são:

Valor Significado
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
Mapeie o MDL como somente leitura.

Mdl

Um ponteiro para o MDL mapeado.

Retornar valor

VmbChannelPacketGetExternalData retorna um código status. Se essa função retornar STATUS_PENDING, o chamador deverá retornar do retorno de chamada de processamento de pacotes, que será chamado novamente, possivelmente em um IRQL diferente, quando os dados externos estiverem prontos. Neste ponto, uma chamada para essa função terá êxito e retornará os dados externos.

Comentários

A criação de um MDL que representa a memória descrita por essa transação faz com que essas regiões da máquina virtual sejam fixadas na memória pelo restante do tempo de vida da transação. Isso é o que pode fazer com que a função retorne STATUS_PENDING, pois as regiões da máquina virtual podem precisar ser paginadas.

O MDL retornado por essa função descreve a memória que já está bloqueada no local. Portanto, não é necessário chamar a função MmProbeAndLockPages . No entanto, o MDL não terá um endereço virtual no modo de usuário nem um endereço virtual no modo kernel. Se o driver que chama essa função exigir um endereço virtual para manipular a memória dentro da máquina virtual, esse driver deverá chamar MmMapLockedPagesSpecifyCache ou MmGetSystemAddressForMdlSafe e a função de desbloqueio correspondente posteriormente, como MmUnmapLockedPages. Uma alternativa ao uso de um endereço virtual seria apenas passar o MDL para baixo para um driver que o usa para acesso direto à memória.

O driver que chama essa função não é necessário para liberar o MDL. Ele se torna inválido ao chamar a função VmbChannelPacketComplete . A KMCL (Biblioteca de Clientes do Modo Kernel) a libera posteriormente.

Importante

Essa função é chamada por meio da interface KMCL (Biblioteca de Clientes do Modo Kernel do VMBus), fornecida pelo driver de barramento Vmbkmcl.sys. Essa é uma função de cliente acessada da estrutura KMCL_CLIENT_INTERFACE_V1 .

Para obter mais informações, consulte a seção Comentários do KMCL_CLIENT_INTERFACE_V1.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1803
Cabeçalho vmbuskernelmodeclientlibapi.h

Confira também

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete