NET_BUFFER struttura (ndis/nbl.h)

La struttura NET_BUFFER specifica i dati trasmessi o ricevuti sulla 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;

Members

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 eventuali MDLs che il driver corrente non usa.

CurrentMdlOffset

Offset, in byte, all'inizio dello spazio dati usato nell'MDL specificato dal membro CurrentMdl .

DataLength

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

stDataLength

Lunghezza, in byte, dello spazio dati usato 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 MDLs che esegue il mapping di un buffer di dati. Il buffer dei 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 usato dal protocollo TCP/IP.

Reserved

Riservato per utilizzi futuri.

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 a scopo personale. 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 scopo personale.

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 NblFlagsdella struttura NET_BUFFER_LIST associata all'NET_BUFFER.
Nota Un driver miniport può impostare il membro DataPhysicalAddress della struttura NET_BUFFER, anche se la struttura non è associata a un frame di divisione. 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.

Commenti

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

I driver NDIS possono chiamare 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 che il driver alloca dal pool.

Concatenati a ogni struttura NET_BUFFER sono uno o più descrittori buffer che mappano i 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 trasmessi.

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

I driver NDIS usano in genere i membri miniportReserved o ProtocolReserved della struttura NET_BUFFER per mantenere le informazioni sul contesto della struttura NET_BUFFER.
Nota Solo un driver può usare i membri MiniportReserved o ProtocolReserved . Pertanto, se un altro driver ha usato uno di questi membri, un driver intermedio non può usarli.
 
Per accedere ai membri della struttura NET_BUFFER, usare 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 buffer net, vedere architettura NET_BUFFER.

Requisiti

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

Vedi 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