Structures NET_BUFFER_LIST clonées
Un pilote NDIS crée une structure de NET_BUFFER_LIST cloné à partir d’une structure NET_BUFFER_LIST existante. La structure cloné fait référence aux données de structures d’origine. Les pilotes peuvent utiliser ce type de structure pour transférer efficacement les mêmes données vers plusieurs chemins.
La figure suivante illustre la relation entre une structure parente NET_BUFFER_LIST et une structure enfant cloné.
La figure précédente contient une structure parente NET_BUFFER_LIST 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 attachées. Le pointeur parent de la structure parente est NULL , ce qui indique qu’il ne s’agit pas d’une structure dérivée.
La structure NET_BUFFER_LIST enfant a une structure NET_BUFFER avec des DLL attachées. Le NET_BUFFER_LIST enfant a un pointeur vers la structure parente. La valeur NULL où un pointeur de structure NET_BUFFER_LIST_CONTEXT serait indique que l’enfant n’a pas de structure NET_BUFFER_LIST_CONTEXT.
Les pilotes appellent la fonction NdisAllocateCloneNetBufferList pour créer un clone NET_BUFFER_LIST structure. NDIS alloue de nouvelles structures NET_BUFFER et MDL à la structure de NET_BUFFER_LIST cloné. NDIS n’alloue pas de structure NET_BUFFER_LIST_CONTEXT pour la structure cloné. Les nouvelles structures NET_BUFFER et mdL décrivent les mêmes données que dans la structure parente. Les données ne sont pas copiées.
Les pilotes appellent la fonction NdisFreeCloneNetBufferList pour libérer une structure NET_BUFFER_LIST et toutes les structures NET_BUFFER associées et les chaînes MDL précédemment allouées en appelant NdisAllocateCloneNetBufferList.