Partager via


NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure (ndischimney.h)

[La fonctionnalité de déchargement de cheminée TCP est déconseillée et ne doit pas être utilisée.]

La structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST est le bloc de construction de base d’une arborescence d’état de déchargement de cheminée TCP. Une arborescence d’état de déchargement peut contenir une ou plusieurs structures NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

Syntaxe

typedef struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST {
  IN NDIS_OBJECT_HEADER                Header;
  IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
  struct                               _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
  IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
  struct                               _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
#endif
  OUT NDIS_STATUS                      Status;
  IN PVOID                             NdisReserved[2];
  IN OUT PVOID                         *MiniportOffloadContext;
  IN NDIS_HANDLE                       NdisOffloadHandle;
  IN PVOID                             ProtocolReserved[2];
  IN PVOID                             MiniportReserved[2];
  IN PVOID                             ImReserved[2];
  IN PVOID                             Scratch[2];
  IN PVOID                             SourceHandle;
  IN NDIS_PORT_NUMBER                  PortNumber;
  IN OUT PNET_BUFFER_LIST              NetBufferListChain;
} NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, *PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST;

Membres

Header

En-tête de la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. L’en-tête est mis en forme en tant que structure NDIS_OBJECT_HEADER . La structure NDIS_OBJECT_HEADER contient le numéro de révision de la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, le type d’état de déchargement qui suit immédiatement la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST en mémoire et la taille de la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, y compris l’en-tête, en octets.

Le membre Type de la structure NDIS_OBJECT_HEADER indique le type d’état de déchargement et, par conséquent, la ou les structures d’état de déchargement spécifiques qui suivent immédiatement la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST en mémoire.

Les valeurs OFFLOAD_STATE_TYPE suivantes sont prises en charge :

NeighborOffloadConstState

Spécifie l’état voisin constant. Cet état est au format NEIGHBOR_OFFLOAD_STATE_CONST structure.

NeighborOffloadCachedState

Spécifie l’état voisin mis en cache. Cet état est au format NEIGHBOR_OFFLOAD_STATE_CACHED structure.

NeighborOffloadDelegatedState

Spécifie l’état voisin délégué. Cet état est au format NEIGHBOR_OFFLOAD_STATE_DELEGATED structure.

NeighborOffloadState

Spécifie toutes les informations d’état voisin, y compris la constante, l’état du voisin mis en cache et l’état voisin délégué. Cet état est mis en forme en tant que structure NEIGHBOR_OFFLOAD_STATE_CONST, suivie d’une structure NEIGHBOR_OFFLOAD_STATE_CACHED, puis d’une structure NEIGHBOR_OFFLOAD_STATE_DELEGATED.

Ip4OffloadConstState

Spécifie l’état du chemin d’accès constant (IPv4). Cet état est au format PATH_OFFLOAD_STATE_CONST structure.

Ip4OffloadCachedState

Spécifie l’état du chemin mis en cache (IPv4). Cet état est au format PATH_OFFLOAD_STATE_CACHED structure.

Ip4OffloadDelegatedState

Spécifie l’état du chemin délégué (IPv4). Cet état est au format PATH_OFFLOAD_STATE_DELEGATED structure. Actuellement, il n’existe aucun état de chemin délégué. La structure PATH_OFFLOAD_STATE_DELEGATED ne contient aucune variable.

Ip4OffloadState

Spécifie tout l’état du chemin d’accès (IPv4), y compris la constante, l’état mis en cache et l’état du chemin délégué. Cet état est mis en forme comme structure PATH_OFFLOAD_STATE_CONST, suivie d’une structure PATH_OFFLOAD_STATE_CACHED, puis d’une structure PATH_OFFLOAD_STATE_DELEGATED.

Ip6OffloadConstState

Spécifie l’état du chemin d’accès constant (IPv6). Cet état est mis en forme en tant que structure PATH_OFFLOAD_STATE_CONST.

Ip6OffloadCachedState

Spécifie l’état du chemin mis en cache (IPv6). Cet état est mis en forme en tant que structure PATH_OFFLOAD_STATE_CACHED.

Ip6OffloadDelegatedState

Spécifie l’état du chemin délégué (IPv6). Cet état est mis en forme en tant que structure PATH_OFFLOAD_STATE_DELEGATED. Actuellement, il n’existe aucun état de chemin délégué. La structure PATH_OFFLOAD_STATE_DELEGATED ne contient aucune variable.

