Struttura NET_BUFFER
Le strutture NDIS 6.0 e successive NET_BUFFER sono analoghe alle strutture NDIS_PACKET usate da NDIS 5. x e precedenti driver. Ogni struttura NET_BUFFER crea un pacchetto di dati di rete.
Nella figura seguente vengono illustrati i campi in una struttura NET_BUFFER.
La struttura NET_BUFFER include una struttura NET_BUFFER_HEADER nel membro NetBufferHeader . La struttura NET_BUFFER_HEADER include una struttura NET_BUFFER_DATA nel membro NetBufferData . È consigliabile utilizzare macro NDIS per accedere ai membri della struttura NET_BUFFER. Per un elenco completo di queste macro, vedere la pagina di riferimento della struttura NET_BUFFER .
Alcuni membri della struttura NET_BUFFER vengono usati solo da NDIS. I membri usati in genere dai driver sono:
ProtocolReserved
Riservato per l'uso da parte dei driver di protocollo.
MiniportReserved
Riservato per l'uso da parte dei driver miniport.
NdisPoolHandle
Specifica un handle del pool che identifica il pool di NET_BUFFER da cui è stata allocata la struttura NET_BUFFER.
Prossimo
Specifica un puntatore alla struttura NET_BUFFER successiva in un elenco collegato di strutture NET_BUFFER. Se si tratta dell'ultima struttura NET_BUFFER nell'elenco, questo membro è NULL.
Datalength
Specifica la lunghezza in byte dei dati di rete nella catena MDL.
DataOffset
Specifica l'offset, in byte, dall'inizio della memoria nella catena MDL all'inizio dei dati di rete nella catena MDL.
CurrentMdl
Specifica un puntatore al primo MDL utilizzato dal driver corrente. Questo puntatore fornisce un'ottimizzazione che migliora le prestazioni ignorando gli MDL che il driver corrente non usa.
CurrentMdlOffset
Specifica l'offset, in byte, all'inizio dello spazio dati utilizzato nel file MDL specificato dal membro CurrentMdl della struttura NET_BUFFER.
Nella figura seguente viene illustrata la relazione tra i membri CurrentMdl, CurrentMdlOffset, DataOffset e DataLength e lo spazio dati.
NDIS fornisce funzioni per gestire lo spazio dati nella catena MDL. Il modo in cui i driver usano lo spazio dati cambia in modo dinamico con il driver corrente. In alcuni casi è presente spazio dati attualmente inutilizzato dal driver corrente. Anche se lo spazio dati inutilizzato è attualmente inutilizzato, può contenere dati validi. Ad esempio, nel percorso di ricezione, lo spazio dati inutilizzato può contenere informazioni di intestazione usate da un driver di livello inferiore.
I driver eseguono operazioni di ritiro e avanzamento per aumentare e ridurre lo spazio dati usato. Per altre informazioni sulle operazioni di ritiro e di avanzamento, vedere Ritiro e operazioni avanzate.
I termini e le definizioni seguenti descrivono gli elementi dello spazio dati NET_BUFFER :
Spazio dati usato
Lo spazio dati usato contiene dati usati dal driver corrente al momento corrente. I driver aumentano lo spazio dati usato con operazioni di ritiro e riducono lo spazio dati usato con operazioni avanzate.
Spazio dati inutilizzato
Il driver corrente non usa questo spazio dati al momento corrente.
Dimensioni totali dei dati
Le dimensioni totali dei dati sono la somma delle dimensioni dello spazio dati usato e dello spazio dati inutilizzato. Per calcolare le dimensioni totali, aggiungere DataOffset a DataLength .
Ritiro
Le operazioni di ritiro aumentano le dimensioni dello spazio dati usato.
Anticipo
Le operazioni avanzate riducono le dimensioni dello spazio dati usato.