Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
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.