Partager via


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA fonction de rappel (vmbuskernelmodeclientlibapi.h)

[Certaines informations concernent le produit préversion qui peut être sensiblement modifié avant sa publication commerciale. Microsoft n’offre aucune garantie, expresse ou implicite, en ce qui concerne les informations fournies ici.]

La fonction VmbChannelPacketGetExternalData obtient toutes les listes de descripteurs de mémoire externes associées à un paquet pendant le traitement des paquets.

Syntaxe

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

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

Paramètres

PacketCompletionContext

Handle qui identifie le paquet entrant et est utilisé pour faire référence au paquet une fois le traitement terminé.

Flags

Indicateurs qui contrôlent la façon dont le MDL est mappé. Les valeurs d’indicateur possibles sont les suivantes :

Valeur Signification
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
Mappez MDL en lecture seule.

Mdl

Pointeur vers le MDL mappé.

Valeur de retour

VmbChannelPacketGetExternalData retourne un code d’état. Si cette fonction retourne STATUS_PENDING, l’appelant doit retourner à partir du rappel de traitement des paquets, qui sera appelé à nouveau, éventuellement à un autre IRQL, lorsque les données externes sont prêtes. À ce stade, un appel à cette fonction réussit et retourne les données externes.

Remarques

La création d’un MDL qui représente la mémoire décrite par cette transaction entraîne l’épinglage de ces régions de la machine virtuelle dans la mémoire pendant le reste de la durée de vie de la transaction. C’est ce qui peut entraîner le retour de la fonction STATUS_PENDING, car les régions de la machine virtuelle peuvent avoir besoin d’être paginées.

Le MDL retourné par cette fonction décrit la mémoire déjà verrouillée. Par conséquent, il n’est pas nécessaire d’appeler la fonction MmProbeAndLockPages. Toutefois, le MDL n’a pas d’adresse virtuelle en mode utilisateur ni d’adresse virtuelle en mode noyau. Si le pilote qui appelle cette fonction nécessite une adresse virtuelle pour manipuler la mémoire dans la machine virtuelle, ce pilote doit appeler MmMapLockedPagesSpecifyCache, ou MmGetSystemAddressForMdlSafe, et la fonction de déverrouillage correspondante ultérieurement, comme MmUnmapLockedPages. Une alternative à l’utilisation d’une adresse virtuelle consisterait simplement à transmettre le MDL à un pilote qui l’utilise pour l’accès direct à la mémoire.

Le pilote appelant cette fonction n’est pas nécessaire pour libérer le MDL. Il devient non valide lors de l’appel de la fonction VmbChannelPacketComplete. La bibliothèque cliente en mode noyau (KMCL) la libère ultérieurement.

Important

Cette fonction est appelée par le biais de l’interface KMCL (VmBus Kernel Mode Client Library), fournie par le pilote de bus Vmbkmcl.sys. Il s’agit d’une fonction cliente accessible à partir de la structure KMCL_CLIENT_INTERFACE_V1.

Pour plus d’informations, consultez la section Remarques de la KMCL_CLIENT_INTERFACE_V1.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10, version 1803
d’en-tête vmbuskernelmodeclientlibapi.h

Voir aussi

MmGetSystemAddressForMdlSafe

mmMapLockedPagesSpecifyCache

mmProbeAndLockPages

mmUnmapLockedPages

VmbChannelPacketComplete