Partager via


structure NET_BUFFER_LIST (ndis/nbl.h)

La structure NET_BUFFER_LIST spécifie une liste liée de structures NET_BUFFER .

Syntaxe

typedef struct _NET_BUFFER_LIST {
  union {
    struct {
      NET_BUFFER_LIST *Next;
      NET_BUFFER      *FirstNetBuffer;
    };
    SLIST_HEADER           Link;
    NET_BUFFER_LIST_HEADER NetBufferListHeader;
  };
  NET_BUFFER_LIST_CONTEXT *Context;
  NET_BUFFER_LIST         *ParentNetBufferList;
  NDIS_HANDLE             NdisPoolHandle;
  PVOID                   NdisReserved[2];
  PVOID                   ProtocolReserved[4];
  PVOID                   MiniportReserved[2];
  PVOID                   Scratch;
  NDIS_HANDLE             SourceHandle;
  ULONG                   NblFlags;
  LONG                    ChildRefCount;
  ULONG                   Flags;
  union {
    NDIS_STATUS Status;
    ULONG       NdisReserved2;
  };
  PVOID                   NetBufferListInfo[MaxNetBufferListInfo];
} NET_BUFFER_LIST, *PNET_BUFFER_LIST;

Membres

Next

La structure NET_BUFFER_LIST suivante dans la chaîne.

Les pilotes ne doivent pas accéder directement à ce membre. Au lieu de cela, ils doivent appeler la macro NET_BUFFER_LIST_NEXT_NBL .

FirstNetBuffer

La première NET_BUFFER sur ce NET_BUFFER_LIST.

Les pilotes ne doivent pas accéder directement à ce membre. Au lieu de cela, ils doivent appeler la macro NET_BUFFER_LIST_FIRST_NB .

Link

Réservé pour NDIS.

NetBufferListHeader

Structure NET_BUFFER_LIST_HEADER .

Context

Pointeur vers une structure NET_BUFFER_LIST_CONTEXT . Les pilotes de protocole et de miniport utilisent cette structure pour stocker des informations sur la structure NET_BUFFER_LIST. Les informations stockées dans la structure NET_BUFFER_LIST_CONTEXT sont opaques pour NDIS et d’autres pilotes de la pile.

Utilisez les fonctions et macros suivantes pour accéder aux données dans la structure NET_BUFFER_LIST_CONTEXT :

NdisAllocateNetBufferListContext NdisFreeNetBufferListContext NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZE

ParentNetBufferList

Si cette structure NET_BUFFER_LIST est un clone d’une autre structure NET_BUFFER_LIST, ce membre spécifie un pointeur vers la structure NET_BUFFER_LIST parente. Sinon, ce paramètre est NULL. Un pilote utilise le Fonction NdisAllocateCloneNetBufferList pour créer un clone.

NdisPoolHandle

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

NdisReserved[2]

Réservé à l’utilisation par NDIS.

ProtocolReserved[4]

Réservé à une utilisation par les pilotes de protocole.

MiniportReserved[2]

Réservé à l’utilisation par les pilotes de miniport.

Scratch

Données définies par le propriétaire actuel de la structure NET_BUFFER_LIST. Le propriétaire actuel, NDIS ou un pilote NDIS, peut utiliser ce membre à ses propres fins. Lorsque la structure NET_BUFFER_LIST est initialement allouée, ce membre a la valeur NULL. Une fois que le propriétaire actuel a renoncé à la propriété, NDIS ou un autre pilote peut remplacer ce membre.

SourceHandle

Handle fourni par NDIS au pilote dans une opération de liaison ou d’attachement à l’aide de l’une des routines fournies par le pilote suivantes :

Pilote miniport

MiniportInitializeEx

Pilote de protocole

ProtocolBindAdapterEx

Pilote de filtre

FilterAttach

NDIS utilise SourceHandle pour renvoyer la structure NET_BUFFER_LIST au pilote qui a envoyé la structure NET_BUFFER_LIST.

NblFlags

Ce membre contient des indicateurs qui peuvent être combinés avec une opération OR au niveau du bit.

Utilisez les macros NdisTestNblFlag, NdisTestNblFlags, NdisSetNblFlag et NdisClearNblFlag pour accéder aux indicateurs.

Les pilotes intermédiaires et les pilotes de filtre peuvent définir les indicateurs suivants s’ils ne modifient pas les données associées à un NET_BUFFER_LIST. Par exemple, si les données n’ont pas changé, NDIS peut réutiliser les informations d’origine à partir desquelles le NET_BUFFER_LIST a été créé.

NDIS_NBL_FLAGS_SEND_READ_ONLY

Si elle est définie, la structure NET_BUFFER_LIST et ses données sont en lecture seule pour les opérations d’envoi.

NDIS_NBL_FLAGS_RECV_READ_ONLY

Si elle est définie, la structure NET_BUFFER_LIST et ses données sont en lecture seule pour les opérations de réception.

