WSCSetProviderInfo 函数 (ws2spi.h)
语法
int WSCSetProviderInfo(
[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
用于修改 WSCSetProviderInfo 函数调用行为的标志。
[out] lpErrno
如果函数失败,则为指向错误代码的指针。
返回值
如果未发生错误, WSCSetProviderInfo 将返回 ERROR_SUCCESS (零) 。 否则,它将返回 SOCKET_ERROR,并在 lpErrno 参数中返回特定的错误代码。
错误代码 | 含义 |
---|---|
|
调用未实现。 如果在 InfoType 参数中指定了 ProviderInfoAudit,则返回此错误。 |
一个或多个参数不在用户地址空间的有效部分中。 | |
一个或多个参数无效。 | |
发生不可恢复的错误。 此错误在以下几种情况下返回:用户缺少写入 Winsock 注册表所需的管理权限,或者在打开 Winsock 目录条目时失败。 | |
可用内存不足。 如果内存不足,无法分配新的目录条目,则返回此错误。 |
注解
WSCSetProviderInfo 用于设置分层服务提供程序的信息类数据。 当 InfoType 参数设置为 ProviderInfoLspCategories 时,成功时 WSCSetProviderInfo 会根据 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 类别不会加载到服务或系统进程中, (例如 lsass、winlogon 和许多 svchost 进程) 。
WSCSetProviderInfo 函数只能由以 Administrators 组成员身份登录的用户调用。 如果 WSCSetProviderInfo 由不是 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_INFOWSCGetApplicationCategoryWSCGetProviderInfoWSCSetApplicationCategoryWSC_PROVIDER_INFO_TYPE