Share via


W_TCP_OFFLOAD_DISCONNECT_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.]

La fonction MiniportTcpOffloadDisconnect ferme la moitié d’envoi d’une connexion TCP déchargée. En outre, si la déconnexion à effectuer est une déconnexion normale, NDIS peut fournir des données d’application à la fonction MiniportTcpOffloadDisconnect que la fonction doit transmettre avant d’envoyer un segment FIN.

Syntaxe

W_TCP_OFFLOAD_DISCONNECT_HANDLER WTcpOffloadDisconnectHandler;

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

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. La cible de déchargement a fourni ce handle à NDIS lorsqu’elle 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 pour la connexion TCP à déconnecter. 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 unique. Une seule structure NET_BUFFER est associée à cette structure NET_BUFFER_LIST.

[in] Flags

Comme l’une des valeurs suivantes, le type de déconnexion que la cible de déchargement doit effectuer :

TCP_DISCONNECT_ABORTIVE_CLOSE

La cible de déchargement doit effectuer une déconnexion avortée en envoyant un segment RST.

TCP_DISCONNECT_GRACEFUL_CLOSE

La cible de déchargement doit effectuer une déconnexion normale en envoyant un segment FIN.

Valeur retournée

La fonction MiniportTcpOffloadDisconnect retourne toujours NDIS_STATUS_PENDING. La cible de déchargement termine la demande de déconnexion de manière asynchrone en appelant NdisTcpOffloadDisconnectComplete.

Remarques

En fonction du paramètre Indicateurs , la fonction MiniportTcpOffloadDisconnect effectue une déconnexion abandonnée ou une déconnexion avec grâce sur la connexion TCP spécifiée.

Déconnexion avortée

Si Indicateurs est défini sur TCP_DISCONNECT_ABORTIVE_CLOSE, la cible de déchargement effectue une déconnexion avortée en envoyant un segment RST sur la connexion TCP spécifiée.

Note Il s’agit de la seule instance dans laquelle une cible de déchargement peut envoyer un segment RST.
 
Avant d’appeler le La fonction NdisTcpOffloadDisconnectComplete pour terminer la déconnexion avortée, la cible de déchargement doit effectuer toutes les demandes d’envoi en suspens sur la connexion avec une valeur status de NDIS_STATUS_REQUEST_ABORTED. La cible de déchargement écrit cette valeur status dans le membre Status de chaque structure NET_BUFFER_LIST dans la liste liée qu’elle transmet au Fonction NdisTcpOffloadSendComplete .

Peu importe si la cible de déchargement met fin aux demandes d’envoi en attente avant ou après l’envoi du segment RST.

S’il existe des indications de réception ou d’événement en suspens sur la connexion, la cible de déchargement ne doit pas attendre que ces indications se terminent avant d’envoyer un segment RST. La cible de déchargement doit immédiatement arrêter le traitement des segments de réception sur la connexion et ne pas accuser réception des segments de réception, y compris les données de réception indiquées qui n’ont pas été consommées par l’application cliente.

Lorsque les = indicateurs TCP_DISCONNECT_ABORTIVE_CLOSE, la structure NET_BUFFER associée à la structure NET_BUFFER_LIST référencée par le pointeur NetBufferList ne contient aucune donnée. Autrement dit, le membre DataLength de la structure NET_BUFFER_DATA dans NetBufferHeader de la structure NET_BUFFER est égal à zéro.

Déconnexion graceful

Si Flags est défini sur TCP_DISCONNECT_GRACEFUL_CLOSE, la cible de déchargement effectue une déconnexion appropriée en envoyant un segment FIN sur la connexion TCP spécifiée.

S’il n’y a pas de données utilisateur à envoyer avant le segment FIN, la structure NET_BUFFER associée à la structure NET_BUFFER_LIST référencée par le pointeur NetBufferList ne contient aucune donnée. S’il y a des données utilisateur à envoyer, les listes de descripteurs de mémoire (MDL) associées à la structure NET_BUFFER contiennent les données utilisateur à envoyer.

La cible de déchargement ne doit pas attendre un accusé de réception des données utilisateur transmises avant d’envoyer un segment FIN. La cible de déchargement peut envoyer un segment FIN distinct après la transmission des données utilisateur, ou la cible de déchargement peut définir le bit FIN dans l’en-tête TCP du dernier segment de données utilisateur qu’elle envoie.

Du point de vue de la cible de déchargement, l’envoi d’un segment FIN ferme la moitié d’envoi de la connexion. Toutefois, l’envoi d’un segment FIN ne ferme pas la moitié de réception de la connexion. L’hôte distant met fin à la moitié de réception de la connexion en envoyant l’un des éléments suivants à la cible de déchargement :

  • Segment FIN, qui demande une déconnexion normale.
  • Segment RST, qui demande une déconnexion avortée.
Après l’envoi d’un segment FIN, la cible de déchargement peut recevoir des segments sur la connexion jusqu’à ce que l’hôte distant lance une déconnexion normale ou abandonnée ou jusqu’à ce que l’hôte local termine le déchargement de la connexion ou lance une déconnexion abandonnée.

Avant le déchargement des appels cibles NdisTcpOffloadDisconnectComplete, il doit terminer toutes les demandes d’envoi en suspens sur la connexion dans l’ordre dans lequel elles ont été remises à la cible de déchargement.

Réponse obligatoire à une demande de déconnexion

Une cible de déchargement ne doit pas échouer à une demande de déconnexion, sauf si la connexion TCP spécifiée est en cours de chargement ou est abandonnée (par exemple, parce que l’hôte distant a envoyé un segment RST sur la connexion). Si une cible de déchargement échoue à une demande de déconnexion, la pile hôte ne rééditera pas la demande de déconnexion ultérieurement.

Libérer des ressources de connexion

La cible de déchargement ne doit pas libérer de ressources pour la connexion sur laquelle elle a émis une déconnexion avortée ou normale tant que la pile de l’hôte ne met pas fin au déchargement de la connexion.

Configuration requise

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

Voir aussi

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete