Condividi tramite


Gestione del buffer del driver di filtro

Filtrare i driver crea buffer per copiare i dati di rete ottenuti da altri driver o per avviare operazioni di invio o ricezione.

Se un driver di filtro non crea buffer, il driver non gestisce i pool di buffer. Un driver di questo tipo passa semplicemente sui buffer che riceve da altri driver.

Un driver di filtro che crea buffer per supportare operazioni di invio o ricezione deve gestire pool di strutture NET_BUFFER_LIST e pool di strutture NET_BUFFER .

Per creare questi pool, i driver chiamano le funzioni seguenti:

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

I driver di filtro possono usare le funzioni seguenti per allocare strutture dai pool:

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

La chiamata a NdisAllocateNetBufferAndNetBufferList è più efficiente rispetto alla chiamata di NdisAllocateNetBufferList seguita da NdisAllocateNetBuffer. Tuttavia, NdisAllocateNetBufferAndNetBufferList crea solo una struttura NET_BUFFER nella struttura NET_BUFFER_LIST. Per usare NdisAllocateNetBufferAndNetBufferList, il driver deve impostare il parametro AllocateNetBuffer su TRUE quando chiama NdisAllocateNetBufferListPool.

I driver di filtro che hanno origine le richieste di invio devono determinare i requisiti di spazio di riempimento e contesto dei driver sottostanti. I driver di filtro usano gli attributi di riavvio per determinare i requisiti di riempimento dei driver sottostanti. Un driver di filtro deve determinare i requisiti di riempimento e contesto nello stato di riavvio . Il driver deve allocare spazio di riempimento e contesto sufficiente per l'intero stack. Se necessario, un driver di filtro può liberare i pool e riallocarli nello stato di riavvio .

I driver di filtro usano le funzioni seguenti per liberare i pool:

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

I driver di filtro usano le funzioni seguenti per liberare le strutture allocate dai pool:

NdisFreeNetBufferList

NdisFreeNetBuffer

I driver devono liberare NET_BUFFER strutture allocate con NdisAllocateNetBuffer prima di liberare la struttura di NET_BUFFER_LIST associata. NET_BUFFER strutture allocate con NdisAllocateNetBufferAndNetBufferList vengono liberate quando il driver chiama NdisFreeNetBufferList per la struttura NET_BUFFER_LIST associata.