Un pilote peut définir les indicateurs suivants même s’il ne fractionne pas le frame Ethernet associé :

NDIS_NBL_FLAGS_IS_IPV4

Toutes les trames Ethernet de cette structure NET_BUFFER_LIST sont des trames IPv4. Si cet indicateur est défini, le fournisseur de fractionnement d’en-tête-données ne doit pas définir l’indicateur NDIS_NBL_FLAGS_IS_IPV6.

NDIS_NBL_FLAGS_IS_IPV6

Toutes les trames Ethernet de cette structure NET_BUFFER_LIST sont des trames IPv6. Si cet indicateur est défini, le fournisseur de fractionnement d’en-tête-données ne doit pas définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4.

NDIS_NBL_FLAGS_IS_TCP

Toutes les trames Ethernet de cette structure NET_BUFFER_LIST sont des trames TCP. Si cet indicateur est défini, le fournisseur de fractionnement d’en-tête-données ne doit pas définir l’indicateur NDIS_NBL_FLAGS_IS_UDP et le fournisseur doit définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur NDIS_NBL_FLAGS_IS_IPV6.

NDIS_NBL_FLAGS_IS_UDP

Toutes les trames Ethernet de cette structure NET_BUFFER_LIST sont des trames UDP. Si cet indicateur est défini, le fournisseur de fractionnement d’en-tête-données ne doit pas définir l’indicateur de NDIS_NBL_FLAGS_IS_TCP et le fournisseur doit définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur NDIS_NBL_FLAGS_IS_IPV6.

NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET

Tous les paquets associés à cette structure NET_BUFFER_LIST sont des paquets de bouclage.

Si le fournisseur de fractionnement d’en-tête-données ne fractionne pas le frame Ethernet associé, le pilote miniport doit indiquer la structure NET_BUFFER_LIST avec les indicateurs suivants effacés :

NDIS_NBL_FLAGS_HD_SPLIT

L’en-tête et les données sont fractionnées dans toutes les trames Ethernet associées à cette structure NET_BUFFER_LIST.

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER

Toutes les trames Ethernet de cette NET_BUFFER_LIST sont fractionnées au début de l’en-tête de protocole de couche supérieure. Si cet indicateur est défini, le fournisseur de fractionnement d’en-tête-données doit définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur NDIS_NBL_FLAGS_IS_IPV6. En outre, le fournisseur peut définir l’indicateur NDIS_NBL_FLAGS_IS_TCP ou l’indicateur NDIS_NBL_FLAGS_IS_UDP, mais il ne doit pas définir l’indicateur NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD.

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD

Toutes les trames Ethernet de cette structure NET_BUFFER_LIST sont fractionnées au début de la charge utile TCP ou UDP. Si cet indicateur est défini, le fournisseur de fractionnement d’en-tête-données doit définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur NDIS_NBL_FLAGS_IS_IPV6. En outre, le fournisseur doit définir l’indicateur NDIS_NBL_FLAGS_IS_TCP ou l’indicateur NDIS_NBL_FLAGS_IS_UDP, mais pas l’indicateur NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER.

ChildRefCount

Si cette structure NET_BUFFER_LIST a des clones (est un parent), ce membre spécifie le nombre de clones en attente. Sinon, ce membre est égal à zéro.

Flags

Attributs de la structure NET_BUFFER_LIST. Les définitions suivantes spécifient un masque de bits pour un ensemble d’indicateurs :

NBL_FLAGS_PROTOCOL_RESERVED

Cet ensemble est réservé aux pilotes de protocole.

Note À compter de NDIS 6.30, deux bits supplémentaires sont disponibles pour l’utilisation du protocole : 0x00000003. Un protocole NDIS 6.30 peut utiliser ces bits si et seulement si NdisGetVersion retourne une valeur supérieure ou égale à NDIS_RUNTIME_VERSION_630. Les protocoles ne doivent pas utiliser ces bits sur les versions antérieures de NDIS, car avant la version 6.30, NDIS les utilise en interne.
 

NBL_FLAGS_MINIPORT_RESERVED

Cet ensemble est réservé aux pilotes miniport.

NBL_FLAGS_SCRATCH

Le propriétaire actuel de la structure NET_BUFFER_LIST, NDIS ou un pilote NDIS, peut utiliser cet ensemble. Lorsque le propriétaire actuel abandonne la propriété, NDIS ou un autre pilote peut remplacer ces indicateurs.

NBL_FLAGS_NDIS_RESERVED

Cet ensemble est réservé à NDIS.

Status

Achèvement final status d’une opération de données réseau sur cette structure NET_BUFFER_LIST. Les pilotes miniport écrivent cette valeur avant d’appeler le Fonction NdisMSendNetBufferListsComplete . Les pilotes miniport spécifient l’une des valeurs suivantes :

NDIS_STATUS_SUCCESS

Toutes les données réseau décrites par NET_BUFFER structures associées à cette structure NET_BUFFER_LIST ont été transmises avec succès sur le réseau.

