Freigeben über


Miniport-Treiberpufferverwaltung

Miniport-Treiber rufen in der Regel NdisAllocateNetBufferListPool von MiniportInitializeEx auf, um einen Pool mit NET_BUFFER_LIST Strukturen zu erstellen. Miniport-Treiber verwenden diese Strukturen, um empfangene Daten anzugeben.

In der Regel ordnet ein Miniporttreiber, der eine NET_BUFFER_LIST-Struktur zuweist, eine NET_BUFFER-Struktur dieser NET_BUFFER_LIST-Struktur zu und reiht sie in die Warteschlange ein. Es ist effizienter, NET_BUFFER-Strukturen vorzuverteilen, wenn Sie einen Pool von NET_BUFFER_LIST-Strukturen zuordnen, als NET_BUFFER_LIST-Strukturen und NET_BUFFER-Strukturen separat zuzuordnen.

Miniport-Treiber können NdisAllocateNetBufferListPool aufrufen und den Parameter "AllocateNetBuffer " auf "TRUE " festlegen, um anzugeben, dass NET_BUFFER Strukturen vorab zugewiesen werden. In diesem Fall wird eine NET_BUFFER Struktur mit jeder NET_BUFFER_LIST Struktur vorverteilt, die der Treiber aus dem Pool zuweist. Solche Treiber müssen NdisAllocateNetBufferAndNetBufferList aufrufen, um Strukturen aus diesem Pool zuzuweisen.

In der Regel ruft ein Miniporttreiber NdisAllocateNetBufferAndNetBufferList von MiniportInitializeEx auf, um so viele Puffer zuzuweisen, wie für nachfolgende Empfangsvorgänge erforderlich sind. In diesem Fall verwaltet der Treiber eine interne Liste der freien Puffer.

Die MiniportReturnNetBufferLists-Funktion kann eine zurückgegebene NET_BUFFER_LIST Struktur für die Wiederverwendung in einer nachfolgenden Empfangsanzeige vorbereiten. Obwohl MiniportReturnNetBufferLists die NET_BUFFER_LIST Strukturen an einen Pool zurückgeben könnte (z. B. NdisFreeNetBufferList), kann es effizienter sein, die Strukturen wiederzuverwenden, ohne sie an den Pool zurückzugeben.

Ein Miniporttreiber muss alle NET_BUFFER_LIST-Strukturen und zugehörigen Daten freigeben, wenn NDIS den Adapter stoppt. Ein Treiber kann NdisFreeNetBufferList aufrufen, um die Strukturen und die NdisFreeNetBufferListPool-Funktion freizurufen, um den NET_BUFFER_LIST Pool frei zu geben.