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 originais das estruturas. 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. A NULL em que um ponteiro de estrutura NET_BUFFER_LIST_CONTEXT seria indica que o filho não tem estrutura NET_BUFFER_LIST_CONTEXT.
Os drivers chamam a funçãoNdisAllocateCloneNetBufferList 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 da estrutura pai. Os dados não são copiados.
Os drivers chamam a função NdisFreeCloneNetBuffer List para liberar uma estrutura NET_BUFFER_LIST e todas as estruturas NET_BUFFER associadas e cadeias de MDL que foram alocadas anteriormente chamando NdisAllocateCloneNetBufferList.