Operazioni di ritiro

Le operazioni di ritiro possono aumentare le dimensioni dello spazio dati utilizzato in una struttura di NET_BUFFER o in tutte le strutture NET_BUFFER in una struttura NET_BUFFER_LIST .

NDIS fornisce le funzioni di ritiro seguenti:

NdisRetreatNetBufferDataStart

NdisRetreatNetBufferListDataStart

Le operazioni di ritiro possono talvolta allocare mdl associati a una struttura di NET_BUFFER. Per fornire il meccanismo per l'allocazione di mdls, un driver può fornire un punto di ingresso facoltativo per una funzione NetAllocateMdl . Se il punto di ingresso è NULL, NDIS usa un metodo predefinito per allocare mdls. Gli mdls devono essere liberati all'interno di una funzione NetFreeMdl che fornisce il reciproco del meccanismo usato per allocare il file MDL.

Per ottenere il nuovo Oggetto DataLength, NDIS aggiunge il driver Specificato dal driver DataOffsetDelta all'oggetto DataLength corrente. Se le dimensioni dello spazio dati inutilizzato sono maggiori di DataOffsetDelta, un'operazione di ritiro riduce l'oggetto DataOffset . In questo caso, il nuovo DataOffset è l'oggetto DataOffset corrente meno DataOffsetDelta .

Se DataOffsetDelta è maggiore di DataOffset, un'operazione di ritiro alloca nuovo spazio dati. In questo caso, NDIS regola l'oggetto DataOffset di conseguenza.

Per le operazioni di invio, NDIS alloca memoria se lo spazio dati inutilizzato non è sufficiente per soddisfare una richiesta di ritiro. Se non è necessaria alcuna allocazione di memoria, NDIS regola semplicemente DataOffset e DataLength . Per prestazioni migliori, i driver devono allocare sufficienti dimensioni totali dei dati prima dell'invio per supportare le operazioni di ritiro di tutti i driver sottostanti.

Per il caso di restituzione della ricezione, NDIS regola semplicemente DataOffset e DataLength di conseguenza. L'operazione di ritiro inverte l'operazione di avanzamento eseguita durante l'elaborazione della ricezione. Dopo l'operazione di ritiro, lo spazio dati utilizzato contiene i dati di intestazione usati dai driver sottostanti durante l'elaborazione della ricezione.