BCryptEnumContextFunctions 函数 (bcrypt.h)

BCryptEnumContextFunctions 函数获取指定配置表中上下文的加密函数。

语法

NTSTATUS BCryptEnumContextFunctions(
  [in]      ULONG                    dwTable,
  [in]      LPCWSTR                  pszContext,
  [in]      ULONG                    dwInterface,
  [in, out] ULONG                    *pcbBuffer,
  [in, out] PCRYPT_CONTEXT_FUNCTIONS *ppBuffer
);

参数

[in] dwTable

标识要从中检索上下文函数的配置表。 这可以是以下值之一。

含义
CRYPT_LOCAL
从本地计算机配置表检索上下文函数。
CRYPT_DOMAIN
此值不可使用。

[in] pszContext

指向以 null 结尾的 Unicode 字符串的指针,该字符串包含要枚举其函数的上下文的标识符。

[in] dwInterface

标识要检索其函数的加密接口。 这可以是以下值之一。

含义
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
检索非对称加密函数。
BCRYPT_CIPHER_INTERFACE
检索密码函数。
BCRYPT_HASH_INTERFACE
检索哈希函数。
BCRYPT_RNG_INTERFACE
检索随机数生成器函数。
BCRYPT_SECRET_AGREEMENT_INTERFACE
检索机密协议函数。
BCRYPT_SIGNATURE_INTERFACE
检索签名函数。
NCRYPT_KEY_STORAGE_INTERFACE
检索密钥存储函数。
NCRYPT_SCHANNEL_INTERFACE
检索 Schannel 函数。

[in, out] pcbBuffer

输入时包含 ppBuffer 指向的缓冲区的大小(以字节为单位)的 ULONG 变量的地址。 如果此大小不足以容纳上下文标识符集,则此函数将失败并 STATUS_BUFFER_TOO_SMALL

此函数返回后,此值包含复制到 ppBuffer 缓冲区的字节数。

[in, out] ppBuffer

指向 CRYPT_CONTEXT_FUNCTIONS 结构的指针的地址,该结构接收此函数检索到的上下文函数集。 由号Buffer 参数指向的值包含此缓冲区的大小。

如果此参数指向的值为 NULL,则此函数将分配所需的内存。 当不再需要此内存时,必须通过将此指针传递给 BCryptFreeBuffer 函数来释放此内存。

如果此参数为 NULL,则此函数会将所需大小(以字节为单位)放在由STATUS_BUFFER_TOO_SMALL指向的变量中。

返回值

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

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

返回代码 说明
STATUS_SUCCESS
函数成功。
STATUS_BUFFER_TOO_SMALL
ppBuffer 参数不是 NULL并且由印刷板Buffer 参数指向的值不够大,无法容纳上下文集。
STATUS_INVALID_PARAMETER
一个或多个参数无效。
STATUS_NO_MEMORY
内存分配失败。
STATUS_NOT_FOUND
找不到与指定条件匹配的上下文函数。

注解

BCryptEnumContextFunctions 只能在用户模式下调用。

示例

以下示例演示如何使用 BCryptEnumContextFunctions 函数枚举本地计算机配置表中所有上下文的密钥存储函数。

#include <windows.h>
#include <stdio.h>
#include <Bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")

#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif

NTSTATUS EnumContextFunctions()
{
    NTSTATUS status;
    ULONG uSize = 0;
    PCRYPT_CONTEXTS pContexts = NULL;
    
    // Get the contexts for the local machine. 
    // CNG will allocate the memory for us.
    status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, &pContexts);
    if(NT_SUCCESS(status))
    {
        // Enumerate the context identifiers.
        for(ULONG uContextIndex = 0; 
            uContextIndex < pContexts->cContexts; 
            uContextIndex++)
        {
            wprintf(L"Context functions for %s:\n", 
                pContexts->rgpszContexts[uContextIndex]);

            // Get the functions for this context.
            // CNG will allocate the memory for us.
            PCRYPT_CONTEXT_FUNCTIONS pContextFunctions = NULL;
            status = BCryptEnumContextFunctions(
                CRYPT_LOCAL, 
                pContexts->rgpszContexts[uContextIndex], 
                NCRYPT_SCHANNEL_INTERFACE, 
                &uSize, 
                &pContextFunctions);
            if(NT_SUCCESS(status))
            {
                // Enumerate the functions.
                for(ULONG i = 0; 
                    i < pContextFunctions->cFunctions; 
                    i++)
                {
                    wprintf(L"\t%s\n", 
                        pContextFunctions->rgpszFunctions[i]);
                }

                // Free the context functions buffer.
                BCryptFreeBuffer(pContextFunctions);
            }
        }

        // Free the contexts buffer.
        BCryptFreeBuffer(pContexts);
    }

    return status;
}

要求

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

另请参阅

CRYPT_CONTEXT_FUNCTIONS