Estruturas de NET_BUFFER_LIST clonadas
Um driver NDIS cria uma estrutura de NET_BUFFER_LIST clonada de uma estrutura de NET_BUFFER_LIST existente. A estrutura clonada faz referência aos dados das estruturas originais. Os drivers podem usar esse tipo de estrutura para transferir com eficiência os mesmos dados para vários caminhos.
A figura a seguir mostra a relação entre uma estrutura de NET_BUFFER_LIST pai e uma estrutura filho clonada.
A figura anterior contém uma estrutura de NET_BUFFER_LIST pai e uma estrutura filho derivada desse pai. A estrutura pai tem uma estrutura NET_BUFFER_LIST_CONTEXT e uma estrutura NET_BUFFER com MDLs anexados. O ponteiro pai da estrutura pai é NULL , indicando que não é uma estrutura derivada.
A estrutura de NET_BUFFER_LIST filho tem uma estrutura NET_BUFFER com MDLs anexados. O NET_BUFFER_LIST filho tem um ponteiro para a estrutura pai. O NULL em que um ponteiro de estrutura NET_BUFFER_LIST_CONTEXT seria indica que o filho não tem NET_BUFFER_LIST_CONTEXT estrutura.
Os drivers chamam a função NdisAllocateCloneNetBufferList para criar um clone NET_BUFFER_LIST estrutura. O NDIS aloca novas estruturas de NET_BUFFER e MDLs com a estrutura de NET_BUFFER_LIST clonada. O NDIS não aloca uma estrutura NET_BUFFER_LIST_CONTEXT para a estrutura clonada. As novas estruturas de NET_BUFFER e MDLs descrevem os mesmos dados que na estrutura pai. Os dados não são copiados.
Os drivers chamam a função NdisFreeCloneNetBufferList para liberar uma estrutura NET_BUFFER_LIST e todas as estruturas de NET_BUFFER associadas e cadeias de MDL alocadas anteriormente chamando NdisAllocateCloneNetBufferList.