WPUModifyIFSHandle 函数 (ws2spi.h)
WPUModifyIFSHandle 函数从 Ws2_32.dll 接收可能) 修改的 IFS 句柄 (。
语法
SOCKET WPUModifyIFSHandle(
[in] DWORD dwCatalogEntryId,
[in] SOCKET ProposedHandle,
[out] LPINT lpErrno
);
参数
[in] dwCatalogEntryId
标识调用服务提供商的描述符。
[in] ProposedHandle
提供程序分配的 IFS 句柄。
[out] lpErrno
指向错误代码的指针。
返回值
如果未发生错误, WPUModifyIFSHandle 将返回修改后的套接字句柄。 否则,它将返回INVALID_SOCKET,并且 lpErrno 中提供了特定的错误代码。
错误代码 | 含义 |
---|---|
建议的句柄无效。 |
注解
WPUModifyIFSHandle 句柄允许 WS2_32.dll 通过返回提供的 IFS 句柄的可能修改版本来简化其内部操作。 就操作系统而言,保证返回的句柄与建议的句柄无法区分。 IFS 提供程序必须先调用此函数,然后才能将任何新创建的套接字描述符返回到服务提供程序。 服务提供程序将仅对任何后续套接字操作使用修改后的句柄。 此例程仅由其套接字描述符为真实 IFS 句柄的 IFS 提供程序使用。
此过程也可能由分层在基本 IFS 提供程序之上的分层提供程序使用,并希望将基本提供程序的套接字句柄公开为自己的句柄,而不是使用 WPUCreateSocketHandle 调用创建它们。 希望从链中的下一层接收的 IFS 套接字句柄的分层提供程序可以调用 WPUModifyIFSHandle,将自己的目录条目 ID 作为 dwCatalogEntryId 传递。 这会通知 Windows 套接字 DLL 此层(而不是下一层)应是涉及该套接字句柄的 SPI 调用的目标。
如果采用此方法,分层提供程序应注意几个限制。
- 提供程序应在 WSPStartup 时返回的过程调度表中公开 LPWSPSend 和 LPWSPRecv 的基本提供程序入口点,以确保 Windows 套接字 SPI 客户端对这些函数的访问尽可能高效。
- 提供程序不能依赖于针对所有 I/O 调用的 LPWSPSend 和 LPWSPRecv 函数,尤其是在 I/O 系统函数 ReadFile 和 WriteFile 的情况下。 即使分层提供程序将自己的这些函数入口点放入过程调度表中,这些函数也会绕过分层提供程序并直接调用基本 IFS 提供程序的实现。
- 提供程序不能依赖于使用 LPWSPSend、LPWSPSendTo、LPWSPRecv、LPWSPRecvFrom 或 LPWSPIoctl 对重叠 I/O 进行后处理的能力。 后处理通知可能通过完成端口发生,并完全绕过分层提供程序。 分层提供程序无法确定已使用完成端口,也无法确定它是什么端口。 分层提供程序无法将自身插入通知序列。
- 提供程序应使用原始重叠参数(例如 WSAOVERLAPPED 结构和完成例程指针 () )将所有重叠的 I/O 请求直接传递到基本提供程序。 提供程序应公开 WSPGetOverlappedResult 的基本提供程序入口点。 由于某些重叠的 I/O 请求可以完全绕过分层提供程序,因此分层提供程序无法可靠地标记 WSAOVERLAPPED 结构以确定它可以报告结果的结构,以及哪些请求必须传递到基础提供程序的 WSPGetOverlappedResult。 这实际上意味着 LPWSPIoctl 必须是到基础提供程序的直通操作。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | ws2spi.h |