PFN_WSK_DISCONNECT Rückruffunktion (wsk.h)

Die WskDisconnect-Funktion trennt einen verbindungsorientierten Oder Stream-Socket von einer Remotetransportadresse.

Syntax

PFN_WSK_DISCONNECT PfnWskDisconnect;

NTSTATUS PfnWskDisconnect(
  [in]           PWSK_SOCKET Socket,
  [in, optional] PWSK_BUF Buffer,
  [in]           ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

Parameter

[in] Socket

Ein Zeiger auf eine WSK_SOCKET-Struktur , die das Socketobjekt für den Socket angibt, der getrennt wird.

[in, optional] Buffer

Ein Zeiger auf eine WSK_BUF-Struktur . Diese Struktur beschreibt einen Datenpuffer, der Daten enthält, die vom WSK-Subsystem an die Remotetransportadresse übertragen werden sollen, bevor der Socket getrennt wird. Wenn diese Daten nicht übertragen werden sollen, legt die WSK-Anwendung diesen Zeiger auf NULL fest. Wenn WSK_FLAG_ABORTIVE im Flags-Parameter angegeben ist, muss der PufferparameterNULL sein.

[in] Flags

Ein ULONG-Wert, der das folgende Flag oder null enthält:

WSK_FLAG_ABORTIVE

Weist das WSK-Subsystem an, eine abgebrochene Trennung des Sockets durchzuführen. Wenn eine WSK-Anwendung dieses Flag nicht angibt, führt das WSK-Subsystem eine ordnungsgemäße Trennung des Sockets durch.

[in, out] Irp

Ein Zeiger auf eine vom Aufrufer zugewiesene IRP, die das WSK-Subsystem verwendet, um den Verbindungsvorgang asynchron abzuschließen. Weitere Informationen zur Verwendung von IRPs mit WSK-Funktionen finden Sie unter Verwenden von IRPs mit Winsock-Kernelfunktionen.

Rückgabewert

WskDisconnect gibt einen der folgenden NTSTATUS-Codes zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS
Der Socket wurde erfolgreich von der Remotetransportadresse getrennt. Die IRP wird erfolgreich status abgeschlossen.
STATUS_PENDING
Das WSK-Subsystem konnte den Socket nicht sofort trennen. Das WSK-Subsystem schließt das IRP ab, nachdem es den Socket von der Remotetransportadresse getrennt hat. Die status des Verbindungsvorgangs wird im Feld IoStatus.Status des IRP zurückgegeben.
STATUS_FILE_FORCED_CLOSED
Der Socket ist nicht mehr funktionsfähig. Die IRP wird mit einem Fehler status abgeschlossen. Die WSK-Anwendung muss die WskCloseSocket-Funktion aufrufen, um den Socket so schnell wie möglich zu schließen.
Andere status Codes
Ein Fehler ist aufgetreten. Die IRP wird mit einem Fehler status abgeschlossen.

Hinweise

Eine WSK-Anwendung kann die WskDisconnect-Funktion nur für einen verbindungsorientierten Oder Streamsocket aufrufen, den sie zuvor mit einer Remotetransportadresse verbunden hat, oder auf einem Socket, den sie auf einem Abhörsocket akzeptiert hat.

WskDisconnect bewirkt, dass das WSK-Subsystem die Remotetransportadresse über die für den zugrunde liegenden Transport geeigneten Mittel benachrichtigt, dass die Verbindung getrennt wird. Wenn der Buffer-Parameter nicht NULL ist, überträgt das WSK-Subsystem die Daten im Puffer an die Remotetransportadresse, bevor der Socket getrennt wird.

Wenn eine ordnungsgemäße Trennung ausgeführt wird, wartet das WSK-Subsystem, bis alle ausstehenden Übertragungsdaten gesendet wurden, bevor der Socket getrennt wird. Nachdem der Socket getrennt wurde, kann die WSK-Anwendung keine weiteren Daten an die Remotetransportadresse senden. Die WSK-Anwendung kann jedoch weiterhin zusätzliche Daten von der Remotetransportadresse empfangen, bis die Remoteanwendung das Ende des Sockets trennt.

Beachten Sie, dass nicht alle Transporte halb geöffnete Verbindungen unterstützen. Wenn ein Transport keine halb geöffneten Verbindungen unterstützt, empfängt die WSK-Anwendung keine zusätzlichen Daten von der Remotetransportadresse, nachdem eine ordnungsgemäße Trennung durchgeführt wurde.

Bei einer ordnungsgemäßen Trennung wird die IRP nur abgeschlossen, wenn der Trennungsvorgang durch das Transportprotokoll vollständig abgeschlossen ist. Bei einigen Transportprotokollen wird die IRP möglicherweise nicht abgeschlossen, wenn ein Problem beim Übertragen von Daten an die Remotetransportadresse auftritt. In dieser Situation kann die WSK-Anwendung entweder die WskDisconnect-Funktion erneut aufrufen und das WSK_FLAG_ABORTIVE-Flag angeben oder die WskCloseSocket-Funktion aufrufen. In beiden Situationen trennt das WSK-Subsystem den Socket abgebrochen und erzwingt den Abschluss des ausstehenden IRP.

Wenn eine abgebrochene Trennung ausgeführt wird, bricht das WSK-Subsystem alle laufenden und ausstehenden Übertragungsvorgänge ab und wartet nicht, bis der Socket getrennt wird. Nach einer abgebrochenen Verbindung kann die WSK-Anwendung keine zusätzlichen Daten an die Remotetransportadresse senden oder keine zusätzlichen Daten von der Remotetransportadresse empfangen.

Eine WSK-Anwendung kann die Verbindung vollständig schließen, indem die WskCloseSocket-Funktion aufgerufen wird .

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Universell
Header wsk.h (einschließen von Wsk.h)
IRQL <= DISPATCH_LEVEL

Weitere Informationen

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect