WSCSetProviderInfo32 函数 (ws2spi.h)

**注意** 分层服务提供程序已弃用。 从 Windows 8 和 Windows Server 2012 开始,请使用 Windows 筛选平台
 
**WSCSetProviderInfo32** 函数为分层服务提供程序 (LSP) 设置指定信息类的数据值。
**注意**此调用是 WSCSetProviderInfo 的严格 32 位版本,用于 64 位平台。 提供它以允许 64 位进程访问 32 位目录。
 

语法

int WSCSetProviderInfo32(
  [in]  LPGUID                 lpProviderId,
  [in]  WSC_PROVIDER_INFO_TYPE InfoType,
  [in]  PBYTE                  Info,
  [in]  size_t                 InfoSize,
  [in]  DWORD                  Flags,
  [out] LPINT                  lpErrno
);

参数

[in] lpProviderId

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

[in] InfoType

要为此 LSP 协议条目设置的信息类。

[in] Info

指向缓冲区的指针,该缓冲区包含要为 LSP 协议条目设置的信息类数据。

[in] InfoSize

Info 参数指向的缓冲区的大小(以字节为单位)。

[in] Flags

用于修改 WSCSetProviderInfo32 函数调用行为的标志。

[out] lpErrno

如果函数失败,则为指向错误代码的指针。

返回值

如果未发生错误, WSCSetProviderInfo32 将返回 ERROR_SUCCESS (零) 。 否则,它将返回 SOCKET_ERROR,并在 lpErrno 参数中返回特定的错误代码。

错误代码 含义
ERROR_CALL_NOT_IMPLEMENTED
调用未实现。 如果在 InfoType 参数中指定了 ProviderInfoAudit,则返回此错误。
WSAEFAULT
一个或多个参数不在用户地址空间的有效部分中。
WSAEINVAL
一个或多个参数无效。
WSANO_RECOVERY
发生不可恢复的错误。 此错误在以下几种情况下返回:用户缺少写入 Winsock 注册表所需的管理权限,或者在打开 Winsock 目录条目时失败。
WSA_NOT_ENOUGH_MEMORY
可用内存不足。 如果内存不足,无法分配新的目录条目,则返回此错误。

注解

WSCSetProviderInfo32WSCSetProviderInfo 的严格 32 位版本。 例如,在 64 位计算机上,所有不专门调用 32 位 (所有不以“32”结尾的函数 ) 本机 64 位目录上运行。 在 64 位计算机上执行的进程必须使用特定的 32 位函数调用,才能对严格的 32 位目录进行操作并保持兼容性。 特定 32 位调用的定义和语义与其本机调用的定义和语义相同。

WSCSetProviderInfo32 用于设置 32 位分层服务提供程序的信息类数据。 当 InfoType 参数设置为 ProviderInfoLspCategories 时,成功时 WSCSetProviderInfo32 会根据 Info 参数中传递的值设置提供程序实现的相应 LSP 类别标志。

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

在 LSP 初始化期间,LSP 必须提供指向许多 Winsock SPI 函数的指针。 在正常处理期间,LSP 正上方的层 (另一个 LSP 或 Ws2_32.dll) 调用这些函数。

实现可安装文件系统的 LSP (IFS) 可以选择性地选择提供指向由自身实现的函数的指针,或传递回 LSP 正下方的层提供的指针。 非 IFS LSP(因为它们提供自己的句柄)必须实现所有 Winsock SPI 函数。 这是因为每个 SPI 都需要 LSP 将其创建的所有套接字句柄映射到较低提供程序的套接字句柄, (另一个 LSP 或基本协议) 。

但是,所有 LSP 都通过仅对 Winsock SPI 函数的子集执行额外处理来执行其特定工作。

可以基于 LSP 实现的 SPI 函数子集以及为每个函数执行的额外处理的性质来定义 LSP 类别。

通过对 LSP 进行分类以及对使用 Winsock 套接字的应用程序进行分类,可以有选择地确定 LSP 是否应在运行时参与给定进程。

在 Windows Vista 及更高版本中,可以根据 LSP 与 Windows 套接字调用和数据交互的方式对 LSP 进行分类。 LSP 类别是 Winsock SPI 函数子集上可识别的行为组。 例如,HTTP 内容筛选器将归类为数据检查器, (LSP_INSPECTOR 类别) 。 LSP_INSPECTOR类别将检查(但不更改)数据传输 SPI 函数的参数。 应用程序可以查询 LSP 的类别,并选择不基于 LSP 类别和应用程序的允许 LSP 类别集加载 LSP。

下表列出了可将 LSP 分类到其中的类别。

LSP 类别 说明
**LSP_CRYPTO_COMPRESS** LSP 是加密或数据压缩提供程序。
**LSP_FIREWALL** LSP 是防火墙提供程序。
**LSP_LOCAL_CACHE** LSP 是本地缓存提供程序。
**LSP_INBOUND_MODIFY** LSP 修改入站数据。
**LSP_INSPECTOR** LSP 检查或筛选数据。
**LSP_OUTBOUND_MODIFY** LSP 修改出站数据。
**LSP_PROXY** LSP 充当代理并重定向数据包。
**LSP_REDIRECTOR** LSP 是网络重定向程序。
**LSP_SYSTEM** LSP 可用于服务和系统进程。
 

LSP 可能属于多个类别。 例如,防火墙/安全 LSP 可以属于检查器 (LSP_INSPECTOR) 和防火墙 (LSP_FIREWALL) 类别。

如果 LSP 未设置类别,则被视为属于“所有其他”类别。 此 LSP 类别不会加载到服务或系统进程中, (例如 lsass、winlogon 和许多 svchost 进程) 。

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

要求

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

另请参阅

对分层服务提供程序和应用程序进行分类

WSAProtocol_Info

WSCGetApplicationCategory

WSCGetProviderInfo32

WSCSetApplicationCategory

WSCSetProviderInfo

WSC_PROVIDER_INFO_TYPE