Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik NDIS może utworzyć pofragmentowaną strukturę NET_BUFFER_LIST na podstawie istniejącej struktury NET_BUFFER_LIST. Struktura pofragmentowana odwołuje się do zestawu struktur NET_BUFFER odwołujących się do oryginalnych danych; jednak dane są podzielone na jednostki, które nie przekraczają maksymalnego rozmiaru. Sterowniki mogą używać tego typu struktury do efektywnego dzielenia dużych na mniejsze.
Na poniższej ilustracji przedstawiono relację między strukturą NET_BUFFER_LIST nadrzędną a pofragmentowaną 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 jedną strukturę NET_BUFFER z dołączonymi MDL-ami. Wskaźnik rodzica struktury nadrzędnej ma wartość NULL, wskazując, że nie jest to struktura pochodna.
Struktura NET_BUFFER_LIST podrzędna ma trzy struktury 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 normalnie by się znajdował, wskazuje, że element podrzędny nie ma struktury NET_BUFFER_LIST_CONTEXT.
Sterowniki NDIS wywołają funkcję NdisAllocateFragmentNetBufferList, aby utworzyć nową, fragmentowaną strukturę NET_BUFFER_LIST opartą na danych w istniejącej strukturze NET_BUFFER_LIST. Usługa NDIS przydziela nowe struktury NET_BUFFER i listy MDL dla pofragmentowanej struktury NET_BUFFER_LIST. Funkcja NDIS nie przydziela struktury NET_BUFFER_LIST_CONTEXT dla struktury pofragmentowanej. Struktura NET_BUFFER fragmentu i listy MDL opisują te same dane, co struktura nadrzędna. Dane nie są kopiowane.
NdisAllocateFragmentNetBufferList tworzy fragmenty, począwszy od początku używanej przestrzeni danych w każdej strukturze NET_BUFFER nadrzędnej i przesunięte przez wartość określoną w parametrze StartOffset.
NdisAllocateFragmentNetBufferList dzieli używane miejsce danych w każdej strukturze NET_BUFFER źródłowej na fragmenty. Długość używanej przestrzeni danych każdego fragmentu jest mniejsza lub równa wartości określonej w parametrze MaximumLength. używane miejsce danych ostatniego fragmentu może być mniejsze niż MaximumLength . Przesunięcie danych nowych struktur NET_BUFFER jest cofane przez liczbę bajtów określonych w parametrze DataOffsetDelta.
Jeśli istnieje wiele struktur NET_BUFFER w strukturze nadrzędnej NET_BUFFER_LIST (nie pokazano na ilustracji), proces fragmentowania dla każdej struktury NET_BUFFER jest taki sam jak w przypadku pojedynczej struktury. Jeśli na przykład ostatni element danych w dowolnej strukturze nadrzędnej NET_BUFFER jest mniejszy niż maksymalny rozmiar, usługa NDIS nie łączy takich danych z danymi na początku następnej struktury NET_BUFFER.
Sterowniki NDIS nazywają funkcję NdisFreeFragmentNetBufferList, aby zwolnić strukturę NET_BUFFER_LIST i wszystkie skojarzone struktury NET_BUFFER i łańcuchy MDL, które zostały wcześniej przydzielone przez wywołanie NdisAllocateFragmentNetBufferList.