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 中提供了特定的错误代码。

错误代码 含义
WSAEINVAL
建议的句柄无效。
 
 

注解

WPUModifyIFSHandle 句柄允许 WS2_32.dll 通过返回提供的 IFS 句柄的可能修改版本来简化其内部操作。 就操作系统而言,保证返回的句柄与建议的句柄无法区分。 IFS 提供程序必须先调用此函数,然后才能将任何新创建的套接字描述符返回到服务提供程序。 服务提供程序将仅对任何后续套接字操作使用修改后的句柄。 此例程仅由其套接字描述符为真实 IFS 句柄的 IFS 提供程序使用。

 
**分层服务提供程序注意事项**

此过程也可能由分层在基本 IFS 提供程序之上的分层提供程序使用,并希望将基本提供程序的套接字句柄公开为自己的句柄,而不是使用 WPUCreateSocketHandle 调用创建它们。 希望从链中的下一层接收的 IFS 套接字句柄的分层提供程序可以调用 WPUModifyIFSHandle,将自己的目录条目 ID 作为 dwCatalogEntryId 传递。 这会通知 Windows 套接字 DLL 此层(而不是下一层)应是涉及该套接字句柄的 SPI 调用的目标。

如果采用此方法,分层提供程序应注意几个限制。

  • 提供程序应在 WSPStartup 时返回的过程调度表中公开 LPWSPSendLPWSPRecv 的基本提供程序入口点,以确保 Windows 套接字 SPI 客户端对这些函数的访问尽可能高效。
  • 提供程序不能依赖于针对所有 I/O 调用的 LPWSPSendLPWSPRecv 函数,尤其是在 I/O 系统函数 ReadFileWriteFile 的情况下。 即使分层提供程序将自己的这些函数入口点放入过程调度表中,这些函数也会绕过分层提供程序并直接调用基本 IFS 提供程序的实现。
  • 提供程序不能依赖于使用 LPWSPSend、LPWSPSendToLPWSPRecvLPWSPRecvFromLPWSPIoctl 对重叠 I/O 进行后处理的能力。 后处理通知可能通过完成端口发生,并完全绕过分层提供程序。 分层提供程序无法确定已使用完成端口,也无法确定它是什么端口。 分层提供程序无法将自身插入通知序列。
  • 提供程序应使用原始重叠参数(例如 WSAOVERLAPPED 结构和完成例程指针 () )将所有重叠的 I/O 请求直接传递到基本提供程序。 提供程序应公开 WSPGetOverlappedResult 的基本提供程序入口点。 由于某些重叠的 I/O 请求可以完全绕过分层提供程序,因此分层提供程序无法可靠地标记 WSAOVERLAPPED 结构以确定它可以报告结果的结构,以及哪些请求必须传递到基础提供程序的 WSPGetOverlappedResult。 这实际上意味着 LPWSPIoctl 必须是到基础提供程序的直通操作。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 ws2spi.h

另请参阅

WPUCreateSocketHandle

WSAOVERLAPPED

WSPGetOverlappedResult

LPWSPIoctl

LPWSPRecv

LPWSPSend