Fonction FwpsAllocateDeepCloneNetBufferList0 (fwpsk.h)
La fonction FwpsAllocateDeepCloneNetBufferList0 alloue une structure NET_BUFFER_LIST qui est un clone profond d’une structure de NET_BUFFER_LIST existante.
Syntaxe
NTSTATUS FwpsAllocateDeepCloneNetBufferList0(
[in, out] NET_BUFFER_LIST *originalNetBufferList,
[in, optional] NDIS_HANDLE netBufferListPoolHandle,
[in, optional] NDIS_HANDLE netBufferPoolHandle,
[out] NET_BUFFER_LIST **netBufferList
);
Paramètres
[in, out] originalNetBufferList
Pointeur vers la structure NET_BUFFER_LIST d’origine en cours de clonage.
[in, optional] netBufferListPoolHandle
Un NET_BUFFER_LIST handle de pool obtenu à partir d’un appel précédent à la fonction NdisAllocateNetBufferListPool . Ce paramètre est facultatif et peut être NULL.
[in, optional] netBufferPoolHandle
Un NET_BUFFER_LIST handle de pool obtenu à partir d’un appel précédent à la fonction NdisAllocateNetBufferPool . Ce paramètre est facultatif et peut être NULL.
[out] netBufferList
Pointeur vers une variable qui reçoit un pointeur vers la structure du clone profond NET_BUFFER_LIST .
Valeur retournée
La fonction FwpsAllocateDeepCloneNetBufferList0 retourne l’un des codes NTSTATUS suivants.
Code de retour | Description |
---|---|
STATUS_SUCCESS | Le clone profond NET_BUFFER_LIST structure a été correctement alloué. |
Autres codes status | Une erreur est survenue. |
Remarques
Un pilote de légende appelle la fonction FwpsAllocateDeepCloneNetBufferList0 pour allouer un clone profond NET_BUFFER_LIST structure d’une structure de NET_BUFFER_LIST existante.
Cette fonction est un wrapper autour de la fonction NdisAllocateCloneNetBufferList , mais elle est spécialisée pour une utilisation par les fonctions d’injection de paquets PAM.
Si le clone profond NET_BUFFER_LIST structure doit avoir des attributs associés à un pool spécifique, le pilote de légende doit spécifier le handle de pool dans le paramètre NetBufferListPoolHandle ou NetBufferPoolHandle . Si ces paramètres ont la valeur NULL, le pool par défaut préalloué par NDIS est utilisé.
La structure NET_BUFFER_LIST de clone profond décrit les mêmes données que celles décrites par la structure NET_BUFFER_LIST d’origine . La fonction FwpsAllocateDeepCloneNetBufferList0 copie les données décrites par les DLL d’origine dans de nouvelles mémoires tampons de données. La structure de NET_BUFFER_LIST clone inclut une structure NET_BUFFER_LIST_CONTEXT initiale.
Cette fonction définit le membre ParentNetBufferList de la structure clone NET_BUFFER_LIST nouvellement créée pour qu’il pointe vers la structure parente NET_BUFFER_LIST . Le membre ChildRefCount de la structure parente est incrémenté de 1.
Un pilote de légende peut modifier la structure NET_BUFFER_LIST clone et l’injecter dans la pile réseau à la place de la structure NET_BUFFER_LIST d’origine en appelant les fonctions d’injection de paquets. Une fois que les données décrites par la structure de clone NET_BUFFER_LIST ont été correctement injectées dans la pile réseau, le pilote de légende libère la structure de clone NET_BUFFER_LIST en appelant la fonction FwpsFreeCloneNetBufferList0 .
Un pilote de légende peut insérer ou remplacer des mémoires tampons réseau individuelles (NET_BUFFER) ou des MDL à l’intérieur du clone profond NET_BUFFER_LIST. Le pilote doit annuler ces modifications avant d’appeler la fonction FwpsFreeCloneNetBufferList0 .
Instructions pour la gestion des paquets clonés
Un pilote de légende ne doit pas contenir indéfiniment les paquets clonés. Un paquet cloné peut interférer avec les opérations de gestion de l’alimentation sur un ordinateur inactif.
L’utilisation prévue pour les paquets clonés en profondeur dans le PAM est d’obtenir des clarifications à partir d’une application en mode utilisateur ou d’une autre opération relativement rapide qui nécessite un paquet indépendant de l’original. Le pilote de légende ne doit pas contenir les paquets clonés en attendant l’entrée utilisateur, l’autorisation du service web ou toute autre opération qui peut prendre un temps arbitraire.
Les pilotes de légende doivent toujours retourner les paquets conservés aussi rapidement que possible.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | WIP build 25324 |
Plateforme cible | Universal |
En-tête | fwpsk.h (inclure Fwpsk.h) |
Bibliothèque | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |