W_TCP_OFFLOAD_DISCONNECT_HANDLER Rückruffunktion (ndischimney.h)
[Das TCP-Schornstein-Offload-Feature ist veraltet und sollte nicht verwendet werden.]
Die MiniportTcpOffloadDisconnect Funktion schließt die Sendehälfte einer ausgelasteten TCP-Verbindung. Darüber hinaus kann NDIS Anwendungsdaten an MiniportTcpOffloadDisconnect Funktion bereitstellen, die von der Funktion übertragen werden muss, bevor ein FIN-Segment gesendet wird.
Syntax
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
)
{...}
Parameter
[in] MiniportAdapterContext
Das Handle für einen kontextbezogenen Offload-Zielbereich, in dem das Offloadziel Zustandsinformationen zu dieser Instanz des Adapters verwaltet. Das Offload-Ziel hat dieses Handle beim Aufrufen an NDIS bereitgestellt. von NdisMSetMiniportAttributes MiniportInitializeEx Funktion.
[in] MiniportOffloadContext
Ein Zeiger auf einen Speicherspeicherort, der einen PVOID-Wert enthält. Dieser PVOID-Wert verweist auf den Miniport-Offloadkontext, der das Statusobjekt für die TCP-Verbindung enthält, die getrennt werden soll. Das Offload-Ziel hat diesen PVOID-Wert beim Entladen des TCP-Verbindungsstatusobjekts bereitgestellt.
[in] NetBufferList
Ein Zeiger auf eine einzelne NET_BUFFER_LIST Struktur. Dieser NET_BUFFER_LIST Struktur ist nur eine NET_BUFFER Struktur zugeordnet.
[in] Flags
Als einer der folgenden Werte muss der Typ der Verbindung, die das Offloadziel ausführen muss:
TCP_DISCONNECT_ABORTIVE_CLOSE
Das Offloadziel muss eine abgebrochene Trennung ausführen, indem ein RST-Segment gesendet wird.
TCP_DISCONNECT_GRACEFUL_CLOSE
Das Offloadziel muss eine ordnungsgemäße Trennung durchführen, indem ein FIN-Segment gesendet wird.
Rückgabewert
Die MiniportTcpOffloadDisconnect-funktion gibt immer NDIS_STATUS_PENDING zurück. Das Offloadziel schließt die Disconnect-Anforderung asynchron durch Aufrufen ab. NdisTcpOffloadDisconnectComplete.
Bemerkungen
Abhängig von der Einstellung Flags führt die MiniportTcpOffloadDisconnect-Funktion eine abgebrochene Verbindung oder eine ordnungsgemäße Verbindung für die angegebene TCP-Verbindung aus.
Abgebrochene Verbindung
Wenn Flags auf TCP_DISCONNECT_ABORTIVE_CLOSEfestgelegt ist, führt das Offloadziel eine abgebrochene Verbindung durch Senden eines RST-Segments an die angegebene TCP-Verbindung aus.
Es spielt keine Rolle, ob das Offloadziel die ausstehenden Sendeanforderungen vor oder nach dem Senden des RST-Segments beendet.
Wenn es ausstehende Empfangsanzeigen oder Ereignisanzeigen für die Verbindung gibt, darf das Offloadziel nicht warten, bis diese Angaben abgeschlossen sind, bevor ein RST-Segment gesendet wird. Das Offloadziel muss die Verarbeitung von Empfangensegmenten in der Verbindung sofort beenden und keine Empfangssegmente bestätigen, einschließlich der angegebenen Empfangendaten, die nicht von der Clientanwendung genutzt wurden.
Wenn Flags = TCP_DISCONNECT_ABORTIVE_CLOSE, enthält die NET_BUFFER Struktur, die der NET_BUFFER_LIST Struktur zugeordnet ist, auf die NetBuffer List verweist, keine Daten. Das heißt, das DataLength Mitglied der NET_BUFFER_DATA Struktur in der NetBufferHeader der NET_BUFFER Struktur ist Null.
Ordnungsgemäß trennen
Wenn Flags auf TCP_DISCONNECT_GRACEFUL_CLOSEfestgelegt ist, führt das Offloadziel eine ordnungsgemäße Trennung durch Senden eines FIN-Segments an die angegebene TCP-Verbindung aus.
Wenn keine Benutzerdaten vor dem FIN-Segment gesendet werden sollen, enthält die NET_BUFFER Struktur, die der NET_BUFFER_LIST Struktur zugeordnet ist, auf die von der NetBufferList Zeiger verwiesen wird, keine Daten. Wenn Benutzerdaten gesendet werden sollen, enthalten die speicherdeskriptorlisten (MDLs), die der NET_BUFFER Struktur zugeordnet sind, die zu sendenden Benutzerdaten.
Das Offloadziel sollte nicht auf eine Bestätigung der übertragenen Benutzerdaten warten, bevor ein FIN-Segment gesendet wird. Das Offload-Ziel kann ein separates FIN-Segment senden, nachdem die Benutzerdaten übertragen wurden, oder das Offloadziel kann das FIN-Bit im TCP-Header des letzten gesendeten Benutzerdatensegments festlegen.
Aus Sicht des Offload-Ziels schließt das Senden eines FIN-Segments die Sendehälfte der Verbindung. Das Senden eines FIN-Segments schließt jedoch nicht die Empfangshälfte der Verbindung. Der Remotehost beendet die Empfangshälfte der Verbindung, indem eine der folgenden Aktionen an das Offloadziel gesendet wird:
- Ein FIN-Segment, das eine ordnungsgemäße Verbindung anfordert.
- Ein RST-Segment, das eine abgebrochene Verbindung anfordert.
Vor dem Offload von Zielanrufen NdisTcpOffloadDisconnectCompletemüssen alle offenen Sendeanforderungen für die Verbindung in derselben Reihenfolge abgeschlossen werden, in der sie an das Offloadziel übermittelt wurden.
obligatorische Antwort auf eine Verbindungsanforderung
Ein Offloadziel darf keine Verbindungsanforderung fehlschlagen, es sei denn, die angegebene TCP-Verbindung wird hochgeladen oder abgebrochen (z. B. weil der Remotehost ein RST-Segment an die Verbindung gesendet hat). Wenn ein Offload-Ziel eine Verbindungsanforderung nicht erfüllt, wird der Hoststapel die Disconnect-Anforderung später nicht erneut anfertigen.
Freigeben von Verbindungsressourcen
Das Offloadziel darf keine Ressourcen für die Verbindung freigeben, für die sie entweder eine abgebrochene oder ordnungsgemäße Trennung ausgegeben hat, bis der Hoststapel die Auslagerung der Verbindung beendet.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Fenster |
Header- | ndischimney.h (include Ndischimney.h) |
IRQL- | Beliebige Ebene |