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 |
---|---|
|
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 |