struktura NET_BUFFER
Struktury NDIS 6.0 i nowsze NET_BUFFER są analogiczne do struktur NDIS_PACKET używanych przez sterowniki NDIS 5.x i starsze. Każda struktura NET_BUFFER pakuje pakiet danych sieciowych.
Na poniższej ilustracji przedstawiono pola w strukturze NET_BUFFER.
Struktura NET_BUFFER zawiera strukturę NET_BUFFER_HEADER w elemencie NetBufferHeader. Struktura NET_BUFFER_HEADER zawiera strukturę NET_BUFFER_DATA w elemencie NetBufferData. Do uzyskiwania dostępu do składowych struktury NET_BUFFER należy użyć makr NDIS. Aby uzyskać pełną listę tych makr, zobacz stronę referencyjną struktury NET_BUFFER.
Niektóre elementy członkowskie struktury NET_BUFFER są wykorzystywane wyłącznie przez NDIS. Elementy, których sterowniki zwykle używają, to:
ProtocolReserved
Zarezerwowane do użytku przez sterowniki protokołów.
MiniportReserved
Zarezerwowane do użytku przez sterowniki miniportu.
NdisPoolHandle
Określa uchwyt puli, który identyfikuje pulę NET_BUFFER, z której przydzielono strukturę NET_BUFFER.
Następne
Określa wskaźnik do następnej struktury NET_BUFFER na połączonej liście struktur NET_BUFFER. Jeśli jest to ostatnia struktura NET_BUFFER na liście, ten element członkowski jest null.
DługośćDanych
Określa długość w bajtach danych sieciowych w łańcuchu MDL.
DataOffset
Określa przesunięcie w bajtach od początku pamięci w łańcuchu MDL do początku danych sieciowych w łańcuchu MDL.
CurrentMdl
Określa wskaźnik na pierwszy MDL, z którego korzysta bieżący sterownik. Ten wskaźnik zapewnia optymalizację, która poprawia wydajność przez pomijanie dowolnych MDL, których bieżący sterownik nie używa.
CurrentMdlOffset
Określa przesunięcie w bajtach na początek używanej przestrzeni danych w języku MDL określonym przez element CurrentMdl struktury NET_BUFFER.
Na poniższym rysunku przedstawiono relację między członkami CurrentMdl, CurrentMdlOffset, DataOffset, DataLength a przestrzenią danych.
Usługa NDIS udostępnia funkcje do zarządzania przestrzenią danych w łańcuchu MDL. Sposób dynamicznego używania przestrzeni danych przez sterowniki zmienia się wraz z bieżącym sterownikiem. Czasami istnieje miejsce na dane, które jest obecnie nieużywane przez bieżący sterownik. Chociaż wolna przestrzeń danych jest obecnie nieużywana, może zawierać prawidłowe dane. Na przykład na ścieżce odbiorczej nieużywane miejsce danych może zawierać informacje nagłówka używane przez sterownik niższego poziomu.
Sterowniki wykonują operacje wycofywania i postępu w celu zwiększenia i zmniejszenia używanej przestrzeni danych. Aby uzyskać więcej informacji na temat operacji cofania i wycofywania, zobacz Retreat and Advance Operations.
Następujące terminy i definicje opisują elementy przestrzeni danych NET_BUFFER:
Używane miejsce danych
Używane miejsce danych zawiera dane używane przez bieżący sterownik. Sterowniki zwiększają używane miejsce danych operacjami cofania i zmniejszają używane miejsce danych operacjami zaawansowania.
Nieużywane miejsce danych
Bieżący sterownik nie korzysta z tej przestrzeni danych w bieżącym czasie.
całkowity rozmiar danych
Łączny rozmiar danych to suma rozmiaru używanego miejsca danych i nieużywanego miejsca danych. Aby obliczyć całkowity rozmiar, dodaj DataOffset do DataLength.
Rekolekcje
Operacje wycofywania zwiększają rozmiar używanej przestrzeni danych.
zaawansowane
Operacje zaawansowane zmniejszają rozmiar używanej przestrzeni danych.