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