Partager via


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA fonction de rappel (vmbuskernelmodeclientlibapi.h)

[Certaines informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft ne donne aucune garantie, expresse ou implicite, concernant les informations fournies ici.]

La fonction VmbChannelPacketGetExternalData obtient n’importe quel descripteur de mémoire externe Listes (MDL) associé à 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
Mapper MDL en lecture seule.

Mdl

Pointeur vers le MDL mappé.

Valeur retournée

VmbChannelPacketGetExternalData retourne un code status. 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 sur place. Par conséquent, il n’est pas nécessaire d’appeler la fonction MmProbeAndLockPages . Toutefois, le MDL n’aura ni adresse virtuelle en mode utilisateur ni adresse virtuelle en mode noyau. Si le pilote qui appelle cette fonction nécessite une adresse virtuelle pour manipuler la mémoire au sein de 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. Elle devient non valide lors de l’appel de la fonction VmbChannelPacketComplete . La bibliothèque cliente en mode noyau (KMCL) la publie ultérieurement.

Important

Cette fonction est appelée via l’interface KMCL (Kernel Mode Client Library) VMBus, 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 du KMCL_CLIENT_INTERFACE_V1.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10 version 1803
En-tête vmbuskernelmodeclientlibapi.h

Voir aussi

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete