Dela via


Avancerade åtgärder

Avancerade åtgärder minskar storleken på det använda datautrymmet i en NET_BUFFER struktur eller i alla NET_BUFFER strukturer i en NET_BUFFER_LIST struktur.

Drivrutiner använder följande avancerade funktioner:

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

Avancerade åtgärder kan ibland frigöra MDL:er som är associerade med en NET_BUFFER struktur. För att tillhandahålla mekanismen för att frigöra MDL:er kan en drivrutin tillhandahålla en valfri startpunkt för en NetFreeMdl-funktion . Om startpunkten är NULL-använder NDIS en standardmetod för att allokera MDL:er. MDL får endast frigöras i en NetFreeMdl med den motsvarande mekanismen som användes för att allokera MDL i funktionen NetAllocateMdl.

För att erhålla den nya DataLength subtraherar NDIS den av drivrutinen angivna DataOffsetDelta från den aktuella DataLength. Om en tidigare reträttåtgärd allokerade nytt datautrymme kan förflyttningsåtgärden frigöra sådant tidigare allokerat minne. Om en förhandsåtgärd inte frigör minne lägger NDIS helt enkelt till DataOffsetDelta i den aktuella DataOffset för att hämta den nya DataOffset . Om förflyttningsåtgärden frigör minne justerar NDIS DataOffset i enlighet med detta.

För det fullständiga sändningsfallet kan framåtskridande åtgärder frigöra minne som allokerats i tidigare tillbakadragningsåtgärder. För bättre prestanda bör drivrutiner allokera tillräckligt med total datamängd innan de skickas iväg för att hantera tillbakadragaroperationerna för alla underliggande drivrutiner.

För indikeringsfallet för mottagning justerar avancerade åtgärder helt enkelt DataOffset och DataLength i enlighet med detta. Efter förflyttningsåtgärden finns rubrikerna i de lägre lagren kvar i det oanvända datautrymmet.