Ip6OffloadState

Spécifie toutes les informations d’état du chemin d’accès (IPv6), y compris la constante, l’état du chemin d’accès mis en cache et délégué. Cet état est mis en forme comme structure PATH_OFFLOAD_STATE_CONST, suivie d’une structure PATH_OFFLOAD_STATE_CACHED, puis d’une structure PATH_OFFLOAD_STATE_DELEGATED.

TcpOffloadConstState

Spécifie l’état TCP constant. Cet état est au format TCP_OFFLOAD_STATE_CONST structure.

TcpOffloadCachedState

Spécifie l’état TCP mis en cache. Cet état est au format TCP_OFFLOAD_STATE_CACHED structure.

TcpOffloadDelegatedState

Spécifie l’état TCP délégué. Cet état est au format TCP_OFFLOAD_STATE_DELEGATED structure.

TcpOffloadResourceState

Réservé. Cette valeur de OFFLOAD_STATE_TYPE, ainsi que la structure TCP_OFFLOAD_RESOURCE_STATE, ne sont pas utilisées actuellement.

TcpOffloadState

Spécifie toutes les informations d’état TCP, y compris la constante, l’état TCP mis en cache et délégué. Cet état est mis en forme en tant que structure TCP_OFFLOAD_STATE_CONST, suivie d’une structure TCP_OFFLOAD_STATE_CACHED, puis d’une structure TCP_OFFLOAD_STATE_DELEGATED.

FilterReservedOffloadState

Réservé aux pilotes de filtre.

NextBlock

Pointeur vers la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST suivante au niveau de la couche d’état de déchargement (voisin, chemin ou TCP) indiquée par le membre Type du membre Header . NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structures liées via des pointeurs NextBlock sont toujours au même niveau de l’état de déchargement. Une valeur NextBlocknull indique qu’il n’existe aucune structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST suivante supplémentaire à ce niveau.

_NDIS_MINIPORT_OFFLOAD_BLOCK_LIST

DependentBlockList

Pointeur vers une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST qui se trouve au niveau d’une couche dépendante de l’état de déchargement (couche supérieure dans l’arborescence d’état de déchargement). Pour le déchargement de cheminée TCP :

  • Le membre DependentBlockList d’une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST au niveau de la couche voisine peut pointer uniquement vers une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST au niveau de la couche de chemin.
  • Le membre DependentBlockList d’une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST au niveau de la couche de chemin d’accès peut pointer uniquement vers une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST au niveau de la couche TCP.
  • Le membre DependentBlockList d’une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST au niveau de la couche TCP est toujours NULL.
Une valeur DependentBlockListnull indique qu’il n’existe aucune structure de NDIS_MINIPORT_OFFLOAD_BLOCK_LIST dépendante.

Status

L’achèvement status d’une opération de lancement de déchargement, de déchargement de requête, de mise à jour du déchargement, d’invalidation du déchargement ou d’arrêt de déchargement effectuée par la cible de déchargement sur l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST ou référencé par celui-ci. Selon l’opération, la cible de déchargement écrit l’une des valeurs NDIS_STATUS suivantes dans le membre Status :

NDIS_STATUS_SUCCESS

Lancer le déchargement : la cible de déchargement a correctement déchargé l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST et l’état associé à toutes les structures de NDIS_MINIPORT_OFFLOAD_BLOCK_LIST immédiatement dépendantes.

Interroger, mettre à jour, invalider ou arrêter le déchargement : la cible de déchargement a correctement effectué l’opération sur l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST ou référencé par.

NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS

Lancement du déchargement : la cible de déchargement a correctement déchargé l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, mais n’a pas pu décharger l’état associé à une ou plusieurs des structures NDIS_MINIPORT_OFFLOAD_BLOCK_LIST immédiatement dépendantes.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_FAILURE

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. La cause de l’échec ne peut pas être catégorisée.

Interroger, mettre à jour, invalider ou arrêter le déchargement : la cible de déchargement n’a pas pu effectuer l’opération sur l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST ou référencé par.

