PFN_WSK_GET_LOCAL_ADDRESS回调函数 (wsk.h)

WskGetLocalAddress 函数检索套接字的本地传输地址。

语法

PFN_WSK_GET_LOCAL_ADDRESS PfnWskGetLocalAddress;

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

参数

[in] Socket

指向 WSK_SOCKET 结构的指针,该结构指定正在查询的套接字的套接字对象。

[out] LocalAddress

指向调用方分配的缓冲区的指针,该缓冲区接收套接字的本地传输地址。 缓冲区必须位于非分页内存中。 缓冲区还必须足够大,以包含与 WSK 应用程序在创建套接字时指定的地址系列相对应的特定 SOCKADDR 结构类型。

对于 WSK 应用程序在侦听套接字上接受的面向连接的套接字,地址系列与 WSK 应用程序在创建侦听套接字时指定的地址系列相同。

[in, out] Irp

指向调用方分配的 IRP 的指针,WSK 子系统使用该 IRP 以异步方式完成检索操作。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

返回值

WskGetLocalAddress 返回以下 NTSTATUS 代码之一:

返回代码 说明
STATUS_SUCCESS
已成功检索到套接字的本地传输地址。 IRP 将以成功状态完成。
STATUS_PENDING
WSK 子系统无法立即检索套接字的本地传输地址。 WSK 子系统将在检索到套接字的本地传输地址后完成 IRP。 检索操作的状态将在 IRP 的 IoStatus.Status 字段中返回。
STATUS_INVALID_DEVICE_STATE
套接字未绑定到本地传输地址。 IRP 将以失败状态完成。
STATUS_FILE_FORCED_CLOSED
套接字不再正常工作。 IRP 将以失败状态完成。 WSK 应用程序必须调用 WskCloseSocket 函数以尽快关闭套接字。
其他状态代码
出现了错误。 IRP 将以失败状态完成。

注解

WSK 应用程序只能在已绑定到本地传输地址的套接字上调用 WskGetLocalAddress 函数。

当 WSK 应用程序调用 WskBind 函数时,侦听、数据报或流套接字绑定到本地传输地址。

以下列方式之一将面向连接的套接字绑定到本地传输地址:

  • WSK 应用程序调用 WskBind 函数。
  • WSK 应用程序通过调用 WskSocketConnect 函数创建、绑定和连接套接字。
  • 当 WSK 应用程序接受侦听套接字上的传入连接请求时,WSK 子系统会绑定套接字。
WskGetLocalAddress 函数对于确定在套接字绑定到本地通配符地址时由传输协议分配给套接字的特定本地传输地址特别有用。 对于绑定到本地通配符地址的面向连接的套接字,在套接字连接到远程传输地址之前,传输协议可能不会将本地传输地址分配给套接字。 将本地传输地址分配给套接字的步骤取决于传输协议。 对于 TCP,在绑定面向连接的套接字时分配端口号,但在连接套接字之前不会分配 IP 地址。

如果 WskGetLocalAddress 函数返回STATUS_PENDING,则 LocalAddress 参数指向的缓冲区必须保持有效,直到 IRP 完成。 如果 WSK 应用程序使用 ExAllocateXxx 函数之一分配了缓冲区,则在 IRP 完成之前,它无法使用相应的 ExFreeXxx 函数释放内存。 如果 WSK 应用程序在堆栈上分配了缓冲区,则在 IRP 完成之前,它无法从调用 WskGetLocalAddress 函数的函数返回。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 通用
标头 wsk.h (包括 Wsk.h)
IRQL <= DISPATCH_LEVEL

另请参阅

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