NET_BUFFER Structure
Les structures NDIS 6.0 et ultérieures NET_BUFFER sont analogues aux structures NDIS_PACKET utilisées par NDIS 5. x et pilotes antérieurs. Chaque structure NET_BUFFER empaquette un paquet de données réseau.
La figure suivante montre les champs d’une structure NET_BUFFER.
La structure NET_BUFFER inclut une structure NET_BUFFER_HEADER dans le membre NetBufferHeader . La structure NET_BUFFER_HEADER inclut une structure NET_BUFFER_DATA dans le membre NetBufferData . Vous devez utiliser des macros NDIS pour accéder à NET_BUFFER membres de la structure. Pour obtenir la liste complète de ces macros, consultez la page de référence sur la structure NET_BUFFER .
Certains des membres de la structure NET_BUFFER sont utilisés uniquement par NDIS. Les membres que les pilotes utilisent généralement sont les suivants :
ProtocolReserved
Réservé à une utilisation par les pilotes de protocole.
MiniportReserved
Réservé à l’utilisation par les pilotes de miniport.
NdisPoolHandle
Spécifie un handle de pool qui identifie le pool NET_BUFFER à partir duquel la structure NET_BUFFER a été allouée.
Prochain
Spécifie un pointeur vers la structure NET_BUFFER suivante dans une liste liée de structures NET_BUFFER. S’il s’agit de la dernière structure NET_BUFFER dans la liste, ce membre a la valeur NULL.
DataLength
Spécifie la longueur en octets des données réseau dans la chaîne MDL.
DataOffset
Spécifie le décalage, en octets, entre le début de la mémoire dans la chaîne MDL et le début des données réseau dans la chaîne MDL.
CurrentMdl
Spécifie un pointeur vers la première MDL que le pilote actuel utilise. Ce pointeur fournit une optimisation qui améliore les performances en ignorant toutes les DLL que le pilote actuel n’utilise pas.
CurrentMdlOffset
Spécifie le décalage, en octets, au début de l’espace de données utilisé dans la MDL qui est spécifié par le membre CurrentMdl de la structure NET_BUFFER.
La figure suivante montre la relation entre les membres CurrentMdl, CurrentMdlOffset, DataOffset et DataLength et l’espace de données.
NDIS fournit des fonctions pour gérer l’espace de données dans la chaîne MDL. La façon dont les pilotes utilisent l’espace de données change dynamiquement avec le pilote actuel. Parfois, il existe un espace de données actuellement inutilisé par le pilote actuel. Bien que l’espace de données inutilisé soit actuellement inutilisé, il peut contenir des données valides. Par exemple, sur le chemin de réception, l’espace de données inutilisé peut contenir des informations d’en-tête utilisées par un pilote de niveau inférieur.
Les pilotes effectuent des opérations de retrait et d’avance pour augmenter et diminuer l’espace de données utilisé. Pour plus d’informations sur les opérations de retrait et d’avance, consultez Retraite et opérations avancées.
Les termes et définitions suivants décrivent les éléments de l’espace de données NET_BUFFER :
Espace de données utilisé
L’espace de données utilisé contient les données que le pilote actuel utilise à l’heure actuelle. Les pilotes augmentent l’espace de données utilisé avec les opérations de retrait et réduisent l’espace de données utilisé avec les opérations avancées.
Espace de données inutilisé
Le pilote actuel n’utilise pas cet espace de données à l’heure actuelle.
Taille totale des données
La taille totale des données est la somme de la taille de l’espace de données utilisé et de l’espace de données inutilisé. Pour calculer la taille totale, ajoutez dataOffset à DataLength .
Retraite
Les opérations de retrait augmentent la taille de l’espace de données utilisé.
Avancer
Les opérations avancées réduisent la taille de l’espace de données utilisé.