NDIS_STATUS_RESOURCES

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer suffisamment de mémoire hôte.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_TCP_ENTRIES

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer un objet d’état de connexion TCP.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_PATH_ENTRIES

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer un objet d’état de chemin d’accès.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer un objet d’état voisin.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la pile hôte a spécifié un membre DlSourceAddress non NULL dans le NEIGHBOR_OFFLOAD_STATE_CONST structure, et la cible de déchargement ne prend pas en charge les adresses MAC sources configurables ou ne peut pas accepter d’adresses MAC sources supplémentaires.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer une structure de données pour l’adresse IP source référencée par le pointeur SourceAddress dans le PATH_OFFLOAD_STATE_CONST structure.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer suffisamment de mémoires tampons de transmission TCP.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car la cible de déchargement n’a pas pu allouer suffisamment de mémoires tampons de réception TCP.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW

Lancer le déchargement : la cible de déchargement n’a pas pu décharger l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, car le membre InitialRcvWnd spécifié dans le TCP_OFFLOAD_STATE_CACHED structure est plus grande que la cible de déchargement peut prendre en charge.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_VLAN_ENTRIES

Lancer le déchargement : la cible de déchargement est à court de ressources pour le suivi d’ID VLAN supplémentaires.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_VLAN_MISMATCH

Lancer le déchargement : le VlanId voisin est différent de zéro et ne correspond pas à l’un des ID de VLAN d’interface.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NDIS_STATUS_OFFLOAD_PATH_MTU

Le chemin D’accès MTU pour la connexion TCP est plus grand que la cible de déchargement prend en charge.

Interroger, mettre à jour, invalider ou arrêter le déchargement : valeur de status autorisée.

NdisReserved[2]

Réservé à l’utilisation par NDIS.

MiniportOffloadContext

Pointeur vers un emplacement de mémoire dans lequel la cible de déchargement écrit une valeur PVOID. La valeur PVOID fait référence à la zone de contexte de déchargement dans laquelle la cible de déchargement stocke l’état associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. Si l’état est un nouvel état à décharger par la cible de déchargement, l’emplacement de mémoire pointé par MiniportOffloadContext contient une valeur NULL . Après avoir déchargé l’état, la cible de déchargement écrit une valeur PVOID dans cet emplacement de mémoire. La valeur PVOID fournie par la cible de déchargement fait référence à la zone de contexte de déchargement dans laquelle l’état a été déchargé. Si le membre MiniportOffloadContext lui-même a la valeur NULL, la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST est un espace réservé dans l’arborescence d’état de déchargement.

NdisOffloadHandle

Handle que la cible de déchargement fournit dans les appels suivants au NdisTcpOffloadEventHandler ou la fonction Fonction NdisTcpOffloadReceiveHandler lors de l’indication de l’état de déchargement associé à cette structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

ProtocolReserved[2]

Réservé à l’utilisation par les pilotes de protocole, qui peuvent utiliser cette zone à leurs propres fins. Les cibles de déchargement ne doivent pas modifier cette valeur.

MiniportReserved[2]

Réservé à l’utilisation par les cibles de déchargement, qui peuvent utiliser cette zone à leurs propres fins, telles que la mise en file d’attente de l’état de déchargement associé à la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

ImReserved[2]

Réservé à l’utilisation par les pilotes intermédiaires, qui peuvent utiliser cette zone à leurs propres fins. Les cibles de déchargement ne doivent pas modifier cette valeur.

Scratch[2]

La cible de déchargement peut utiliser cette zone pour le suivi interne. Les informations contenues dans cette zone sont valides uniquement lorsque la cible de déchargement est propriétaire du NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

SourceHandle

Ce membre n’est pas significatif pour une cible de déchargement. Une cible de déchargement ne doit pas modifier ce membre.

PortNumber

Numéro de port qui identifie un port d’adaptateur miniport. Pour attribuer un numéro de port d’adaptateur miniport, appelez la fonction NdisMAllocatePort . Une valeur zéro identifie le port par défaut d’un adaptateur miniport. Utilisez le port par défaut si le pilote miniport n’a pas alloué de ports pour l’adaptateur spécifié.

NetBufferListChain

Lorsque la pile hôte spécifie une valeur NULL , NetBufferListChain n’est pas significatif et peut être ignoré par la cible de déchargement.

