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_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é 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
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 à 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.
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 :
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 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.
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_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 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) |