Condividi tramite


Gestione buffer del driver Miniport

I driver Miniport in genere chiamano NdisAllocateNetBufferListPool da MiniportInitializeEx per creare un pool di strutture NET_BUFFER_LIST . I driver Miniport usano queste strutture per indicare i dati ricevuti.

In genere, un driver miniport che alloca una struttura NET_BUFFER_LIST allocherà e accoderà una struttura NET_BUFFER su tale struttura NET_BUFFER_LIST. È più efficiente preallocare le strutture NET_BUFFER quando si alloca un pool di strutture NET_BUFFER_LIST che allocare strutture NET_BUFFER_LIST e strutture NET_BUFFER separatamente.

I driver Miniport possono chiamare NdisAllocateNetBufferListPool e impostare il parametro AllocateNetBuffer su TRUE per indicare che le strutture NET_BUFFER sono preallocate. In questo caso, una struttura NET_BUFFER viene preallocata con ogni struttura NET_BUFFER_LIST allocata dal pool. Tali driver devono chiamare NdisAllocateNetBufferAndNetBufferList per allocare strutture da questo pool.

In genere, un driver miniport chiama NdisAllocateNetBufferAndNetBufferList da MiniportInitializeEx per allocare tutti i buffer necessari per le operazioni di ricezione successive. In questo caso, il driver gestisce un elenco interno di buffer liberi.

La funzione MiniportReturnNetBufferLists può preparare una struttura NET_BUFFER_LIST restituita per il riutilizzo in un'indicazione di ricezione successiva. Anche se MiniportReturnNetBufferLists potrebbe restituire le strutture NET_BUFFER_LIST a un pool (ad esempio, potrebbe chiamare NdisFreeNetBufferList), può essere più efficiente riutilizzare le strutture senza restituirle al pool.

Un driver miniport deve liberare tutte le strutture NET_BUFFER_LIST e i dati associati quando NDIS interrompe l'adattatore. Un driver può chiamare NdisFreeNetBufferList per liberare le strutture e la funzione NdisFreeNetBufferListPool per liberare il pool di NET_BUFFER_LIST.