Lorsque la pile hôte spécifie une valeur non NULL , NetBufferListChain pointe vers une structure NET_BUFFER_LIST qui peut être une structure autonome ou la première structure d’une liste liée de telles structures. Chaque structure NET_BUFFER_LIST dans la liste liée décrit une structure NET_BUFFER . La structure NET_BUFFER est mappée à une chaîne de listes de descripteurs de mémoire (MDL). Les NET_BUFFER_LIST et les structures associées sont verrouillées afin qu’elles restent résidentes dans la mémoire physique. Toutefois, ils ne sont pas mappés à la mémoire système.

Les dll MDL associées aux structures NET_BUFFER contiennent des données que la pile hôte transmet à la cible de déchargement dans le cadre de l’opération de déchargement. La cible de déchargement effectue ces données de manière asynchrone dans la pile de l’hôte en appelant la fonction NdisTcpOffloadXxxComplete appropriée. À l’heure actuelle, la liste liée ne peut contenir qu’un seul type de données : les données d’envoi en attente. Pour plus d’informations, consultez Gestion des données d’envoi en suspens pendant et après une opération de déchargement.

Une cible de déchargement peut transmettre des données d’envoi en attente à la pile hôte lors de la fin du déchargement d’une connexion TCP. Dans ce cas, la cible de déchargement spécifie une valeur non NULL pour le membre NetBufferListChain lors de l’appel du Fonction NdisMTerminateOffloadComplete . Si la cible de déchargement ne transmet pas de données d’envoi pour une connexion TCP en cours d’arrêt, elle doit spécifier une valeur NULL pour le membre NetBufferListChain .

Remarques

NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structures peuvent être liées entre elles pour créer l’infrastructure d’une arborescence d’état de déchargement de cheminée TCP.

Par le biais de NDIS, la pile hôte transmet un pointeur OffloadBlockList , qui référence une arborescence d’état de déchargement à l’une des fonctions suivantes d’une cible de déchargement :

La cible de déchargement retourne l’arborescence à la pile hôte en passant le même pointeur vers la fonction d’achèvement correspondante : Une structure de NDIS_MINIPORT_OFFLOAD_BLOCK_LIST peut être immédiatement suivie en mémoire d’une structure d’état de déchargement qui contient l’état à décharger, interroger, mettre à jour, invalider ou terminer. Le membre Type de l’en-tête de la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST spécifie le type d’état de déchargement et, par conséquent, la structure d’état de déchargement spécifique (ou les structures) qui suivent la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST en mémoire.

La pile hôte et la cible de déchargement utilisent les membres *MiniportOffloadContext et NdisOffloadHandle d’une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST pour référencer l’état déchargé. Pour plus d’informations, consultez Stockage et référencement de l’état déchargé.

Une structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST peut effectuer l’une des fonctions suivantes dans une arborescence d’état de déchargement. Il peut fonctionner comme un espace réservé, un éditeur de liens ou il peut transmettre un nouvel état à décharger par la cible de déchargement. Pour plus d’informations, consultez Espaces réservés, éditeurs de liens et nouveaux déchargements.

Avant de terminer une opération de déchargement initial, de déchargement de requête, de mise à jour, d’invalidation du déchargement ou de fin de déchargement, une cible de déchargement doit écrire le status d’achèvement dans le membre Status de chaque structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST dans l’arborescence d’état.

Configuration requise

Condition requise Valeur
En-tête ndischimney.h (inclure Ndischimney.h)

Voir aussi

MiniportInitiateOffload

MiniportInvalidateOffload

MiniportQueryOffload

MiniportTerminateOffload

MiniportUpdateOffload

NDIS_OBJECT_HEADER

NEIGHBOR_OFFLOAD_STATE_CACHED

NEIGHBOR_OFFLOAD_STATE_DELEGATED

NdisMAllocatePort

NdisMInitiateOffloadComplete

NdisMInvalidateOffloadComplete NdisMQueryOffloadStateComplete NdisMTerminateOffloadComplete

NdisMUpdateOffloadComplete

NdisTcpOffloadEventHandler

NdisTcpOffloadReceiveHandler

PATH_OFFLOAD_STATE_CACHED

PATH_OFFLOAD_STATE_CONST

PATH_OFFLOAD_STATE_DELEGATED

TCP_OFFLOAD_STATE_CACHED

TCP_OFFLOAD_STATE_CONST

TCP_OFFLOAD_STATE_DELEGATED