BCryptResolveProviders 函数 (bcrypt.h)

BCryptResolveProviders 函数获取满足指定条件的所有提供程序的集合。

语法

NTSTATUS BCryptResolveProviders(
  [in, optional] LPCWSTR              pszContext,
  [in, optional] ULONG                dwInterface,
  [in, optional] LPCWSTR              pszFunction,
  [in, optional] LPCWSTR              pszProvider,
  [in]           ULONG                dwMode,
  [in]           ULONG                dwFlags,
  [in, out]      ULONG                *pcbBuffer,
  [in, out]      PCRYPT_PROVIDER_REFS *ppBuffer
);

参数

[in, optional] pszContext

指向以 null 结尾的 Unicode 字符串的指针,该字符串包含要为其获取提供程序的上下文的标识符。 如果此值设置为 NULL 或空字符串,则假定默认上下文。

[in, optional] dwInterface

提供程序必须支持的接口的标识符。 这必须是 CNG 接口标识符之一。 如果 pszFunction 参数不是 NULL 或空字符串,则可以将 dwInterface 设置为零以强制函数推断接口。

[in, optional] pszFunction

指向以 null 结尾的 Unicode 字符串的指针,该字符串包含提供程序必须支持的算法或函数标识符。 这可以是标准 CNG 算法标识符 之一,也可以是另一个已注册算法的标识符。 如果 dwInterface 设置为非零值,则 pszFunction 可以为 NULL 以包含所有算法和函数。

[in, optional] pszProvider

指向以 null 结尾的 Unicode 字符串的指针,该字符串包含要检索的提供程序的名称。 如果此参数为 NULL,则将包含所有提供程序。

此参数允许指定在多个提供程序满足其他条件时要检索的特定提供程序。

[in] dwMode

指定要检索的提供程序的类型。 这可以是以下值之一。

含义
CRYPT_UM
检索用户模式提供程序。
CRYPT_KM
检索内核模式提供程序。
CRYPT_MM
检索用户模式和内核模式提供程序。

[in] dwFlags

一组标志,用于修改此函数的行为。

这可以是零,也可以是以下一个或多个值的组合。

含义
CRYPT_ALL_FUNCTIONS
1
此函数将检索每个满足指定条件的提供程序支持的所有函数。 如果未指定此标志,此函数将仅检索提供程序的第一个函数或满足指定条件的提供程序。
CRYPT_ALL_PROVIDERS
2
此函数将检索满足指定条件的所有提供程序。 如果未指定此标志,则此函数将仅检索找到的第一个符合指定条件的提供程序。

[in, out] pcbBuffer

指向 DWORD 值的指针,该值在输入时包含 ppBuffer 参数指向的缓冲区的大小(以字节为单位)。 退出时,此值接收复制到缓冲区的字节数或缓冲区的所需大小(以字节为单位)。

[in, out] ppBuffer

接收满足指定条件的提供程序集合的 CRYPT_PROVIDER_REFS 指针的地址。

如果此参数为 NULL,则此函数将返回 STATUS_SUCCESS ,并放置在 由STATUS_SUCCESS 参数指向的值中,以及所有数据的所需大小(以字节为单位)。

如果此参数是 NULL 指针的地址,则此函数将分配所需的内存,使用有关提供程序的信息填充内存,并将指向此内存的指针放在此参数中。 使用此内存后,请通过将此指针传递给 BCryptFreeBuffer 函数来释放内存。

如果此参数是非 NULL 指针的地址,则此函数会将提供程序信息复制到此缓冲区。 “线路板”参数必须包含整个缓冲区的大小(以字节为单位)。 如果缓冲区不够大,无法保存所有提供程序信息,则此函数将返回 STATUS_BUFFER_TOO_SMALL

返回值

返回指示函数成功或失败的状态代码。

可能的返回代码包括但不限于以下内容。

返回代码 说明
STATUS_SUCCESS
函数成功。
STATUS_BUFFER_TOO_SMALL
由线路板参数指定的大小不够大,无法容纳所有数据。
STATUS_INVALID_PARAMETER
一个或多个参数无效。
STATUS_NOT_FOUND
找不到满足所有指定条件的提供程序。

注解

可以从用户模式或内核模式调用 BCryptResolveProviders。 内核模式调用方必须在 IRQL PASSIVE_LEVEL 执行。

要求

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