Partager via


Gestion de la mémoire tampon 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, il 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 structure et NET_BUFFER pools de structure.

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

L’appel de NdisAllocateNetBufferAndNetBufferList est plus efficace que d’appeler NdisAllocateNetBufferList suivi de NdisAllocateNetBuffer. Toutefois, NdisAllocateNetBufferAndNetBufferList ne crée qu’une seule 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 proviennent des demandes d’envoi doivent déterminer le contexte et l’espace de remplissage requis des pilotes sous-jacents. Les pilotes de filtre utilisent des attributs de redémarrage pour déterminer les exigences de remplissage des pilotes sous-jacents. Un pilote de filtre doit déterminer les exigences de remplissage et de contexte dans l’état redémarrage . Le pilote doit allouer suffisamment d’espace de remplissage 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 à l’état 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 NET_BUFFER structures allouées avec NdisAllocateNetBuffer avant de libérer la structure NET_BUFFER_LIST associée. NET_BUFFER structures allouées avec NdisAllocateNetBufferAndNetBufferList sont libérées lorsque le pilote appelle NdisFreeNetBufferList pour la structure NET_BUFFER_LIST associée.