WSCInstallProvider64_32 函数 (ws2spi.h)

[**WSCInstallProvider64_32** 不再可用于 Windows Vista。 请改用 WSCInstallProviderWSCInstallProviderAndChains。]

WSCInstallProvider64_32函数将指定的传输服务提供程序安装到 64 位计算机上的 32 位和 64 位系统配置数据库中。

语法

int WSCInstallProvider64_32(
  [in]  LPGUID                    lpProviderId,
  [in]  const WCHAR               *lpszProviderDllPath,
  [in]  const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  [in]  DWORD                     dwNumberOfEntries,
  [out] LPINT                     lpErrno
);

参数

[in] lpProviderId

指向提供程序的全局唯一标识符的指针 (GUID) 。

[in] lpszProviderDllPath

指向 Unicode 字符串的指针,该字符串包含提供程序 64 位 DLL 的加载路径。 此字符串遵循路径解析的常规规则,并可以包含嵌入的环境字符串 (,例如 %SystemRoot%) 。 当 Ws2_32.dll 随后必须代表应用程序加载提供程序 DLL 时,会扩展此类环境字符串。 展开任何嵌入的环境字符串后,Ws2_32.dll 会将生成的字符串传递给 LoadLibrary 函数,后者会将提供程序加载到内存中。 有关详细信息,请参阅 LoadLibrary

[in] lpProtocolInfoList

指向 WSAProtocol_Info 结构的数组的指针。 每个结构定义提供程序支持的协议、地址系列和套接字类型。

[in] dwNumberOfEntries

lpProtocolInfoList 数组中的条目数。

[out] lpErrno

指向错误代码(如果函数失败)的指针。

返回值

如果 WSCInstallProvider64_32 成功,则返回零。 否则,它将返回 SOCKET_ERROR,并在 lpErrno 参数中返回特定的错误代码。

错误代码 含义
WSAEFAULT
一个或多个参数不在用户地址空间的有效部分。
WSAEINVAL
一个或多个参数无效。
WSAENOBUFS
无法为缓冲区分配内存。
WSANO_RECOVERY
发生了不可恢复的错误。 此错误在以下几种情况下返回:提供程序已安装、用户缺少写入 Winsock 注册表所需的管理权限,或者在创建或安装目录条目时失败。
WSASYSCALLFAILURE
不应失败的系统调用失败。
WSA_NOT_ENOUGH_MEMORY
可用内存不足。 如果内存不足,无法分配新的目录条目,则返回此错误。

注解

WSCInstallProvider64_32WSCInstallProviderAndChains64_32 函数的基本版本,仅安装单个传输服务提供程序。 WSCInstallProvider64_32 可用于安装基本协议、分层协议或协议链。 如果正在安装分层服务提供程序,则应使用 WSCInstallProviderAndChains64_32 ,因为此函数允许使用单个函数调用安装分层协议和一个或多个协议链。 若要使用 WSCInstallProvider64_32 完成相同的工作,需要多个函数调用来安装每个服务提供程序组件。

Windows 套接字 (Winsock) 2 适应分层协议的概念。 分层协议是一种仅实现更高级别的通信功能,同时依赖于基础传输堆栈与远程终结点进行实际数据交换的协议。 分层协议的一个示例是安全层,该层将协议添加到连接建立过程,以执行身份验证并建立相互同意的加密方案。 此类安全协议通常需要底层可靠传输协议(如 TCP 或 SPX)的服务。 术语基协议是指完全能够与远程终结点执行数据通信的 TCP 或 SPX 等协议。 术语分层协议用于描述不能独立协议。 然后,协议链将被定义为一个或多个分层协议,这些协议串在一起并由基本协议锚定。 基本协议将 WSAProtocol_Info 结构的 ChainLen 成员设置为 BASE_PROTOCOL定义为 1。 分层协议将 WSAPROTOCOL_INFO 结构的 ChainLen 成员设置为LAYERED_PROTOCOL定义为零。 协议链将 WSAPROTOCOL_INFO 结构的 ChainLen 成员设置为大于 1。

WSCInstallProvider64_32WSCInstallProvider 的 64 位版本,用于将提供程序安装到 64 位平台上的 32 位和 64 位目录中。 也就是说,在 64 位平台上,维护两个 Winsock 目录,32 位和 64 位进程都能够加载随此函数安装的传输提供程序。 在 64 位平台上, WSCInstallProvider 仅安装到 64 位 Winsock 目录。

在 64 位计算机上,所有不是专为 32 位 (设计的调用(例如),所有不以“32”结尾的函数 ) 在本机 64 位目录上运行。 在 64 位计算机上执行的进程必须使用 WSCInstallProvider64_32 在 32 位目录和 64 位目录上运行,以保持兼容性。 特定 32 位调用的定义和语义与其本机调用相同。

此例程为指定提供程序创建必需的通用 Winsock 2 配置信息。 它适用于基本协议、分层协议和协议链。

lpProtocolInfoList 参数包含要安装的协议条目列表。 WSCInstallProvider64_32的调用方负责设置正确的协议条目。 lpProtocolInfoList 参数不得为 NULL

此例程成功完成后, lpProtocolInfoList 中提供的协议信息将由 WSAEnumProtocolsWSCEnumProtocolsWSCEnumProtocols32 返回。 请注意,在 Windows 中,只有在成功完成此函数后通过调用 WSAStartup 创建的 Ws2_32.dll 实例才会包括 WSAEnumProtocolsWSCEnumProtocolsWSCEnumProtocols32 中的新条目。

注意WSCEnumProtocols 和 WSCEnumProtocols32 不枚举分层协议条目。

 

成功后, WSCInstallProvider64_32 会尝试通过调用 WSAProviderConfigChange 来提醒已注册更改通知的所有相关应用程序。

WSCInstallProvider64_32函数只能由以管理员组成员身份登录的用户调用。 如果WSCInstallProvider64_32由不是管理员组成员的用户调用,则函数调用将失败,并在 lpErrno 参数中返回WSANO_RECOVERY。 对于运行 Windows Vista 或 Windows Server 2008 的计算机,此功能也可能因为用户帐户控制 (UAC) 而失败。 如果包含此函数的应用程序由以管理员组成员身份登录(而非内置管理员)的用户执行,则此调用将失败,除非应用程序已在清单文件中标记为 requestedExecutionLevel 设置为 requireAdministrator。 如果 Windows Vista 或 Windows Server 2008 上的应用程序缺少此清单文件,则作为内置管理员以外的管理员组成员登录的用户必须在增强的 shell 中执行应用程序,因为内置管理员 (运行方式管理员) 才能使此功能成功。

任何文件安装或特定于服务提供程序的配置必须由调用应用程序执行。

如果使用 WSCInstallProviderWSCInstallProviderAndChains 函数,则必须调用该函数一次才能在 32 位目录中安装提供程序,并调用一次才能在 64 位平台上的 64 位目录中安装提供程序。

要求

要求
最低受支持的客户端 Windows XP Professional x64 Edition [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 x64 版本 [仅限桌面应用]
目标平台 Windows
标头 ws2spi.h
Library Ws2_32.lib
DLL Ws2_32.dll

另请参阅

LoadLibrary

传输配置和安装

传输服务提供商

WSAEnumProtocols

WSAProviderConfigChange

WSAStartup

WSCDeinstallProvider32

WSCEnumProtocols

WSCEnumProtocols32

WSCInstallProvider

WSCInstallProviderAndChains

WSCInstallProviderAndChains64_32