NDIS_STATUS_INVALID_LENGTH

La taille des données dans certaines structures NET_BUFFER associées à cette structure NET_BUFFER_LIST était trop grande pour la carte réseau sous-jacente.

NDIS_STATUS_RESOURCES

La demande d’envoi de cette structure NET_BUFFER_LIST a échoué en raison de ressources insuffisantes.

NDIS_STATUS_FAILURE

Cette demande d’envoi pour cette structure NET_BUFFER_LIST a échoué pour une raison autre que celles indiquées dans les trois valeurs précédentes.

NDIS_STATUS_SEND_ABORTED

NDIS a appelé la fonction MiniportCancelSend pour annuler l’opération d’envoi de cette structure NET_BUFFER_LIST.

NDIS_STATUS_RESET_IN_PROGRESS

Le pilote miniport a abandonné la demande d’envoi en raison d’une réinitialisation.

NDIS_STATUS_PAUSED

Si un pilote doit rejeter les demandes d’envoi parce qu’il est suspendu, il définit la status complète dans chaque NET_BUFFER_LIST affectée pour NDIS_STATUS_PAUSED.

NdisReserved2

Réservé à NDIS.

NetBufferListInfo[MaxNetBufferListInfo]

Tableau de valeurs contenant des informations communes à toutes les structures NET_BUFFER de la liste. Ces informations sont souvent appelées « données hors bande (OOB) ».

Utilisez le NDIS_NET_BUFFER_LIST_INFO valeurs d’énumération avec la macro NET_BUFFER_LIST_INFO pour définir et obtenir des valeurs dans le tableau NetBufferListInfo .

Remarques

Les pilotes NDIS peuvent appeler l’une des fonctions suivantes pour allouer et initialiser une structure NET_BUFFER_LIST :

NdisAllocateNetBufferList

NdisAllocateNetBufferAndNetBufferList NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateReassembledNetBufferList

Toutes les structures NET_BUFFER associées à une structure NET_BUFFER_LIST ont les attributs spécifiés par les membres NetBufferListInfo et Context .

Lorsqu’un pilote appelle la fonction NdisSendNetBufferLists ou NdisFSendNetBufferLists , il perd la propriété de :

  • Structure NET_BUFFER_LIST spécifiée.
  • Les structures et mdL NET_BUFFER attachées.
  • Tout NDIS_REQUEST_CONTROLs attaché.
  • Toutes les données NetBufferListInfo associées à la structure NET_BUFFER_LIST.
Le propriétaire actuel d’une liste de structures NET_BUFFER_LIST peut déplacer une structure NET_BUFFER_LIST vers une autre liste. Toutefois, toutes les structures NET_BUFFER associées à une structure de NET_BUFFER_LIST doivent rester avec la même structure NET_BUFFER_LIST. Seul le pilote qui a créé les structures NET_BUFFER peut les déplacer vers une autre structure NET_BUFFER_LIST. Le propriétaire actuel ne peut pas modifier le membre Suivant d’une structure de NET_BUFFER.

Une liste de structures NET_BUFFER_LIST est une liste simple liée de manière unique et terminée par NULL. Pour déplacer une structure de NET_BUFFER_LIST vers une autre liste, effectuez les mises à jour appropriées aux membres Next dans les listes source et de destination.

Pour accéder aux membres de la structure NET_BUFFER_LIST, utilisez les macros et fonctions suivantes :

NET_BUFFER_LIST_NEXT_NBL

NET_BUFFER_LIST_FIRST_NB

NET_BUFFER_LIST_FLAGS

NET_BUFFER_LIST_MINIPORT_RESERVED NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZE

NET_BUFFER_LIST_INFO

NET_BUFFER_LIST_STATUS

NET_BUFFER_LIST_PROTOCOL_RESERVED NdisGetPoolFromNetBufferList

Pour plus d’informations sur l’utilisation des mémoires tampons net, 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

NDIS_NET_BUFFER_LIST_INFO

NET_BUFFER

NET_BUFFER_LIST_CONTEXT

NET_BUFFER_LIST_CONTEXT_DATA_SIZE NET_BUFFER_LIST_CONTEXT_DATA_START

NET_BUFFER_LIST_FIRST_NB

NET_BUFFER_LIST_FLAGS

NET_BUFFER_LIST_HEADER

NET_BUFFER_LIST_INFO

NET_BUFFER_LIST_MINIPORT_RESERVED

NET_BUFFER_LIST_NEXT_NBL

NET_BUFFER_LIST_PROTOCOL_RESERVED

NET_BUFFER_LIST_STATUS

NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBufferListContext NdisAllocateReassembledNetBufferList

NdisCancelSendNetBufferLists

NdisClearNblFlag

NdisFreeNetBufferListContext

NdisGeneratePartialCancelId

NdisGetPoolFromNetBufferList

NdisSendNetBufferLists

NdisSetNblFlag

NdisTestNblFlag

NdisTestNblFlags