Partager via


W_TCP_OFFLOAD_DISCONNECT_HANDLER fonction de rappel (ndischimney.h)

[La fonctionnalité de déchargement de 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 à MiniportTcpOffloadDisconnect fonction 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 vers une zone de contexte allouée à une 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 lors de son 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 à 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 de 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 abandonnée en envoyant un segment RST.

TCP_DISCONNECT_GRACEFUL_CLOSE

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

Valeur de retour

La fonction MiniportTcpOffloadDisconnect retourne toujours NDIS_STATUS_PENDING. La cible de déchargement termine la demande de déconnexion de façon asynchrone en appelant NdisTcpOffloadDisconnectComplete.

Remarques

Selon le paramètre indicateurs de, la fonction MiniportTcpOffloadDisconnect effectue une déconnexion abortive ou une déconnexion appropriée sur la connexion TCP spécifiée.

déconnexion abortive

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

Remarque Il s’agit de la seule instance dans laquelle une cible de déchargement peut envoyer un segment RST.
 
Avant d’appeler le fonction NdisTcpOffloadDisconnectComplete pour terminer la déconnexion abortive, la cible de déchargement doit effectuer toutes les demandes d’envoi en attente sur la connexion avec une valeur d’état de NDIS_STATUS_REQUEST_ABORTED. La cible de déchargement écrit cette valeur d’état dans le Status membre de chaque structure de NET_BUFFER_LIST dans la liste liée qu’elle passe à la fonction ndisTcpOffloadSendComplete.

Il n’est pas important que la cible de déchargement termine les demandes d’envoi en attente avant ou après l’envoi du segment RST.

S’il existe des indications de réception en attente ou des indications d’événement sur la connexion, la cible de déchargement ne doit pas attendre la fin de ces indications avant d’envoyer un segment RST. La cible de déchargement doit arrêter immédiatement le traitement des segments de réception sur la connexion et ne pas reconnaître les 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 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 la NetBufferHeader de la structure NET_BUFFER est égal à zéro.

déconnexion normale

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

S’il n’existe aucune donnée 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 existe 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 l’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 avoir transmis les 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’il 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’une des opérations suivantes à la cible de déchargement :

  • Segment FIN, qui demande une déconnexion normale.
  • Segment RST, qui demande une déconnexion abandonnée.
Après avoir envoyé 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 les appels cibles de déchargement NdisTcpOffloadDisconnectComplete, il doit effectuer toutes les demandes d’envoi en attente sur la connexion dans le même 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, car 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éexécute pas la demande de déconnexion ultérieurement.

libérer des ressources de connexion

La cible de déchargement ne doit pas libérer des ressources pour la connexion sur laquelle elle a émis une déconnexion abandonnée ou normale jusqu’à ce que la pile hôte termine le déchargement de la connexion.

Exigences

Exigence Valeur
plateforme cible Windows
d’en-tête ndischimney.h (include 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