WSCGetProviderInfo 函数 (ws2spi.h)

**注意** 分层服务提供程序已弃用。 从Windows 8和Windows Server 2012开始,请使用 Windows 筛选平台
 
“WSCGetProviderInfo”函数检索与分层服务提供商的信息类关联的数据, (LSP) 。

语法

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

参数

[in] lpProviderId

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

[in] InfoType

为此 LSP 协议条目请求的信息类。

[out] Info

指向缓冲区的指针,用于接收所请求 LSP 协议条目的信息类数据。 如果此参数为 NULL,则 WSCGetProviderInfo 返回失败,并且此缓冲区所需的大小将在 InfoSize 参数中返回。

[in, out] InfoSize

Info 参数指向的缓冲区的大小(以字节为单位)。 如果 Info 参数为 NULL,则 WSCGetProviderInfo 返回失败, InfoSize 参数将接收所需缓冲区的大小。

[in] Flags

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

[out] lpErrno

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

返回值

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

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

注解

WSCGetProviderInfo 用于检索分层服务提供程序的信息类数据。 当 InfoType 参数设置为 ProviderInfoLspCategories 时, 成功时 WSCGetProviderInfo 将返回 Info 参数集,该参数由 LSP 实现的适当 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 类别是 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 进程) 。

要求

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

另请参阅

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

WSAProtocol_Info

WSCGetApplicationCategory

WSCSetApplicationCategory

WSCSetProviderInfo

WSC_PROVIDER_INFO_TYPE