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 代码之一:
返回代码 | 说明 |
---|---|
|
已成功检索到套接字的本地传输地址。 IRP 将以成功状态完成。 |
|
WSK 子系统无法立即检索套接字的本地传输地址。 WSK 子系统将在检索到套接字的本地传输地址后完成 IRP。 检索操作的状态将在 IRP 的 IoStatus.Status 字段中返回。 |
|
套接字未绑定到本地传输地址。 IRP 将以失败状态完成。 |
|
套接字不再正常工作。 IRP 将以失败状态完成。 WSK 应用程序必须调用 WskCloseSocket 函数以尽快关闭套接字。 |
|
出现了错误。 IRP 将以失败状态完成。 |
注解
WSK 应用程序只能在已绑定到本地传输地址的套接字上调用 WskGetLocalAddress 函数。
当 WSK 应用程序调用 WskBind 函数时,侦听、数据报或流套接字绑定到本地传输地址。
以下列方式之一将面向连接的套接字绑定到本地传输地址:
- WSK 应用程序调用 WskBind 函数。
- WSK 应用程序通过调用 WskSocketConnect 函数创建、绑定和连接套接字。
- 当 WSK 应用程序接受侦听套接字上的传入连接请求时,WSK 子系统会绑定套接字。
如果 WskGetLocalAddress 函数返回STATUS_PENDING,则 LocalAddress 参数指向的缓冲区必须保持有效,直到 IRP 完成。 如果 WSK 应用程序使用 ExAllocateXxx 函数之一分配了缓冲区,则在 IRP 完成之前,它无法使用相应的 ExFreeXxx 函数释放内存。 如果 WSK 应用程序在堆栈上分配了缓冲区,则在 IRP 完成之前,它无法从调用 WskGetLocalAddress 函数的函数返回。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 通用 |
标头 | wsk.h (包括 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |