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

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 cette 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é à 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é pour une utilisation par NDIS.

ProtocolReserved[4]

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

MiniportReserved[2]

Réservé à l’utilisation par les pilotes miniports.

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 à des fins propres. Lorsque la structure NET_BUFFER_LIST est initialement allouée, ce membre est NULL. Une fois que le propriétaire actuel abandonne 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 :

Miniport Driver

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 à une opération OR au niveau du bit.

Utilisez le NdisTestNblFlag, NdisTestNblFlags, NdisSetNblFlaget macros 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 ne changent pas, NDIS peut réutiliser les informations d’origine à partir desquelles la NET_BUFFER_LIST a été créée.

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 cadre Ethernet associé :

NDIS_NBL_FLAGS_IS_IPV4

Toutes les trames Ethernet de cette structure NET_BUFFER_LIST sont des images IPv4. Si cet indicateur est défini, le fournisseur de fractionnement des données d’en-tête 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 images IPv6. Si cet indicateur est défini, le fournisseur de fractionnement des données d’en-tête ne doit pas définir l’indicateur de 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 des données d’en-tête 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 de 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 des données d’en-tête ne doit pas définir l’indicateur NDIS_NBL_FLAGS_IS_TCP, et le fournisseur doit définir l’indicateur de NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur de 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 des données d’en-tête ne fractionne pas le cadre 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 du protocole de couche supérieure. Si cet indicateur est défini, le fournisseur de fractionnement des données d’en-tête doit définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur de NDIS_NBL_FLAGS_IS_IPV6. En outre, le fournisseur peut définir l’indicateur NDIS_NBL_FLAGS_IS_TCP ou l’indicateur de NDIS_NBL_FLAGS_IS_UDP, mais le fournisseur ne doit pas définir l’indicateur de 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 des données d’en-tête doit définir l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ou l’indicateur de NDIS_NBL_FLAGS_IS_IPV6. En outre, le fournisseur doit définir l’indicateur de NDIS_NBL_FLAGS_IS_TCP ou l’indicateur de NDIS_NBL_FLAGS_IS_UDP, mais le fournisseur ne doit pas définir l’indicateur de 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.

Remarque À partir 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 ce jeu. 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

État final d’achèvement 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é en raison d’une raison autre que celle indiquée dans les trois valeurs précédentes.

NDIS_STATUS_SEND_ABORTED

NDIS a appelé la fonction MiniportCancelSend pour annuler l’opération d’envoi pour 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, car il est suspendu, il définit l’état complet dans chaque NET_BUFFER_LIST affecté sur 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 OOB (out-of-band). »

Utiliser 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 les NdisSendNetBufferLists ou NdisFSendNetBufferLists fonction, il perd la propriété de :

  • Structure NET_BUFFER_LIST spécifiée.
  • Structures NET_BUFFER jointes et MDL.
  • 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 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 NET_BUFFER.

Une liste de structures NET_BUFFER_LIST est une liste simple liée et terminée par NULL. Pour déplacer une structure NET_BUFFER_LIST vers une autre liste, effectuez les mises à jour appropriées des 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 nettes, consultez NET_BUFFER Architecture.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge dans NDIS 6.0 et versions ultérieures.
d’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 NdisAllocateNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBufferListContext NdisAllocateReassembledNetBufferList

NdisCancelSendNetBufferLists

NdisClearNblFlag

NdisFreeNetBufferListContext

NdisGeneratePartialCancelId

NdisGetPoolFromNetBufferList

NdisSendNetBufferLists

NdisSetNblFlag

NdisTestNblFlag

NdisTestNblFlags