PFN_WSK_GET_LOCAL_ADDRESS función de devolución de llamada (wsk.h)

La función WskGetLocalAddress recupera la dirección de transporte local de un socket.

Sintaxis

PFN_WSK_GET_LOCAL_ADDRESS PfnWskGetLocalAddress;

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

Parámetros

[in] Socket

Puntero a una estructura WSK_SOCKET que especifica el objeto de socket para el socket que se está consultando.

[out] LocalAddress

Puntero a un búfer asignado por el autor de la llamada que recibe la dirección de transporte local del socket. El búfer debe encontrarse en memoria no paginada. El búfer también debe ser lo suficientemente grande como para contener el tipo de estructura SOCKADDR específico que corresponde a la familia de direcciones que especificó la aplicación WSK cuando creó el socket.

Para un socket orientado a la conexión que la aplicación WSK aceptó en un socket de escucha, la familia de direcciones es la misma que la familia de direcciones que especificó la aplicación WSK cuando creó el socket de escucha.

[in, out] Irp

Puntero a un IRP asignado por el autor de la llamada que usa el subsistema WSK para completar la operación de recuperación de forma asincrónica. Para obtener más información sobre el uso de IRP con funciones WSK, consulte Uso de IRP con funciones del kernel de Winsock.

Valor devuelto

WskGetLocalAddress devuelve uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
La dirección de transporte local del socket se recuperó correctamente. El IRP se completará con el estado correcto.
STATUS_PENDING
El subsistema WSK no pudo recuperar la dirección de transporte local del socket inmediatamente. El subsistema WSK completará el IRP después de recuperar la dirección de transporte local del socket. El estado de la operación de recuperación se devolverá en el campo IoStatus.Status del IRP.
STATUS_INVALID_DEVICE_STATE
El socket no está enlazado a una dirección de transporte local. El IRP se completará con el estado de error.
STATUS_FILE_FORCED_CLOSED
El socket ya no es funcional. El IRP se completará con el estado de error. La aplicación WSK debe llamar a la función WskCloseSocket para cerrar el socket lo antes posible.
Otros códigos de estado
Se produjo un error. El IRP se completará con el estado de error.

Comentarios

Una aplicación WSK puede llamar a la función WskGetLocalAddress solo en un socket enlazado a una dirección de transporte local.

Un socket de escucha, datagrama o secuencia está enlazado a una dirección de transporte local cuando la aplicación WSK llama a la función WskBind .

Un socket orientado a la conexión se enlaza a una dirección de transporte local de una de las siguientes maneras:

  • La aplicación WSK llama a la función WskBind .
  • La aplicación WSK crea, enlaza y conecta el socket mediante una llamada a la función WskSocketConnect .
  • El subsistema WSK enlaza el socket cuando la aplicación WSK acepta una solicitud de conexión entrante en un socket de escucha.
La función WskGetLocalAddress es especialmente útil para determinar la dirección de transporte local específica asignada a un socket por el protocolo de transporte cuando el socket estaba enlazado a la dirección comodín local. Para un socket orientado a la conexión que estaba enlazado a la dirección comodín local, es posible que el protocolo de transporte local no lo asigne el protocolo de transporte hasta que el socket esté conectado a una dirección de transporte remota. El paso donde se asigna la dirección de transporte local al socket depende del protocolo de transporte. Para TCP, el número de puerto se asigna cuando se enlaza un socket orientado a la conexión, pero la dirección IP no se asigna hasta que el socket está conectado.

Si la función WskGetLocalAddress devuelve STATUS_PENDING, el búfer al que apunta el parámetro LocalAddress debe permanecer válido hasta que se complete el IRP. Si la aplicación WSK asignó el búfer con una de las funciones ExAllocateXxx , no podrá liberar la memoria con la función ExFreeXxx correspondiente hasta que se complete el IRP. Si la aplicación WSK asignó el búfer en la pila, no puede devolverse de la función que llama a la función WskGetLocalAddress hasta que se complete el IRP.

Requisitos

   
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Universal
Header wsk.h (incluya Wsk.h)
IRQL <= DISPATCH_LEVEL

Consulte también

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