WSAProviderConfigChange 函数 (winsock2.h)

当提供程序配置发生更改时, WSAProviderConfigChange 函数会通知应用程序。

语法

INT WSAAPI WSAProviderConfigChange(
  [in, out] LPHANDLE                           lpNotificationHandle,
  [in]      LPWSAOVERLAPPED                    lpOverlapped,
  [in]      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

参数

[in, out] lpNotificationHandle

指向通知句柄的指针。 如果通知句柄设置为 NULL , (句柄值而不是指针本身) ,则此函数在 lpNotificationHandle 指向的位置返回通知句柄。

[in] lpOverlapped

指向 WSAOVERLAPPED 结构的指针。

[in] lpCompletionRoutine

类型:_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

指向在收到提供程序更改通知时调用的完成例程的指针。

返回值

如果未发生错误, 则 WSAProviderConfigChange 返回 0。 否则,将返回值 SOCKET_ERROR,并且可以通过调用 WSAGetLastError 检索特定的错误代码。 错误代码 WSA_IO_PENDING 指示重叠操作已成功启动,完成 (,因此稍后将指示更改事件) 。

错误代码 含义
WSANOTINITIALIZED
在使用此函数之前,必须成功调用 WSAStartup
WSAENETDOWN
网络子系统发生故障。
WSA_NOT_ENOUGH_MEMORY
可用内存不足,无法完成操作。
WSA_INVALID_HANDLE
lpNotificationHandle 参数指向的值不是有效的通知句柄。
WSAEOPNOTSUPP
当前操作系统环境不支持在不重启的情况下安装或删除提供程序。

注解

WSAProviderConfigChange 函数通知提供程序的应用程序, (传输和命名空间) 安装或删除支持此类配置更改的 Windows 操作环境中无需重启。 (lpNotificationHandle 参数指向 NULL 句柄) 首次调用时,此函数将立即完成,并在 lpNotificationHandle 指向的位置返回通知句柄,可在后续调用中用于接收提供程序安装和删除通知。 第二次和任何后续调用仅在提供程序信息自调用以来发生更改时完成,预期 (但不要求) 应用程序在对 WSAProviderConfigChange 的后续调用中使用重叠 I/O,在这种情况下,调用将立即返回,并且将使用通过指定的重叠完成参数选择的完成机制通知应用程序提供程序配置更改。

WSAProviderConfigChange 返回的通知句柄类似于任何常规操作系统句柄,当不再需要) 使用 Windows CloseHandle 调用时,应将其关闭 (。

以下操作序列可用于保证应用程序始终具有最新的协议配置信息:

  • 调用 WSAProviderConfigChange
  • 调用 WSAEnumProtocols 和/或 WSAEnumNameSpaceProviders
  • 每当 WSAProviderConfigChange 通过阻塞或重叠的 I/O) 通知应用程序提供程序配置更改 (时,都应重复整个操作序列。
Windows 8.1Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。

要求

要求
最低受支持的客户端 Windows 8.1,Windows Vista [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 winsock2.h
Library Ws2_32.lib
DLL Ws2_32.dll

另请参阅

CloseHandle

WSAEnumNameSpaceProviders

WSAEnumProtocols

Winsock 函数

Winsock 参考