Partilhar via


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

[Algumas informações referem-se ao produto pré-lançado que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não faz garantias, expressas ou implícitas, em relação às informações fornecidas aqui.]

A função VmbChannelPacketGetExternalData obtém quaisquer MDLs (Listas de Descritores de Memória) externas associadas 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.

Valor de retorno

VmbChannelPacketGetExternalData retorna um código de status. Se essa função retornar STATUS_PENDING, o chamador deverá retornar do retorno de chamada de processamento de pacote, 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.

Observações

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 pode fazer com que a função retorne STATUS_PENDING, pois as regiões da máquina virtual podem precisar ser paginada.

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 MmMapLockedPagesSpecifyCacheou MmGetSystemAddressForMdlSafee 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. Torna-se 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 cliente acessada da estrutura de KMCL_CLIENT_INTERFACE_V1.

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 10, versão 1803
cabeçalho vmbuskernelmodeclientlibapi.h

Consulte também

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete