PFN_WSK_GET_REMOTE_ADDRESS回调函数 (wsk.h)

WskGetRemoteAddress 函数检索面向连接的或流套接字的远程传输地址。

语法

PFN_WSK_GET_REMOTE_ADDRESS PfnWskGetRemoteAddress;

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

参数

[in] Socket

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

[out] RemoteAddress

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

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

[in, out] Irp

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

返回值

WskGetRemoteAddress 返回以下 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 应用程序只能在已连接到远程传输地址的面向连接的或流套接字上调用 WskGetRemoteAddress 函数。 流套接字通过调用 WskConnect 函数连接到远程传输地址。 面向连接的套接字通过以下方式之一连接到远程传输地址:

  • WSK 应用程序调用 WskConnect 函数。
  • WSK 应用程序通过调用 WskSocketConnect 函数创建、绑定和连接套接字。
  • 当 WSK 应用程序接受侦听套接字上的传入连接请求时,WSK 子系统将连接套接字。
如果 WskGetRemoteAddress 函数返回STATUS_PENDING, 则 RemoteAddress 参数指向的缓冲区必须保持有效,直到 IRP 完成。 如果 WSK 应用程序使用 ExAllocateXxx 函数之一分配了缓冲区,则在 IRP 完成之前,它无法使用相应的 ExFreeXxx 函数释放内存。 如果 WSK 应用程序在堆栈上分配了缓冲区,则在 IRP 完成之前,它无法从调用 WskGetRemoteAddress 函数的函数返回。

要求

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

另请参阅

SOCKADDR

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskAccept

WskAcceptEvent

WskBind

WskCloseSocket

WskConnect

WskGetLocalAddress

WskSocketConnect