BCryptEnumRegisteredProviders 函数 (bcrypt.h)

BCryptEnumRegisteredProviders 函数检索有关已注册提供程序的信息。

语法

NTSTATUS BCryptEnumRegisteredProviders(
  [in, out] ULONG            *pcbBuffer,
  [in, out] PCRYPT_PROVIDERS *ppBuffer
);

参数

[in, out] pcbBuffer

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

注意 这是整个缓冲区的总大小(以字节为单位),而不仅仅是 CRYPT_PROVIDERS 结构的大小。 缓冲区必须能够保存提供程序的其他数据以及 CRYPT_PROVIDERS 结构。
 

[in, out] ppBuffer

指向缓冲区指针的指针,该指针接收 CRYPT_PROVIDERS 结构和描述已注册提供程序集合的其他数据。

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

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

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

返回值

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

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

返回代码 说明
STATUS_SUCCESS
函数成功。
STATUS_BUFFER_TOO_SMALL
由线路板参数指定的大小不够大,无法容纳所有数据。
STATUS_INVALID_PARAMETER
一个或多个参数无效。

注解

可以通过以下两种方式之一调用 BCryptEnumRegisteredProviders 函数:

  • 第一个是让 BCryptEnumRegisteredProviders 函数分配内存。 这是通过为 ppBuffer 参数传递 NULL 指针的地址来实现的。

    以下示例演示如何使用 BCryptEnumRegisteredProviders 函数通过为 ppBuffer 参数传递 NULL 指针的地址来分配内存。

    PCRYPT_PROVIDERS pBuffer = NULL;
    BCryptEnumRegisteredProviders(/*...*/, &pBuffer);
    
    
    

    此代码将分配 CRYPT_PROVIDERS 结构和关联字符串所需的内存。 以这种方式使用 BCryptEnumRegisteredProviders 函数时,必须通过将 ppBuffer 传递到 BCryptFreeBuffer 函数来释放不再需要的内存。

  • 第二种方法是自行分配所需的内存。 这是通过为 ppBuffer 参数调用具有 NULLBCryptEnumRegisteredProviders 函数来实现的。 BCryptEnumRegisteredProviders 函数将放置在CRYPT_PROVIDERS结构和所有字符串的所需大小(以字节为单位CRYPT_PROVIDERS参数所指向的值中。 然后,在第二次调用 BCryptEnumRegisteredProviders 函数时,分配所需的内存并将此缓冲区指针的地址传递给 ppBuffer 参数。

只能在用户模式下调用 BCryptEnumRegisteredProviders

要求

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

另请参阅

BCryptFreeBuffer

CRYPT_PROVIDERS