Udostępnij przez


Ponownie zmontowane struktury NET_BUFFER_LIST

Sterownik NDIS może utworzyć strukturę NET_BUFFER_LIST ponownie zmontowaną z istniejącej struktury NET_BUFFER_LIST. Ponownie zmontowana struktura odwołuje się do oryginalnych danych z wielu źródłowych struktur NET_BUFFER. Sterowniki mogą używać tego rodzaju struktury do efektywnego łączenia wielu mniejszych buforów w jeden duży bufor.

Na poniższej ilustracji przedstawiono relację między strukturą NET_BUFFER_LIST nadrzędną a ponownie zmontowaną strukturą podrzędną.

Diagram ilustrujący relację między strukturą NET_BUFFER_LIST nadrzędną a ponownie zmontowaną strukturą podrzędną.

Powyższy rysunek zawiera strukturę NET_BUFFER_LIST nadrzędną i strukturę podrzędną, która została utworzona na podstawie tego elementu nadrzędnego. Struktura nadrzędna ma jedną strukturę NET_BUFFER_LIST_CONTEXT i trzy struktury NET_BUFFER z dołączonymi listami MDL. Wskaźnik nadrzędny struktury rodzica jest NULL, co wskazuje, że nie jest to struktura pochodna.

Struktura NET_BUFFER_LIST podrzędna ma jedną strukturę NET_BUFFER z dołączonymi listami MDL. Struktura NET_BUFFER_LIST podrzędna ma wskaźnik do struktury nadrzędnej. NULL, gdzie wskaźnik struktury NET_BUFFER_LIST_CONTEXT sugeruje, że element podrzędny nie ma struktury NET_BUFFER_LIST_CONTEXT.

Sterowniki NDIS wywołują funkcję NdisAllocateReassembledNetBufferList, aby ponownie złożyć fragmentowaną strukturę NET_BUFFER_LIST. Usługa NDIS przydziela nową strukturę NET_BUFFER i listy MDL-ów z ponownie złożoną strukturą NET_BUFFER_LIST. NDIS nie przydziela struktury NET_BUFFER_LIST_CONTEXT dla ponownie zmontowanej struktury. Ponownie zmontowana struktura NET_BUFFER i listy MDL opisują te same dane, co struktura nadrzędna. Dane nie są kopiowane.

Aby utworzyć ponownie złożoną strukturę NET_BUFFER_LIST, NdisAllocateReassembledNetBufferList pomija liczbę bajtów określoną w parametrze StartOffset w każdej strukturze NET_BUFFER nadrzędnej. NdisAllocateReassembledNetBufferList łączy pozostałe dane w strukturach nadrzędnych NET_BUFFER w łańcuch MDL jednej ponownie zmontowanej struktury NET_BUFFER. NdisAllocateReassembledNetBufferList wycofuje się (zwiększa używaną przestrzeń danych w) ponownie złożonej strukturze NET_BUFFER o wartość określoną w DataOffsetDelta .

Sterowniki NDIS wywołują funkcję NdisFreeReassembledNetBufferList, aby zwolnić ponownie zmontowaną strukturę NET_BUFFER_LIST oraz powiązaną strukturę NET_BUFFER i łańcuch MDL.

pochodne struktury NET_BUFFER_LIST