Partager via


Relations entre les générations NET_BUFFER_LIST

Les enregistreurs de pilotes doivent comprendre et maintenir la relation entre les structures NET_BUFFER_LIST parent (d’origine) et les structures enfants (dérivées) résultant des opérations de clonage, de fragment et de réassemblement.

L’appelant d’une fonction clone/fragment/réassemble gère la relation parent/enfant, y compris le pointeur parent dans la structure de NET_BUFFER_LIST enfant et un nombre enfant. Le nombre d’enfants garantit que l’appelant libère le parent une fois que tous les enfants ont été libérés. Les règles suivantes s’appliquent :

  • Une fois qu’un pilote a créé des structures enfants à partir d’une structure NET_BUFFER_LIST, il doit conserver la propriété de la structure parente et transmettre les structures enfants à d’autres pilotes. Le pilote ne doit jamais passer la structure NET_BUFFER_LIST parent à un autre pilote.

  • Un pilote doit uniquement mettre à jour le nombre d’enfants dans la structure de NET_BUFFER_LIST parent. Étant donné que la structure parente n’est jamais passée à un autre pilote, il n’existe aucun risque que la valeur du nombre d’enfants puisse être remplacée. Le pilote doit définir le pointeur parent dans les structures enfants pour qu’il pointe vers la structure parente.

  • Lorsqu’un pilote reçoit un NET_BUFFER_LIST d’un autre pilote, le pilote ne doit pas remplacer le pointeur parent. Si la structure de NET_BUFFER_LIST reçue est un enfant, son pointeur parent doit déjà être défini. Le pilote peut utiliser le NET_BUFFER_LIST reçu d’un autre pilote en tant que structure parente.

  • NDIS n’applique pas les règles précédentes. Le propriétaire actuel d’une structure NET_BUFFER_LIST doit gérer le nombre d’enfants et le pointeur parent. Par exemple, si le propriétaire actuel clone et fragmente une structure NET_BUFFER_LIST, il doit gérer le pointeur parent et le compteur enfant.

  • NDIS définit le nombre d’enfants sur zéro et le pointeur parent sur NULL lorsqu’il alloue une structure NET_BUFFER_LIST. NDIS ne modifie pas ces champs chaque fois qu’un pilote passe une structure NET_BUFFER_LIST à un autre pilote.

structures NET_BUFFER_LIST dérivées