Gerenciamento de buffer de driver de miniport

Os drivers de miniporto normalmente chamam NdisAllocateNetBufferListPool de MiniportInitializeEx para criar um pool de estruturas NET_BUFFER_LIST . Os drivers de miniport usam essas estruturas para indicar os dados recebidos.

Normalmente, um driver de miniporto que aloca uma estrutura NET_BUFFER_LIST alocará e enfileirará uma estrutura NET_BUFFER nessa estrutura NET_BUFFER_LIST. É mais eficiente pré-alocar estruturas NET_BUFFER quando você aloca um pool de estruturas NET_BUFFER_LIST do que alocar estruturas NET_BUFFER_LIST e estruturas NET_BUFFER separadamente.

Os drivers de miniport podem chamar NdisAllocateNetBufferListPool e definir o parâmetro AllocateNetBuffer como TRUE para indicar que NET_BUFFER estruturas estão pré-alocadas. Nesse caso, uma estrutura de NET_BUFFER é pré-alocada com cada estrutura NET_BUFFER_LIST alocada pelo driver do pool. Esses drivers devem chamar NdisAllocateNetBufferAndNetBufferList para alocar estruturas desse pool.

Normalmente, um driver de miniporto chama NdisAllocateNetBufferAndNetBufferList de MiniportInitializeEx para alocar quantos buffers forem necessários para operações de recebimento subsequentes. Nesse caso, o driver gerencia uma lista interna de buffers livres.

A função MiniportReturnNetBufferLists pode preparar uma estrutura de NET_BUFFER_LIST retornada para reutilização em uma indicação de recebimento subsequente. Embora MiniportReturnNetBufferLists possa retornar as estruturas NET_BUFFER_LIST para um pool (por exemplo, ele pode chamar NdisFreeNetBufferList), pode ser mais eficiente reutilizar as estruturas sem retorná-las para o pool.

Um driver de miniporta deve liberar todas as estruturas de NET_BUFFER_LIST e os dados associados quando o NDIS para o adaptador. Um driver pode chamar NdisFreeNetBufferList para liberar as estruturas e a função NdisFreeNetBufferListPool para liberar o pool de NET_BUFFER_LIST.