FwpsAllocateCloneNetBufferList0, fonction (fwpsk.h)

La fonction FwpsAllocateCloneNetBufferList0 alloue une structure NET_BUFFER_LIST qui est un clone d’une structure NET_BUFFER_LIST existante.

Notezque FwpsAllocateCloneNetBufferList0 est une version spécifique de FwpsAllocateCloneNetBufferList. Pour plus d’informations , voir PAM Version-Independent noms et ciblage de versions spécifiques de Windows .
 

Syntaxe

NTSTATUS FwpsAllocateCloneNetBufferList0(
  [in, out]      NET_BUFFER_LIST *originalNetBufferList,
  [in, optional] NDIS_HANDLE     netBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     netBufferPoolHandle,
  [in]           ULONG           allocateCloneFlags,
  [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

Un handle de pool NET_BUFFER_LIST qui a été obtenu à partir d’un appel précédent au Fonction NdisAllocateNetBufferListPool . Ce paramètre est facultatif et peut avoir la valeur NULL.

[in, optional] netBufferPoolHandle

Handle de pool NET_BUFFER obtenu à partir d’un appel précédent à la fonction NdisAllocateNetBufferPool . Ce paramètre est facultatif et peut avoir la valeur NULL.

[in] allocateCloneFlags

Il n’existe actuellement aucun indicateur défini pour cette fonction. Les pilotes de légende doivent définir ce paramètre sur zéro.

[out] netBufferList

Pointeur vers une variable qui reçoit un pointeur vers la structure NET_BUFFER_LIST clone.

Valeur de retour

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

Code de retour Description
STATUS_SUCCESS
La structure de NET_BUFFER_LIST clone a été correctement allouée.
Autres codes d’état
Une erreur est survenue.

Remarques

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

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

Si le clone 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 sont NULL, le pool par défaut préalloué par NDIS est utilisé.

Le clone 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 FwpsAllocateCloneNetBufferList0 ne copie pas les données décrites par les MDL d’origine vers de nouvelles mémoires tampons de données. Au lieu de cela, le clone NET_BUFFER_LIST structure référence les mémoires tampons de données d’origine. La structure de NET_BUFFER_LIST clone n’inclut pas de structure initiale NET_BUFFER_LIST_CONTEXT structure.

Cette fonction définit le membre ParentNetBufferList du clone nouvellement créé NET_BUFFER_LIST structure pour qu’elle pointe vers la structure NET_BUFFER_LIST parente. Le membre ChildRefCount de la structure parente est incrémenté de 1.

Un pilote de légende peut modifier la structure du clone NET_BUFFER_LIST 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 le clone NET_BUFFER_LIST structure ont été injectées avec succès dans la pile réseau, le pilote de légende libère le clone NET_BUFFER_LIST structure 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 de la liste des mémoires tampons du clone net. Un tel pilote doit également annuler les modifications avant d’appeler le 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 dans le PAM consiste à obtenir des clarifications à partir d’une application en mode utilisateur ou d’une autre opération relativement rapide. Le pilote de légende ne doit pas contenir de paquets clonés pendant, par exemple, attendre l’entrée de l’utilisateur ou attendre l’autorisation du service web, ou attendre toute autre opération pouvant prendre un certain temps.

Si le pilote de légende doit attendre une opération potentiellement longue, il effectue une copie approfondie du paquet à l’aide de FwpsAllocateNetBufferAndNetBufferList0, et il bloque et absorbe le paquet d’origine.

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

Configuration requise

   
Client minimal pris en charge Disponible à partir de Windows Vista.
Plateforme cible Universal
En-tête fwpsk.h (inclure 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