Megosztás:


Töredezett NET_BUFFER_LIST struktúrák

Az NDIS-illesztőprogramok egy meglévő NET_BUFFER_LIST struktúrából hozhatnak létre töredezett NET_BUFFER_LIST struktúrát. A töredezett struktúra az eredeti adatokra hivatkozó NET_BUFFER struktúrákra hivatkozik; azonban az adatok olyan egységekre vannak osztva, amelyek nem lépik túl a maximális méretet. Az illesztőprogramok ilyen típusú szerkezettel hatékonyan bonthatják fel a nagy puffereket kisebb pufferekre.

Az alábbi ábra egy szülő NET_BUFFER_LIST struktúrája és egy töredezett gyermek közötti kapcsolatot mutatja be.

szülő-NET_BUFFER_LIST struktúra és a töredezett gyermekstruktúra közötti kapcsolatot bemutató diagram.

Az előző ábra egy szülő-NET_BUFFER_LIST struktúrát és egy gyermekstruktúrát tartalmaz, amely az adott szülőből származik. A szülőstruktúra egy NET_BUFFER_LIST_CONTEXT struktúrával és egy NET_BUFFER MDL-kkel rendelkező struktúrával rendelkezik. A szülőstruktúra szülő mutatója NULL, amely azt jelzi, hogy nem származtatott struktúra.

A gyermek NET_BUFFER_LIST szerkezet három NET_BUFFER szerkezettel rendelkezik, amelyekhez MDL-k vannak csatolva. A gyermek NET_BUFFER_LIST struktúrája a szülőszerkezetre mutató mutatóval rendelkezik. A NULL azt jelzi, hogy ahol egy NET_BUFFER_LIST_CONTEXT struktúramutatónak kellene lennie, ott a gyermeknek nincs NET_BUFFER_LIST_CONTEXT struktúrája.

Az NDIS-illesztőprogramok meghívják a NdisAllocateFragmentNetBufferList függvényt egy új töredezett NET_BUFFER_LIST szerkezet létrehozásához, amely egy meglévő NET_BUFFER_LIST struktúrában lévő adatokon alapul. Az NDIS új NET_BUFFER struktúrákat és MDL-ket foglal le a töredezett NET_BUFFER_LIST struktúrához. Az NDIS nem foglal le NET_BUFFER_LIST_CONTEXT struktúrát a töredezett struktúra számára. A töredék NET_BUFFER struktúrák és MDL-k ugyanazokat az adatokat írják le, mint a szülőstruktúra. Az adatok másolása nem történik meg.

NdisAllocateFragmentNetBufferList létrehozza a töredékeket, kezdve a használt adattér minden szülő-NET_BUFFER struktúrában, és eltolást a StartOffset paraméterben megadott értékkel.

NdisAllocateFragmentNetBufferList az egyes forrás-NET_BUFFER struktúrában használt adattér töredékekre osztja. Az egyes töredékek használt adattér hossza kisebb vagy egyenlő a MaximumLength paraméterben megadott értéknél. Az utolsó töredék használt adatterület kisebb lehet, mint MaximumLength. Az új NET_BUFFER struktúrák adateltolását a DataOffsetDelta paraméterben megadott bájtok száma határozza meg.

Ha a szülő-NET_BUFFER_LIST struktúrában több NET_BUFFER szerkezet is található (az ábrán nem látható), az egyes NET_BUFFER szerkezetek töredezettsége megegyezik egyetlen struktúrával. Ha például egy szülő-NET_BUFFER struktúrában az utolsó adat kisebb a maximális méretnél, az NDIS nem egyesíti ezeket az adatokat az adatokkal a következő NET_BUFFER szerkezet elején.

Az NDIS-illesztőprogramok meghívják a NdisFreeFragmentNetBufferList függvényt, hogy felszabadítsa a NET_BUFFER_LIST struktúrát és az összes társított NET_BUFFER struktúrát és MDL-láncot, amelyet korábban a NdisAllocateFragmentNetBufferList meghívásával osztottak ki.

származtatott NET_BUFFER_LIST struktúrák