Sdílet prostřednictvím


Fragmentované struktury NET_BUFFER_LIST

Ovladač NDIS může vytvořit fragmentovanou strukturu NET_BUFFER_LIST z existující struktury NET_BUFFER_LIST. Fragmentovaná struktura odkazuje na sadu NET_BUFFER struktur, které odkazují na původní data; data jsou však rozdělena do jednotek, které nepřekračují maximální velikost. Ovladače mohou tento typ struktury použít k efektivnímu rozdělení velkých vyrovnávacích pamětí do menších vyrovnávacích pamětí.

Následující obrázek znázorňuje vztah mezi nadřazenou NET_BUFFER_LIST strukturou a fragmentovaným podřízeným objektem.

Diagram znázorňující vztah mezi nadřazenou NET_BUFFER_LIST strukturou a její fragmentovanou podřízenou strukturou

Předchozí obrázek obsahuje nadřazenou strukturu NET_BUFFER_LIST a podřízenou strukturu, která byla odvozená z této nadřazené struktury. Nadřazená struktura má jednu NET_BUFFER_LIST_CONTEXT strukturu a jednu NET_BUFFER strukturu s připojenými MDL. Nadřazený ukazatel struktury je NULL, což značí, že se nejedná o odvozenou strukturu.

Podřízená NET_BUFFER_LIST struktura má tři NET_BUFFER struktury s připojenými seznamy MDLS. Podřízená NET_BUFFER_LIST struktura má ukazatel na nadřazenou strukturu. NULL znamená, že ukazatel struktury NET_BUFFER_LIST_CONTEXT by naznačoval, že dítě nemá žádnou strukturu NET_BUFFER_LIST_CONTEXT.

Ovladače NDIS volají funkci NdisAllocateFragmentNetBufferList k vytvoření nové fragmentované NET_BUFFER_LIST struktury založené na datech v existující struktuře NET_BUFFER_LIST. NDIS přiděluje nové struktury NET_BUFFER a mdls pro fragmentovanou strukturu NET_BUFFER_LIST. NDIS nepřiděluje NET_BUFFER_LIST_CONTEXT strukturu pro fragmentovanou strukturu. Fragment NET_BUFFER struktury a knihovny MDLS popisují stejná data jako nadřazená struktura. Data se nekopírují.

NdisAllocateFragmentNetBufferList vytvoří fragmenty počínaje začátkem využitého datového prostoru v každé nadřazené NET_BUFFER struktuře a posunu hodnotou zadanou v parametru StartOff set.

NdisAllocateFragmentNetBufferList rozdělí využité datové místo ve všech zdrojových NET_BUFFER strukturách do fragmentů. Délka využitého datového prostoru každého fragmentu je menší nebo rovna hodnotě zadané v parametru MaximumLength. využité datové místo posledního fragmentu může být menší než MaximumLength . Posun dat nových NET_BUFFER struktur je ustupován počtem bajtů zadaných v parametru DataOffsetDelta.

Pokud je v nadřazené NET_BUFFER_LIST struktuře více NET_BUFFER struktur (není znázorněno na obrázku), je proces fragmentování pro každou strukturu NET_BUFFER stejný jako u jedné struktury. Pokud je například poslední část dat v jakékoli nadřazené NET_BUFFER struktuře menší než maximální velikost, NDIS tato data nekombinuje s daty na začátku další NET_BUFFER struktury.

Ovladače NDIS volají funkci NdisFreeFragmentNetBufferList, která uvolní strukturu NET_BUFFER_LIST a všechny přidružené struktury NET_BUFFER a řetězce MDL, které byly dříve přiděleny voláním NdisAllocateFragmentNetBufferList.

Odvozené struktury NET_BUFFER_LIST