PFN_WSK_GET_LOCAL_ADDRESS Rückruffunktion (wsk.h)

Die WskGetLocalAddress-Funktion ruft die lokale Transportadresse eines Sockets ab.

Syntax

PFN_WSK_GET_LOCAL_ADDRESS PfnWskGetLocalAddress;

NTSTATUS PfnWskGetLocalAddress(
  [in]      PWSK_SOCKET Socket,
  [out]     PSOCKADDR LocalAddress,
  [in, out] PIRP Irp
)
{...}

Parameter

[in] Socket

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

[out] LocalAddress

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der die lokale Transportadresse für den Socket empfängt. Der Puffer muss sich im Nicht-Auslagerungsspeicher befinden. Der Puffer muss auch groß genug sein, um den spezifischen SOCKADDR-Strukturtyp zu enthalten, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Sockets angegeben hat.

Bei einem verbindungsorientierten Socket, den die WSK-Anwendung für einen Lauschsocket akzeptiert hat, entspricht die Adressfamilie der Adressfamilie, die die WSK-Anwendung beim Erstellen des Lauschockets angegeben hat.

[in, out] Irp

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

Rückgabewert

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

Rückgabecode Beschreibung
STATUS_SUCCESS
Die lokale Transportadresse für den Socket wurde erfolgreich abgerufen. Die IRP wird erfolgreich status abgeschlossen.
STATUS_PENDING
Das WSK-Subsystem konnte die lokale Transportadresse für den Socket nicht sofort abrufen. Das WSK-Subsystem schließt das IRP ab, nachdem es die lokale Transportadresse für den Socket abgerufen hat. Die status des Abrufvorgangs wird im Feld IoStatus.Status des IRP zurückgegeben.
STATUS_INVALID_DEVICE_STATE
Der Socket ist nicht an eine lokale Transportadresse gebunden. Die IRP wird mit einem Fehler status abgeschlossen.
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 WskGetLocalAddress-Funktion nur für einen Socket aufrufen, der an eine lokale Transportadresse gebunden wurde.

Ein Lausch-, Datagramm- oder Streamsocket wird an eine lokale Transportadresse gebunden, wenn die WSK-Anwendung die WskBind-Funktion aufruft .

Ein verbindungsorientierter Socket wird auf eine der folgenden Arten an eine lokale Transportadresse gebunden:

  • Die WSK-Anwendung ruft die WskBind-Funktion auf .
  • Die WSK-Anwendung erstellt, bindet den Socket und stellt eine Verbindung her, indem die WskSocketConnect-Funktion aufgerufen wird.
  • Das WSK-Subsystem bindet den Socket, wenn die WSK-Anwendung eine eingehende Verbindungsanforderung für einen lauschenden Socket akzeptiert.
Die WskGetLocalAddress-Funktion ist besonders nützlich, um die spezifische lokale Transportadresse zu ermitteln, die einem Socket vom Transportprotokoll zugewiesen wurde, als der Socket an die lokale Wildcardadresse gebunden wurde. Bei einem verbindungsorientierten Socket, der an die lokale Wildcardadresse gebunden war, wird die lokale Transportadresse möglicherweise erst durch das Transportprotokoll dem Socket zugewiesen, wenn der Socket mit einer Remotetransportadresse verbunden ist. Der Schritt, in dem die lokale Transportadresse dem Socket zugewiesen wird, ist vom Transportprotokoll abhängig. Bei TCP wird die Portnummer zugewiesen, wenn ein verbindungsorientierter Socket gebunden ist, aber die IP-Adresse erst zugewiesen wird, wenn der Socket verbunden ist.

Wenn die WskGetLocalAddress-Funktion STATUS_PENDING zurückgibt, muss der Puffer, auf den der LocalAddress-Parameter verweist, gültig bleiben, bis der IRP abgeschlossen ist. Wenn die WSK-Anwendung den Puffer mit einer der ExAllocateXxx-Funktionen zugeordnet hat, kann sie den Speicher mit der entsprechenden ExFreeXxx-Funktion erst freigeben, wenn die IRP abgeschlossen ist. Wenn die WSK-Anwendung den Puffer im Stapel zugeordnet hat, kann sie erst nach Abschluss des IRP von der Funktion zurückgeben, die die WskGetLocalAddress-Funktion aufruft.

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

SOCKADDR

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskAccept

WskAcceptEvent

WskBind

WskCloseSocket

WskConnect

WskGetRemoteAddress

WskSocketConnect