Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En NDIS-drivrutin kan skapa en fragmenterad NET_BUFFER_LIST struktur från en befintlig NET_BUFFER_LIST struktur. Den fragmenterade strukturen refererar till en uppsättning NET_BUFFER strukturer som refererar till ursprungliga data. Data är dock indelade i enheter som inte överskrider en maximal storlek. Drivrutiner kan använda den här typen av struktur för att effektivt dela upp stora buffertar i mindre buffertar.
Följande bild visar relationen mellan en överordnad NET_BUFFER_LIST struktur och ett fragmenterat underordnat objekt.
Föregående bild innehåller en överordnad NET_BUFFER_LIST struktur och en underordnad struktur som härleddes från den överordnade bilden. Den överordnade strukturen har en NET_BUFFER_LIST_CONTEXT struktur och en NET_BUFFER struktur med MDL:er kopplade. Den överordnade strukturens överordnade pekare är NULL- som anger att den inte är en härledd struktur.
Den underordnade NET_BUFFER_LIST strukturen har tre NET_BUFFER strukturer med MDL:er anslutna. Den underordnade NET_BUFFER_LIST struktur har en pekare till den överordnade strukturen. Den NULL- där en NET_BUFFER_LIST_CONTEXT strukturpekare skulle vara anger att det underordnade objektet inte har någon NET_BUFFER_LIST_CONTEXT struktur.
NDIS-drivrutiner anropar funktionen NdisAllocateFragmentNetBufferList för att skapa en ny fragmenterad NET_BUFFER_LIST struktur som baseras på data i en befintlig NET_BUFFER_LIST struktur. NDIS allokerar nya NET_BUFFER strukturer och MDL:er för den fragmenterade NET_BUFFER_LIST strukturen. NDIS allokerar inte en NET_BUFFER_LIST_CONTEXT struktur för den fragmenterade strukturen. Fragmentet NET_BUFFER strukturer och MDL:er beskriver samma data som den överordnade strukturen. Data kopieras inte.
NdisAllocateFragmentNetBufferList skapar fragmenten från början av använt datautrymme i varje överordnad NET_BUFFER struktur och förskjuts av värdet som anges i parametern StartOffset.
NdisAllocateFragmentNetBufferList delar upp använt datautrymme i varje käll NET_BUFFER struktur i fragment. Längden på använt datautrymme för varje fragment är mindre än eller lika med det värde som anges i parametern MaximumLength. Det använda datautrymmet för det sista fragmentet kan vara mindre än MaximumLength . Dataförskjutningen för de nya NET_BUFFER strukturerna dras tillbaka av antalet byte som anges i parametern DataOffsetDelta.
Om det finns flera NET_BUFFER strukturer i den överordnade NET_BUFFER_LIST strukturen (visas inte i bilden) är fragmenteringsprocessen för varje NET_BUFFER struktur densamma som för en enda struktur. Om till exempel den sista delen av data i en överordnad NET_BUFFER struktur är mindre än den maximala storleken, kombinerar NDIS inte sådana data med data i början av nästa NET_BUFFER struktur.
NDIS-drivrutiner anropar funktionen NdisFreeFragmentNetBufferList för att frigöra en NET_BUFFER_LIST struktur och alla associerade NET_BUFFER strukturer och MDL-kedjor som tidigare allokerats genom att anropa NdisAllocateFragmentNetBufferList.