Condividi tramite


struttura NET_BUFFER (ndis/nbl.h)

La struttura NET_BUFFER specifica i dati trasmessi o ricevuti in rete.

Sintassi

typedef struct _NET_BUFFER {
  union {
    struct {
      NET_BUFFER *Next;
      MDL        *CurrentMdl;
      ULONG      CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      MDL        *MdlChain;
      ULONG      DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT           ChecksumBias;
  USHORT           Reserved;
  NDIS_HANDLE      NdisPoolHandle;
  PVOID            NdisReserved[2];
  PVOID            ProtocolReserved[6];
  PVOID            MiniportReserved[4];
  PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    NET_BUFFER_SHARED_MEMORY *SharedMemoryInfo;
    SCATTER_GATHER_LIST      *ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

Membri

Next

Puntatore alla struttura NET_BUFFER successiva in un elenco collegato di strutture NET_BUFFER. Se questa struttura è l'ultima struttura NET_BUFFER nell'elenco, questo membro è NULL.

CurrentMdl

Puntatore al primo MDL usato dal driver corrente. Questo membro fornisce un'ottimizzazione che migliora le prestazioni ignorando tutti gli ELENCHI MDL non usati dal driver corrente.

CurrentMdlOffset

Offset, in byte, all'inizio del utilizzato spazio dati nel file MDL specificato dal membro CurrentMdl.

DataLength

Lunghezza, in byte, dello spazio dati utilizzato nella catena MDL. La lunghezza massima è 0xFFFFFFFF byte.

stDataLength

Lunghezza, in byte, dello spazio dati utilizzato nella catena MDL. La lunghezza massima è 0xFFFFFFFF byte. Questo membro è uguale a DataLength, ma il relativo tipo è SIZE_T anziché ULONG.

MdlChain

Puntatore a un elenco collegato di dll che eseguono il mapping di un buffer di dati. Il buffer di dati archivia i dati di rete.

DataOffset

Offset, in byte, dall'inizio della catena MDL all'inizio dei dati di rete nella catena MDL. Questo offset è anche la dimensione, in byte, dello spazio dati inutilizzato .

Link

Riservato per NDIS.

NetBufferHeader

Struttura NET_BUFFER_HEADER. Si tratta di un duplicato dell'unione precedente, per motivi di compatibilità.

ChecksumBias

Numero di byte da ignorare dall'inizio del buffer di dati durante il calcolo di un checksum. Questo membro viene utilizzato dal protocollo TCP/IP.

Reserved

Riservato per uso futuro.

NdisPoolHandle

Handle del pool che identifica il pool di NET_BUFFER da cui è stata allocata la struttura NET_BUFFER.

NdisReserved[2]

Riservato per NDIS.

ProtocolReserved[6]

Riservato per l'uso da parte dei driver di protocollo. I driver di protocollo e i driver intermedi NDIS possono usare questa area ai propri scopi. I driver intermedi possono usare questo membro solo se non è già in uso.

MiniportReserved[4]

Riservato per l'uso da parte dei driver miniport. I driver miniport e i driver intermedi NDIS possono usare questa area a proprio scopo.

DataPhysicalAddress

Nota Il nome di questo membro è NdisReserved1 per i driver NDIS 6.0 ed è dataphysicalAddress per i driver NDIS 6.1 e versioni successive. Per i driver NDIS 6.0, questo membro è riservato per NDIS.
 
Indirizzo fisico della parte dati di un frame. Questo membro deve essere pari a zero se il driver allocato NET_BUFFER non specifica l'indirizzo. Questo membro è valido solo se il flag NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER o NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD è impostato nel membro NblFlags della struttura NET_BUFFER_LIST associata al NET_BUFFER.
Nota un driver miniport può impostare il DataPhysicalAddress membro della struttura NET_BUFFER, anche se la struttura non è associata a un frame diviso. In questo caso, DataPhysicalAddress contiene l'indirizzo fisico dell'intestazione MDL.
 

SharedMemoryInfo

Puntatore a un oggetto NET_BUFFER_SHARED_MEMORY struttura.

ScatterGatherList

La struttura SCATTER_GATHER_LIST descrive un elenco a dispersione/raccolta per DMA.

Osservazioni

I driver NDIS possono chiamare le funzioni seguenti per allocare e inizializzare una struttura NET_BUFFER:

I driver NDIS possono chiamare il funzione NdisAllocateNetBufferListPool e quindi impostare il membro fAllocateNetBuffer della struttura NET_BUFFER_LIST_POOL_PARAMETERS su TRUE durante l'allocazione di un pool di strutture NET_BUFFER_LIST. In questo caso, una struttura NET_BUFFER viene preallocata con ogni struttura NET_BUFFER_LIST allocata dal driver dal pool.

Concatenati a ogni struttura NET_BUFFER sono uno o più descrittori di buffer che eseguono il mapping dei buffer che contengono dati del pacchetto di rete. Questi descrittori del buffer vengono specificati come catena MDL nel membro NetBufferHeader. Tali dati dei pacchetti di rete sono stati ricevuti o verranno trasmessi.

Per accedere a spazio dati aggiuntivo nella catena MDL, i driver NDIS possono chiamare le funzioni seguenti:

I driver NDIS usano in genere i MiniportReserved o i membri ProtocolReserved della struttura di NET_BUFFER per mantenere le informazioni sul contesto della struttura di NET_BUFFER.
Nota solo un driver può usare MiniportReserved o Membri ProtocolReserved. Pertanto, se uno di questi membri è stato usato da un altro driver, un driver intermedio non può usarli.
 
Per accedere ai membri della struttura NET_BUFFER, utilizzare le macro e le funzioni seguenti:

NET_BUFFER_NEXT_NB

NET_BUFFER_FIRST_MDL

NET_BUFFER_DATA_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_PROTOCOL_RESERVED

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NdisGetPoolFromNetBuffer

Per altre informazioni su come usare i net buffer, vedere NET_BUFFER Architecture.

Fabbisogno

Requisito Valore
client minimo supportato Supportato in NDIS 6.0 e versioni successive.
intestazione ndis/nbl.h (include ndis.h)

Vedere anche

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_DATA_OFFSET

NET_BUFFER_FIRST_MDL

NET_BUFFER_HEADER

NET_BUFFER_LIST

NET_BUFFER_LIST_POOL_PARAMETERS

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_NEXT_NB

NET_BUFFER_PROTOCOL_RESERVED

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool

NdisGetPoolFromNetBuffer

NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart

SCATTER_GATHER_LIST