Miniporttreiberpufferverwaltung
Miniporttreiber rufen in der Regel NdisAllocateNetBufferListPool von MiniportInitializeEx auf, um einen Pool mit NET_BUFFER_LIST Strukturen zu erstellen. Miniporttreiber verwenden diese Strukturen, um empfangene Daten anzugeben.
In der Regel weist ein Miniporttreiber, der eine NET_BUFFER_LIST-Struktur zuweist, eine NET_BUFFER Struktur zu und führt diese NET_BUFFER_LIST Struktur in die Warteschlange ein. Es ist effizienter, NET_BUFFER Strukturen vorab zuzuordnen, wenn Sie einen Pool mit NET_BUFFER_LIST Strukturen zuordnen, als NET_BUFFER_LIST Strukturen und NET_BUFFER Strukturen separat zuzuordnen.
Miniport-Treiber können NdisAllocateNetBufferListPool aufrufen und den AllocateNetBuffer-Parameter auf TRUE festlegen, um anzugeben, dass NET_BUFFER Strukturen vorab zugeordnet sind. In diesem Fall wird jeder NET_BUFFER_LIST Struktur, die der Treiber aus dem Pool ordnet, eine NET_BUFFER Struktur vorab zugeordnet. Solche Treiber müssen NdisAllocateNetBufferAndNetBufferList aufrufen, um Strukturen aus diesem Pool zuzuweisen.
In der Regel ruft ein Miniporttreiber NdisAllocateNetBufferAndNetBufferAndNetBufferList von MiniportInitializeEx auf, um so viele Puffer zuzuweisen, wie er für nachfolgende Empfangsvorgänge benötigt. In diesem Fall verwaltet der Treiber eine interne Liste freier Puffer.
Die MiniportReturnNetBufferLists-Funktion kann eine zurückgegebene NET_BUFFER_LIST Struktur für die Wiederverwendung in einer nachfolgenden Empfangsanzeige vorbereiten. MiniportReturnNetBufferLists könnte zwar die NET_BUFFER_LIST Strukturen an einen Pool zurückgeben (z. B. NdisFreeNetBufferList), aber es kann effizienter sein, die Strukturen wiederzuverwenden, ohne sie an den Pool zurückzugeben.
Ein Miniporttreiber sollte alle NET_BUFFER_LIST Strukturen und zugeordneten Daten freigeben, wenn NDIS den Adapter anhält. Ein Treiber kann NdisFreeNetBufferList aufrufen, um die Strukturen und die NdisFreeNetBufferListPool-Funktion freizugeben, um den NET_BUFFER_LIST Pool freizugeben.