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
指向 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 应用程序在堆栈上分配了缓冲区,则它无法从调用 WskGetLocalAddress 函数的函数返回,直到 IRP 完成后。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 普遍 |
标头 | wsk.h (包括 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |