Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver NDIS pode criar uma estrutura de NET_BUFFER_LIST remontada a partir de uma estrutura de NET_BUFFER_LIST existente. A estrutura remontada faz referência aos dados originais de várias fontes NET_BUFFER estruturas. Os drivers podem usar esse tipo de estrutura para combinar eficientemente muitos buffers menores em um único buffer grande.
A figura a seguir mostra a relação entre uma estrutura NET_BUFFER_LIST pai e uma estrutura filho remontada:
A figura anterior contém uma estrutura principal NET_BUFFER_LIST e uma estrutura secundária que foi derivada dessa estrutura principal. A estrutura pai tem uma estrutura NET_BUFFER_LIST_CONTEXT e três estruturas NET_BUFFER com MDLs anexadas. O ponteiro da estrutura principal é NULL indicando que não é uma estrutura derivada.
A estrutura NET_BUFFER_LIST filho tem uma estrutura NET_BUFFER com MDLs anexados. A estrutura NET_BUFFER_LIST filho tem um ponteiro para a estrutura pai. O NULL, onde estaria um ponteiro para a estrutura NET_BUFFER_LIST_CONTEXT, indica que o filho não tem uma estrutura NET_BUFFER_LIST_CONTEXT.
Os drivers NDIS chamam a função NdisAllocateReassembledNetBufferList para remontar uma estrutura NET_BUFFER_LIST fragmentada. O NDIS aloca uma nova estrutura NET_BUFFER e MDLs com a estrutura NET_BUFFER_LIST remontada. O NDIS não aloca uma estrutura NET_BUFFER_LIST_CONTEXT para a estrutura remontada. A estrutura NET_BUFFER remontada e as MDLs descrevem os mesmos dados que a estrutura pai. Os dados não são copiados.
Para criar a estrutura de NET_BUFFER_LIST remontada, NdisAllocateReassembledNetBufferList ignora o número de bytes especificado no parâmetro StartOffset em cada uma das estruturas de NET_BUFFER pai. NdisAllocateReassembledNetBufferList concatena os dados restantes em cada estrutura de NET_BUFFER pai na cadeia MDL de uma estrutura NET_BUFFER remontada. NdisAllocateReassembledNetBufferList recua (aumenta o espaço de dados usado em) a estrutura de NET_BUFFER remontada pela quantidade especificada em DataOffsetDelta .
Os drivers NDIS chamam a função NdisFreeReassembledNetBufferList para liberar uma estrutura de NET_BUFFER_LIST remontada e a estrutura de NET_BUFFER associada e a cadeia MDL.