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_SIZEParentNetBufferList
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
Pilote de protocole
Pilote de filtre
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.
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 :
NdisAllocateNetBufferAndNetBufferList NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateReassembledNetBufferListToutes 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.
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_MINIPORT_RESERVED NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZE NET_BUFFER_LIST_PROTOCOL_RESERVED NdisGetPoolFromNetBufferListPour 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) |