PFN_WSK_GET_LOCAL_ADDRESS funzione di callback (wsk.h)

La funzione WskGetLocalAddress recupera l'indirizzo di trasporto locale di un socket.

Sintassi

PFN_WSK_GET_LOCAL_ADDRESS PfnWskGetLocalAddress;

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

Parametri

[in] Socket

Puntatore a una struttura WSK_SOCKET che specifica l'oggetto socket per il socket sottoposto a query.

[out] LocalAddress

Puntatore a un buffer allocato del chiamante che riceve l'indirizzo di trasporto locale per il socket. Il buffer deve trovarsi nella memoria non a pagina. Il buffer deve anche essere abbastanza grande per contenere il tipo di struttura SOCKADDR specifico che corrisponde alla famiglia di indirizzi specificata dall'applicazione WSK al momento della creazione del socket.

Per un socket orientato alla connessione accettato dall'applicazione WSK in un socket di ascolto, la famiglia di indirizzi corrisponde alla famiglia di indirizzi specificata dall'applicazione WSK quando ha creato il socket di ascolto.

[in, out] Irp

Puntatore a un chiamante allocato IRP usato dal sottosistema WSK per completare l'operazione di recupero in modo asincrono. Per altre informazioni sull'uso di IRP con funzioni WSK, vedere Uso di IRP con Funzioni kernel Winsock.

Valore restituito

WskGetLocalAddress restituisce uno dei codici NTSTATUS seguenti:

Codice restituito Descrizione
STATUS_SUCCESS
L'indirizzo di trasporto locale per il socket è stato recuperato correttamente. L'IRP verrà completato con lo stato di esito positivo.
STATUS_PENDING
Il sottosistema WSK non è riuscito a recuperare immediatamente l'indirizzo di trasporto locale per il socket. Il sottosistema WSK completerà l'IRP dopo aver recuperato l'indirizzo di trasporto locale per il socket. Lo stato dell'operazione di recupero verrà restituito nel campo IoStatus.Status dell'IRP .
STATUS_INVALID_DEVICE_STATE
Il socket non è associato a un indirizzo di trasporto locale. L'IRP verrà completato con lo stato di errore.
STATUS_FILE_FORCED_CLOSED
Il socket non è più funzionale. L'IRP verrà completato con lo stato di errore. L'applicazione WSK deve chiamare la funzione WskCloseSocket per chiudere il socket il prima possibile.
Altri codici di stato
Si è verificato un errore. L'IRP verrà completato con lo stato di errore.

Commenti

Un'applicazione WSK può chiamare la funzione WskGetLocalAddress solo su un socket associato a un indirizzo di trasporto locale.

Un socket di ascolto, datagram o stream è associato a un indirizzo di trasporto locale quando l'applicazione WSK chiama la funzione WskBind .

Un socket orientato alla connessione è associato a un indirizzo di trasporto locale in uno dei modi seguenti:

  • L'applicazione WSK chiama la funzione WskBind .
  • L'applicazione WSK crea, associa e connette il socket chiamando la funzione WskSocketConnect .
  • Il sottosistema WSK associa il socket quando l'applicazione WSK accetta una richiesta di connessione in ingresso in un socket in ascolto.
La funzione WskGetLocalAddress è particolarmente utile per determinare l'indirizzo di trasporto locale specifico assegnato a un socket dal protocollo di trasporto quando il socket è stato associato all'indirizzo jolly locale. Per un socket orientato alla connessione associato all'indirizzo jolly locale, l'indirizzo di trasporto locale potrebbe non essere assegnato al socket dal protocollo di trasporto finché il socket non è connesso a un indirizzo di trasporto remoto. Il passaggio in cui viene assegnato l'indirizzo di trasporto locale al socket è dipendente dal protocollo di trasporto. Per TCP, il numero di porta viene assegnato quando è associato un socket orientato alla connessione, ma l'indirizzo IP non viene assegnato fino a quando il socket non è connesso.

Se la funzione WskGetLocalAddress restituisce STATUS_PENDING, il buffer a cui punta il parametro LocalAddress deve rimanere valido fino al completamento dell'IRP. Se l'applicazione WSK alloca il buffer con una delle funzioni ExAllocateXxx , non può liberare la memoria con la funzione ExFreeXxx corrispondente fino al completamento dell'IRP. Se l'applicazione WSK ha allocato il buffer nello stack, non può restituire dalla funzione che chiama la funzione WskGetLocalAddress fino al completamento dell'IRP.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

Vedi anche

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