NET_BUFFER structure (ndis/nbl.h)

La structure NET_BUFFER spécifie les données qui sont transmises ou reçues sur le réseau.

Syntaxe

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;

Membres

Next

Pointeur vers la structure NET_BUFFER suivante dans une liste liée de structures NET_BUFFER. Si cette structure est la dernière structure NET_BUFFER de la liste, ce membre a la valeur NULL.

CurrentMdl

Pointeur vers la première MDL que le pilote actuel utilise. Ce membre fournit une optimisation qui améliore les performances en ignorant toutes les DLL que le pilote actuel n’utilise pas.

CurrentMdlOffset

Décalage, en octets, au début de l’espace de données utilisé dans la MDL spécifiée par le membre CurrentMdl .

DataLength

Longueur, en octets, de l’espace de données utilisé dans la chaîne MDL. La longueur maximale est 0xFFFFFFFF octets.

stDataLength

Longueur, en octets, de l’espace de données utilisé dans la chaîne MDL. La longueur maximale est 0xFFFFFFFF octets. Ce membre est identique à DataLength, mais son type est SIZE_T au lieu de ULONG.

MdlChain

Pointeur vers une liste liée de FICHIERS MDL qui mappent une mémoire tampon de données. La mémoire tampon de données stocke les données réseau.

DataOffset

Décalage, en octets, du début de la chaîne MDL au début des données réseau dans la chaîne MDL. Ce décalage est également la taille, en octets, de l’espace de données inutilisé.

Link

Réservé pour NDIS.

NetBufferHeader

Structure NET_BUFFER_HEADER . Il s’agit d’un doublon de l’union ci-dessus, pour des raisons de compatibilité.

ChecksumBias

Nombre d’octets à ignorer à partir du début de la mémoire tampon de données lors du calcul d’une somme de contrôle. Ce membre est utilisé par le protocole TCP/IP.

Reserved

Réservé pour un usage futur.

NdisPoolHandle

Handle de pool qui identifie le pool de NET_BUFFER à partir duquel la structure NET_BUFFER a été allouée.

NdisReserved[2]

Réservé pour NDIS.

ProtocolReserved[6]

Réservé à une utilisation par les pilotes de protocole. Les pilotes de protocole et les pilotes intermédiaires NDIS peuvent utiliser cette zone à leurs propres fins. Les pilotes intermédiaires peuvent utiliser ce membre uniquement s’il n’est pas déjà utilisé.

MiniportReserved[4]

Réservé à l’utilisation par les pilotes de miniport. Les pilotes miniport et les pilotes intermédiaires NDIS peuvent utiliser cette zone à leurs propres fins.

DataPhysicalAddress

Note Le nom de ce membre est NdisReserved1 pour les pilotes NDIS 6.0 et est DataPhysicalAddress pour les pilotes NDIS 6.1 et ultérieur. Pour les pilotes NDIS 6.0, ce membre est réservé à NDIS.
 
Adresse physique de la partie données d’un frame. Ce membre doit être égal à zéro si le pilote qui a alloué NET_BUFFER ne spécifie pas l’adresse. Ce membre est valide uniquement si l’indicateur NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER ou NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD est défini dans le membre NblFlags de la structure NET_BUFFER_LIST associée à l’NET_BUFFER.
Note Un pilote miniport peut définir le membre DataPhysicalAddress de la structure NET_BUFFER, même si la structure n’est pas associée à un frame fractionné. Dans ce cas, DataPhysicalAddress contient l’adresse physique de l’en-tête MDL.
 

SharedMemoryInfo

Pointeur vers un NET_BUFFER_SHARED_MEMORY structure.

ScatterGatherList

La structure SCATTER_GATHER_LIST décrit une liste de points/regroupements pour DMA.

Remarques

Les pilotes NDIS peuvent appeler les fonctions suivantes pour allouer et initialiser une structure NET_BUFFER :

Les pilotes NDIS peuvent appeler le Fonction NdisAllocateNetBufferListPool , puis définissez le membre fAllocateNetBuffer de la structure NET_BUFFER_LIST_POOL_PARAMETERS sur TRUE lors de l’allocation d’un pool de structures NET_BUFFER_LIST . Dans ce cas, une structure NET_BUFFER est préallouée avec chaque structure NET_BUFFER_LIST que le pilote alloue à partir du pool.

Chaînés à chaque structure NET_BUFFER sont un ou plusieurs descripteurs de mémoire tampon qui mappent des mémoires tampons qui contiennent des données de paquets réseau. Ces descripteurs de mémoire tampon sont spécifiés en tant que chaîne MDL dans le membre NetBufferHeader . Ces données de paquets réseau ont été reçues ou seront transmises.

Pour accéder à un espace de données supplémentaire dans la chaîne MDL, les pilotes NDIS peuvent appeler les fonctions suivantes :

Les pilotes NDIS utilisent généralement les membres MiniportReserved ou ProtocolReserved de la structure NET_BUFFER pour conserver NET_BUFFER informations de contexte de structure.
Note Un seul pilote peut utiliser les membres MiniportReserved ou ProtocolReserved . Par conséquent, si un autre pilote a utilisé l’un de ces membres, un pilote intermédiaire ne peut pas les utiliser.
 
Pour accéder aux membres de la structure NET_BUFFER, utilisez les macros et fonctions suivantes :

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

Pour plus d’informations sur l’utilisation des mémoires tampons réseau, consultez architecture NET_BUFFER.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge dans NDIS 6.0 et versions ultérieures.
En-tête ndis/nbl.h (include ndis.h)

Voir aussi

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