Compartilhar via


Relações entre gerações de NET_BUFFER_LIST

Os gravadores de driver devem entender e manter a relação entre as estruturas pai (original) NET_BUFFER_LIST e as estruturas filho (derivadas) resultantes de operações de clonagem, fragmento e remontagem.

O chamador de uma função clone/fragment/reassemble mantém a relação pai/filho, incluindo o ponteiro pai na estrutura NET_BUFFER_LIST filho e uma contagem filho. A contagem de filhos garante que o chamador libere o pai depois que todos os filhos tiverem sido libertados. As seguintes regras se aplicam:

  • Depois que um driver cria estruturas filho de uma estrutura NET_BUFFER_LIST , ele deve manter a propriedade da estrutura pai e deve passar as estruturas filho para outros drivers. O driver nunca deve passar a estrutura de NET_BUFFER_LIST pai para outro driver.

  • Um driver só deve atualizar a contagem de filhos na estrutura de NET_BUFFER_LIST pai. Como a estrutura pai nunca é passada para outro driver, não há risco de que o valor da contagem de filhos possa ser substituído. O driver deve definir o ponteiro pai nas estruturas filho para apontar para a estrutura pai.

  • Quando um driver recebe um NET_BUFFER_LIST de outro driver, o driver não deve substituir o ponteiro pai. Se a estrutura de NET_BUFFER_LIST recebida for um filho, seu ponteiro pai já deverá ser definido. O driver pode usar o NET_BUFFER_LIST recebido de outro driver como uma estrutura pai.

  • O NDIS não impõe as regras anteriores. O proprietário atual de uma estrutura NET_BUFFER_LIST deve gerenciar a contagem de filhos e o ponteiro pai. Por exemplo, se o proprietário atual clonar e fragmentar uma estrutura NET_BUFFER_LIST, ele deverá gerenciar o ponteiro pai e o contador filho.

  • O NDIS define a contagem de filhos como zero e o ponteiro pai como NULL quando aloca uma estrutura NET_BUFFER_LIST. O NDIS não altera esses campos sempre que um driver passa uma estrutura NET_BUFFER_LIST para outro driver.

Estruturas de NET_BUFFER_LIST derivadas