Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un pilote NDIS peut créer une structure de NET_BUFFER_LIST fragmentée à partir d’une structure NET_BUFFER_LIST existante. La structure fragmentée fait référence à un ensemble de structures NET_BUFFER qui référencent les données d’origine ; toutefois, les données sont divisées en unités qui ne dépassent pas une taille maximale. Les pilotes peuvent utiliser ce type de structure pour décomposer efficacement de grandes mémoires tampons en mémoires tampons plus petites.
La figure suivante montre la relation entre une structure NET_BUFFER_LIST parente et un enfant fragmenté.
La figure précédente contient une structure NET_BUFFER_LIST parente et une structure enfant dérivée de ce parent. La structure parente a une structure NET_BUFFER_LIST_CONTEXT et une structure NET_BUFFER avec des DLL jointes. Le pointeur parent de la structure parente est null indiquant qu’il n’est pas une structure dérivée.
La structure NET_BUFFER_LIST enfant a trois structures NET_BUFFER avec des DLL attachées. La structure NET_BUFFER_LIST enfant a un pointeur vers la structure parente. La NULL où un pointeur de structure NET_BUFFER_LIST_CONTEXT indique que l’enfant n’a pas de structure NET_BUFFER_LIST_CONTEXT.
Les pilotes NDIS appellent la fonction NdisAllocateFragmentNetBufferList pour créer une structure de NET_BUFFER_LIST fragmentée basée sur les données d’une structure NET_BUFFER_LIST existante. NDIS alloue de nouvelles structures NET_BUFFER et mdL pour la structure de NET_BUFFER_LIST fragmentée. NDIS n’alloue pas de structure NET_BUFFER_LIST_CONTEXT pour la structure fragmentée. Le fragment NET_BUFFER structures et mdLs décrivent les mêmes données que la structure parente. Les données ne sont pas copiées.
NdisAllocateFragmentNetBufferList crée les fragments, à partir du début de l’espace de données utilisé dans chaque structure NET_BUFFER parente et décalée par la valeur spécifiée dans le paramètre StartOffset.
NdisAllocateFragmentNetBufferList divise l’espace de données utilisé dans chaque structure de NET_BUFFER source en fragments. La longueur de l’espace de données utilisé de chaque fragment est inférieure ou égale à la valeur spécifiée dans le paramètre MaximumLength. L’espace de données utilisé du dernier fragment peut être inférieur à MaximumLength. Le décalage de données des nouvelles structures de NET_BUFFER est retiré par le nombre d’octets spécifiés dans le paramètre DataOffsetDelta.
S’il existe plusieurs structures NET_BUFFER dans la structure NET_BUFFER_LIST parent (non affichée dans l’illustration), le processus de fragmentation pour chaque structure NET_BUFFER est identique à celui d’une seule structure. Par exemple, si le dernier élément de données d’une structure de NET_BUFFER parent est inférieur à la taille maximale, NDIS ne combine pas ces données avec les données au début de la structure de NET_BUFFER suivante.
Les pilotes NDIS appellent la fonction NdisFreeFragmentNetBufferList pour libérer une structure NET_BUFFER_LIST et toutes les structures NET_BUFFER associées et chaînes MDL qui ont été précédemment allouées en appelant NdisAllocateFragmentNetBufferList.