Partager via


FwpsAllocateDeepCloneNetBufferList0, fonction (fwpsk.h)

La fonction FwpsAllocateDeepCloneNetBufferList0 alloue une structure NET_BUFFER_LIST qui est un clone profond d’une structure 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 de NET_BUFFER_LIST d’origine en cours de clonage.

[in, optional] netBufferListPoolHandle

Handle de pool NET_BUFFER_LIST obtenu à partir d’un appel précédent à la fonction NdisAllocateNetBufferListPool. Ce paramètre est facultatif et peut être NULL.

[in, optional] netBufferPoolHandle

Handle de pool NET_BUFFER_LIST 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 NET_BUFFER_LIST clone profond.

Valeur de retour

La fonction FwpsAllocateDeepCloneNetBufferList0 retourne l’un des codes NTSTATUS suivants.

Retourner le code Description
STATUS_SUCCESS La structure de NET_BUFFER_LIST clone profond a été correctement allouée.
Autres codes d’état Une erreur s’est produite.

Remarques

Un pilote de légende appelle la fonction FwpsAllocateDeepCloneNetBufferList0 pour allouer un clone profond NET_BUFFER_LIST structure d’une structure NET_BUFFER_LIST existante.

Cette fonction est un wrapper autour de la fonction NdisAllocateCloneNetBufferList, mais elle est spécialisée pour une utilisation par le PAM fonctions d’injection de paquets.

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 paramètre NetBufferPoolHand le. Si ces paramètres sont NULL, le pool par défaut préalloué par NDIS est utilisé.

Le clone profond NET_BUFFER_LIST structure décrit les mêmes données que celles décrites par la structure de 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 NET_BUFFER_LIST clone inclut une structure de NET_BUFFER_LIST_CONTEXT initiale.

Cette fonction définit le membre ParentNetBufferList du clone nouvellement créé NET_BUFFER_LIST structure pointant vers la structure NET_BUFFER_LIST parente. Le membre ChildRefCount de la structure parente est incrémenté par 1.

Un pilote de légende peut modifier la structure de NET_BUFFER_LIST clone et l’injecter dans la pile réseau à la place de la structure de 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 NET_BUFFER_LIST clone ont été injectées avec succès 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 nettes individuelles (NET_BUFFER) ou des DLL à 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 profonds dans le PAM est d’obtenir des clarifications à partir d’une application en mode utilisateur ou d’une autre opération relativement rapide qui a besoin d’un paquet indépendant de l’original. Le pilote de légende ne doit pas contenir de paquets clonés en attendant l’entrée de l’utilisateur, l’autorisation du service web ou toute autre opération qui peut prendre un certain temps.

Les pilotes de légende doivent toujours retourner des paquets conservés le plus rapidement possible.

Exigences

Exigence Valeur
client minimum pris en charge Build WIP 25324
plateforme cible Universel
d’en-tête fwpsk.h (include Fwpsk.h)
bibliothèque Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Voir aussi

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

fonctions d’injection de paquets