Geklonte NET_BUFFER_LIST-Strukturen
Ein NDIS-Treiber erstellt eine geklonte NET_BUFFER_LIST-Struktur aus einer vorhandenen NET_BUFFER_LIST-Struktur. Die geklonte Struktur verweist auf die ursprünglichen Strukturdaten. Treiber können diese Art von Struktur verwenden, um dieselben Daten effizient an mehrere Pfade zu übertragen.
Die folgende Abbildung zeigt die Beziehung zwischen einer übergeordneten NET_BUFFER_LIST-Struktur und einer geklonten untergeordneten Struktur.
Die obige Abbildung enthält eine übergeordnete NET_BUFFER_LIST-Struktur und eine untergeordnete Struktur, die von diesem übergeordneten Element abgeleitet wurde. Die übergeordnete Struktur verfügt über eine NET_BUFFER_LIST_CONTEXT-Struktur und eine NET_BUFFER-Struktur mit angefügten MDLs. Der übergeordnete Zeiger der übergeordneten Struktur ist NULL , was angibt, dass es sich nicht um eine abgeleitete Struktur handelt.
Die untergeordnete NET_BUFFER_LIST-Struktur verfügt über eine NET_BUFFER-Struktur mit angefügten MDLs. Die untergeordnete NET_BUFFER_LIST verfügt über einen Zeiger auf die übergeordnete Struktur. Der NULL-Wert , bei dem ein NET_BUFFER_LIST_CONTEXT-Strukturzeiger sein würde, gibt an, dass das untergeordnete Element über keine NET_BUFFER_LIST_CONTEXT Struktur verfügt.
Treiber rufen die Funktion NdisAllocateCloneNetBufferList auf, um einen Klon NET_BUFFER_LIST Struktur zu erstellen. NDIS ordnet neue NET_BUFFER-Strukturen und MDLs der geklonten NET_BUFFER_LIST-Struktur zu. NDIS weist keine NET_BUFFER_LIST_CONTEXT-Struktur für die geklonte Struktur zu. Die neuen NET_BUFFER Strukturen und MDLs beschreiben dieselben Daten wie in der übergeordneten Struktur. Die Daten werden nicht kopiert.
Treiber rufen die NdisFreeCloneNetBufferList-Funktion auf, um eine NET_BUFFER_LIST-Struktur und alle zugeordneten NET_BUFFER-Strukturen und MDL-Ketten frei zu geben, die zuvor durch Den Aufruf von NdisAllocateCloneNetBufferList zugeordnet wurden.