W_TCP_OFFLOAD_DISCONNECT_HANDLER Rückruffunktion (ndischimney.h)

[Das TCP-Schornsteinauslagerungsfeature ist veraltet und sollte nicht verwendet werden.]

Die MiniportTcpOffloadDisconnect-Funktion schließt die Sendehälfte einer ausgeladenen TCP-Verbindung. Wenn es sich bei der durchzuführenden Trennung um eine ordnungsgemäße Trennung handelt, kann NDIS außerdem Anwendungsdaten an die MiniportTcpOffloadDisconnect-Funktion bereitstellen, die die Funktion vor dem Senden eines FIN-Segments übertragen muss.

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 Ablagezielbereich, in dem das Auslagerungsziel Zustandsinformationen zu diesem instance des Adapters verwaltet. Das Auslagerungsziel hat dieses Handle für NDIS bereitgestellt, wenn es aufgerufen hat. NdisMSetMiniportAttributes aus MiniportInitializeEx-Funktion .

[in] MiniportOffloadContext

Ein Zeiger auf einen Speicherort, der einen PVOID-Wert enthält. Dieser PVOID-Wert verweist auf den Miniportauslagerungskontext, der das Zustandsobjekt für die zu trennende TCP-Verbindung enthält. Das Auslagerungsziel hat diesen PVOID-Wert beim Ausladen des TCP-Verbindungszustandsobjekts angegeben.

[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 ist der Typ der Trennung, den das Auslagerungsziel ausführen muss:

TCP_DISCONNECT_ABORTIVE_CLOSE

Das Auslagerungsziel muss eine abgebrochene Trennung durchführen, indem ein RST-Segment gesendet wird.

TCP_DISCONNECT_GRACEFUL_CLOSE

Das Auslagerungsziel 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 Auslagerungsziel schließt die Verbindungsanforderung asynchron ab, indem es aufruft. NdisTcpOffloadDisconnectComplete.

Hinweise

Abhängig von der Flags-Einstellung führt die MiniportTcpOffloadDisconnect-Funktion eine abgebrochene Trennung oder eine ordnungsgemäße Trennung für die angegebene TCP-Verbindung aus.

Abbrechen der Trennung

Wenn Flags auf TCP_DISCONNECT_ABORTIVE_CLOSE festgelegt ist, führt das Auslagerungsziel eine abgebrochene Trennung durch, indem ein RST-Segment für die angegebene TCP-Verbindung gesendet wird.

Hinweis Dies ist die einzige instance, in der ein Auslagerungsziel ein RST-Segment senden kann.
 
Vor dem Aufrufen von NdisTcpOffloadDisconnectComplete-Funktion, um die abgebrochene Trennung abzuschließen, muss das Auslagerungsziel alle ausstehenden Sendeanforderungen für die Verbindung mit dem status Wert NDIS_STATUS_REQUEST_ABORTED abschließen. Das Auslagerungsziel schreibt diesen status Wert in den Status-Member jeder NET_BUFFER_LIST-Struktur in der verknüpften Liste, die an die NdisTcpOffloadSendComplete-Funktion .

Es spielt keine Rolle, ob das Auslagerungsziel die ausstehenden Sendeanforderungen vor oder nach dem Senden des RST-Segments beendet.

Wenn es ausstehende Empfangs- oder Ereignisanzeigen für die Verbindung gibt, darf das Auslagerungsziel nicht warten, bis diese Hinweise abgeschlossen sind, bevor ein RST-Segment gesendet wird. Das Auslagerungsziel muss die Verarbeitung von Empfangssegmenten für die Verbindung sofort beenden und keine Empfangssegmente bestätigen, einschließlich der angegebenen Empfangsdaten, die nicht von der Clientanwendung verwendet wurden.

Wenn Flags = TCP_DISCONNECT_ABORTIVE_CLOSE, enthält die NET_BUFFER-Struktur, die der NET_BUFFER_LIST-Struktur zugeordnet ist, auf die der NetBufferList-Zeiger verweist, keine Daten. Das heißt, das DataLength-Element der NET_BUFFER_DATA-Struktur im NetBufferHeader der NET_BUFFER-Struktur ist null.

Ordnungsgemäße Trennung

Wenn Flags auf TCP_DISCONNECT_GRACEFUL_CLOSE festgelegt ist, führt das Auslagerungsziel eine ordnungsgemäße Trennung durch, indem ein FIN-Segment für die angegebene TCP-Verbindung gesendet wird.

Wenn vor dem FIN-Segment keine Benutzerdaten gesendet werden sollen, enthält die NET_BUFFER-Struktur, die der NET_BUFFER_LIST-Struktur zugeordnet ist, auf die der NetBufferList-Zeiger verweist, keine Daten. Wenn Benutzerdaten gesendet werden sollen, enthalten die speicherdeskriptor-Listen (MDLs), die der NET_BUFFER-Struktur zugeordnet sind, die zu sendenden Benutzerdaten.

Das Auslagerungsziel sollte nicht auf eine Bestätigung der übertragenen Benutzerdaten warten, bevor ein FIN-Segment gesendet wird. Das Auslagerungsziel kann nach der Übertragung der Benutzerdaten ein separates FIN-Segment senden, oder das Auslagerungsziel kann das FIN-Bit im TCP-Header des letzten gesendeten Segments von Benutzerdaten festlegen.

Aus Sicht des Auslagerungsziels 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 er eine der folgenden Aktionen an das Auslagerungsziel sendet:

  • Ein FIN-Segment, das eine ordnungsgemäße Trennung anfordert.
  • Ein RST-Segment, das eine abgebrochene Trennung anfordert.
Nach dem Senden eines FIN-Segments kann das Auslagerungsziel Segmente für die Verbindung empfangen, bis der Remotehost eine ordnungsgemäße oder abgebrochene Trennung initiiert oder bis der lokale Host die Auslagerung der Verbindung beendet oder eine abgebrochene Trennung initiiert.

Vor dem Auslagern des Zielaufrufs NdisTcpOffloadDisconnectComplete muss alle ausstehenden Sendeanforderungen für die Verbindung in derselben Reihenfolge abschließen, in der sie an das Auslagerungsziel übermittelt wurden.

Obligatorische Antwort auf eine Trennungsanforderung

Bei einem Auslagerungsziel darf eine Verbindungsanforderung nicht fehlschlagen, es sei denn, die angegebene TCP-Verbindung wird hochgeladen oder abgebrochen (z. B. weil der Remotehost ein RST-Segment für die Verbindung gesendet hat). Wenn ein Auslagerungsziel eine Trennungsanforderung fehlschlägt, führt der Hoststapel die Verbindungsanforderung später nicht erneut aus.

Freigeben von Verbindungsressourcen

Das Auslagerungsziel darf keine Ressourcen für die Verbindung freigeben, für die es entweder eine abgebrochene oder ordnungsgemäße Trennung ausgestellt hat, bis der Hoststapel die Auslagerung der Verbindung beendet.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile ndischimney.h (include Ndischimney.h)
IRQL Beliebige Ebene

Weitere Informationen

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete