WSCInstallProvider 函数 (ws2spi.h)
语法
int WSCInstallProvider(
[in] LPGUID lpProviderId,
[in] const WCHAR *lpszProviderDllPath,
[in] const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
[in] DWORD dwNumberOfEntries,
[out] LPINT lpErrno
);
参数
[in] lpProviderId
指向提供程序的全局唯一标识符 (GUID) 的指针。
[in] lpszProviderDllPath
指向 Unicode 字符串的指针,该字符串包含提供程序 DLL 的加载路径。 此字符串遵循路径解析的常用规则,并且可以包含嵌入的环境字符串 (,如 %SystemRoot%) 。 当 Ws2_32.dll 随后必须代表应用程序加载提供程序 DLL 时,会扩展此类环境字符串。 展开任何嵌入的环境字符串后,Ws2_32.dll 将生成的字符串传递给 LoadLibrary 函数,后者会将提供程序加载到内存中。 有关详细信息,请参阅 LoadLibrary。
[in] lpProtocolInfoList
指向WSAProtocol_Info结构的数组 的 指针。 每个结构定义提供程序支持的协议、地址系列和套接字类型。
[in] dwNumberOfEntries
lpProtocolInfoList 数组中的条目数。
[out] lpErrno
如果函数失败,则为指向错误代码的指针。
返回值
如果 WSCInstallProvider 成功,则返回零。 否则,它将返回 SOCKET_ERROR,并在 lpErrno 参数中返回特定的错误代码。
错误代码 | 含义 |
---|---|
一个或多个参数不在用户地址空间的有效部分中。 | |
一个或多个参数无效。 | |
无法为缓冲区分配内存。 | |
发生不可恢复的错误。 此错误在以下几种情况下返回:提供程序已安装、用户缺少写入 Winsock 注册表所需的管理权限,或者在创建或安装目录条目时失败。 | |
不应失败的系统调用失败。 | |
可用内存不足。 如果内存不足,无法分配新的目录条目,则返回此错误。 |
注解
WSCInstallProvider 用于安装单个传输服务提供程序。 此例程为指定的提供程序创建必要的通用 Windows 套接字 2 配置信息。 它适用于基本协议、分层协议和协议链。 如果正在安装分层服务提供程序,则应使用 WSCInstallProviderAndChains 。 WSCInstallProviderAndChains 可以使用单个函数调用安装分层协议和一个或多个协议链。 若要使用 WSCInstallProvider 完成相同的工作,需要调用多个函数。
Winsock 2 适用于分层协议。 分层协议是仅实现更高级别的通信功能,同时依赖于基础传输堆栈与远程终结点进行实际数据交换的协议。 分层协议的一个示例是安全层,该安全层将协议添加到连接建立过程,以便执行身份验证并建立相互同意的加密方案。 此类安全协议通常需要基础可靠传输协议(如 TCP 或 SPX)的服务。 术语“基本协议”是指能够与远程终结点执行数据通信的协议,例如 TCP 或 SPX。 术语分层协议用于描述无法独立运行的协议。 然后,协议链将被定义为一个或多个分层协议,由基本协议串在一起并锚定。 基本协议将 WSAProtocol_Info 结构的 ChainLen 成员设置为 BASE_PROTOCOL定义为 1。 分层协议将WSAPROTOCOL_INFO结构的 ChainLen 成员设置为LAYERED_PROTOCOL定义为零。 协议链将 WSAPROTOCOL_INFO 结构的 ChainLen 成员设置为大于 1。
lpProtocolInfoList 参数包含要安装的协议条目的列表。 WSCInstallProvider 的调用方负责设置正确的协议条目。 lpProtocolInfoList 参数不得为 NULL。
成功完成此调用后,对 WSAEnumProtocols 或 WSCEnumProtocols 的任何 后续调用都将返回新创建的协议条目。 请注意,在 Windows 环境中,当 WSAEnumProtocols 和 WSCEnumProtocols 返回时,只有在 WSCInstallProvider 成功完成后通过调用 WSAStartup 创建的 Ws_32.dll 实例才会包含新条目。
成功后, WSCInstallProvider 将尝试通过调用 WSAProviderConfigChange 向已注册更改通知的所有相关应用程序发出警报。
WSCInstallProvider 函数只能由以 Administrators 组成员身份登录的用户调用。 如果 WSCInstallProvider 由不是 Administrators 组成员的用户调用,则函数调用将失败,并在 lpErrno 参数中返回WSANO_RECOVERY。 对于运行 Windows Vista 或 Windows Server 2008 的计算机,此函数也可能因为用户帐户控制 (UAC) 而失败。 如果包含此函数的应用程序由以管理员组成员身份登录(而不是内置管理员)的用户执行,则此调用将失败,除非应用程序已在清单文件中标记为 requestedExecutionLevel 设置为 requireAdministrator。 如果 Windows Vista 或 Windows Server 2008 上的应用程序缺少此清单文件,则作为管理员组成员(而不是内置管理员)登录的用户必须在增强的 shell 中执行应用程序,因为内置管理员 (RunAs 管理员) 才能使此功能成功。
任何文件安装或服务提供程序特定的配置必须由调用方执行。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | ws2spi.h |
Library | Ws2_32.lib |
DLL | Ws2_32.dll |