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