Partager via


Gestion des mémoires tampons du pilote de filtre

Les pilotes de filtre créent des mémoires tampons pour copier les données réseau obtenues à partir d’autres pilotes, ou pour lancer des opérations d’envoi ou de réception.

Si un pilote de filtre ne crée pas de mémoires tampons, le pilote ne gère pas les pools de mémoires tampons. Un tel pilote transmet simplement les mémoires tampons qu’il reçoit d’autres pilotes.

Un pilote de filtre qui crée des mémoires tampons pour prendre en charge les opérations d’envoi ou de réception doit gérer NET_BUFFER_LIST pools de structures et NET_BUFFER pools de structures.

Pour créer ces pools, les pilotes appellent les fonctions suivantes :

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Les pilotes de filtre peuvent utiliser les fonctions suivantes pour allouer des structures à partir des pools :

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

Appeler NdisAllocateNetBufferAndNetBufferList est plus efficace que d’appeler NdisAllocateNetBufferList suivi de NdisAllocateNetBuffer. Toutefois, NdisAllocateNetBufferAndNetBufferList crée uniquement une structure NET_BUFFER sur la structure NET_BUFFER_LIST. Pour utiliser NdisAllocateNetBufferAndNetBufferList, le pilote doit définir le paramètre AllocateNetBuffer sur TRUE lorsqu’il appelle NdisAllocateNetBufferListPool.

Les pilotes de filtre qui initient des demandes d'envoi doivent déterminer le contexte et les besoins en espace de remplissage des pilotes sous-jacents. Les pilotes de filtre utilisent des attributs de redémarrage pour déterminer les besoins de remplissage des pilotes sous-jacents. Un pilote de filtre doit déterminer les exigences de remplissage et de contexte dans l’état de redémarrage . Le pilote doit allouer suffisamment d’espace de backfill et de contexte pour l’ensemble de la pile. Si nécessaire, un pilote de filtre peut libérer les pools et les réallouer dans l’état de redémarrage .

Les pilotes de filtre utilisent les fonctions suivantes pour libérer les pools :

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

Les pilotes de filtre utilisent les fonctions suivantes pour libérer les structures allouées à partir des pools :

NdisFreeNetBufferList

NdisFreeNetBuffer

Les pilotes doivent libérer des structures NET_BUFFER allouées avec NdisAllocateNetBuffer avant de libérer la structure NET_BUFFER_LIST associée. Les structures NET_BUFFER allouées avec NdisAllocateNetBufferAndNetBufferList sont libérées lorsque le pilote appelle NdisFreeNetBufferList pour la structure NET_BUFFER_LIST associée.