W_TCP_OFFLOAD_FORWARD_HANDLER fonction de rappel (ndischimney.h)

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

NDIS appelle la fonction MiniportTcpOffloadForward pour transférer les segments TCP reçus non reconnus vers une cible de déchargement.

Syntaxe

W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;

NDIS_STATUS WTcpOffloadForwardHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Paramètres

[in] MiniportAdapterContext

Handle dans une zone de contexte allouée de la cible de déchargement dans laquelle la cible de déchargement conserve les informations d’état sur cette instance de l’adaptateur. Le pilote miniport a fourni cette poignée à NDIS lorsqu’il a appelé NdisMSetMiniportAttributes à partir de son Fonction MiniportInitializeEx .

[in] MiniportOffloadContext

Pointeur vers un emplacement de mémoire qui contient une valeur PVOID. Cette valeur PVOID fait référence au contexte de déchargement miniport qui contient l’objet d’état de la connexion TCP pour laquelle les segments TCP sont transférés. La cible de déchargement a fourni cette valeur PVOID lorsqu’elle a déchargé l’objet d’état de connexion TCP.

[in] NetBufferList

Pointeur vers une structure NET_BUFFER_LIST . Cette structure peut être une structure autonome ou la première structure d’une liste liée de structures NET_BUFFER_LIST. Chaque structure NET_BUFFER_LIST de la liste décrit une structure NET_BUFFER . Chaque structure NET_BUFFER est mappée à une chaîne de listes de descripteurs de mémoire (MDL). Les dll MDL associées à une structure de NET_BUFFER contiennent un seul segment TCP qui est transféré vers la cible de déchargement. Le premier octet du premier MDL est le premier octet de l’en-tête TCP. 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.

Valeur retournée

NDIS_STATUS_PENDING est la seule valeur de retour autorisée. Une cible de déchargement effectue toujours une demande de transfert de manière asynchrone en appelant le Fonction NdisTcpOffloadForwardComplete .

Remarques

La pile hôte transfère un ou plusieurs segments TCP qu’elle a reçus, mais non reconnus dans les situations suivantes :

  • La pile hôte a reçu les segments d’une connexion TCP qui était déchargée vers la cible de déchargement. Étant donné que la connexion n’a pas été entièrement déchargée, la cible de déchargement n’a pas pu traiter les segments TCP à ce moment-là.
  • La pile hôte se trouve dans un système multi-hébergement qui a reçu les segments sur une interface réseau autre que celle sur laquelle la connexion TCP est déchargée.
  • La cible de déchargement indiquait précédemment les paquets reçus dont les options IP étaient définies et/ou qui étaient des fragments qui devaient être réassemblé. Après avoir traité les options IP et/ou correctement réassemblé les paquets, la pile hôte transfère les segments TCP vers la cible de déchargement.
La pile hôte ne tente jamais de transférer des segments TCP pour une connexion TCP lorsque :
  • Cette connexion est en cours de déchargement. La pile hôte attend toujours que le déchargement de la connexion se termine avant de transférer les paquets pour cette connexion. La pile hôte transfère les segments TCP dès que possible une fois le déchargement de la connexion terminé. Toutefois, il n’existe aucune limite de temps pour le transfert de ces segments.
  • Le déchargement de cette connexion est en cours d’arrêt. Dans ce cas, la pile hôte met en mémoire tampon les données jusqu’à ce que l’arrêt du déchargement se termine, puis traite les segments.
La pile hôte transfère les segments TCP(et non les datagrammes IP) vers une cible de déchargement. Par conséquent, le seul en-tête que la pile hôte fournit pour chaque segment est l’en-tête TCP, y compris les options TCP présentes. Il s’agit de toutes les informations d’en-tête dont la cible de déchargement a besoin pour traiter le segment reçu.

Lors du transfert de segments TCP, la pile hôte transfère un segment TCP par NET_BUFFER structure. La pile hôte associe une seule structure NET_BUFFER, et donc un segment TCP transféré, à chaque structure NET_BUFFER_LIST dans la liste liée.

La pile hôte alloue les NET_BUFFER_LIST et les structures associées que NDIS transmet à la fonction MiniportTcpOffloadForward . La cible de déchargement possède ces ressources jusqu’à ce qu’elle les transmette au Fonction NdisTcpOffloadForwardComplete . Bien qu’elle soit propriétaire de ces ressources, la cible de déchargement est libre de les mettre en file d’attente pour traitement.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête ndischimney.h (inclure Ndischimney.h)
IRQL N’importe quel niveau

Voir aussi

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadForwardComplete