CryptFindCertificateKeyProvInfo 函数 (wincrypt.h)

CryptFindCertificateKeyProvInfo 函数枚举加密提供程序及其容器,以查找与证书公钥对应的私钥

语法

BOOL CryptFindCertificateKeyProvInfo(
  [in] PCCERT_CONTEXT pCert,
  [in] DWORD          dwFlags,
  [in] void           *pvReserved
);

参数

[in] pCert

指向导出公钥信息时要使用的证书 CERT_CONTEXT 结构的指针。

[in] dwFlags

一组标志,用于修改此函数的行为。 这可以是零个值,也可以是以下值之一。

含义
CRYPT_FIND_USER_KEYSET_FLAG
将搜索限制为用户容器。 默认设置是同时搜索用户和计算机容器。
CRYPT_FIND_MACHINE_KEYSET_FLAG
将搜索限制为计算机容器。 默认设置是同时搜索用户和计算机容器。
CRYPT_FIND_SILENT_KEYSET_FLAG
应用程序请求 CSP 不显示此上下文的任何用户界面 (UI) 。 如果 CSP 必须显示 UI 才能运行,则调用会失败,并且NTE_SILENT_CONTEXT错误代码设置为最后一个错误。
 

以下标志确定使用哪种技术来获取密钥。 如果这些标志都不存在,则此函数将仅尝试使用 CryptoAPI 获取密钥。

Windows Server 2003 和 Windows XP: 不支持这些标志。

含义
CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG
此函数将尝试使用 CryptoAPI 获取密钥。 如果失败,此函数将尝试使用加密 API 获取密钥:下一代 (CNG) 。

如果使用 CNG 获取密钥,则证书 的 CERT_KEY_PROV_INFO_PROP_ID 属性设置为零。

CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG
此函数将仅尝试使用 CNG 获取密钥,不会使用 CryptoAPI 获取密钥。

如果使用 CNG 获取密钥,则证书 的 CERT_KEY_PROV_INFO_PROP_ID 属性设置为零。

CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG
此函数将尝试使用 CNG 获取密钥。 如果失败,此函数将尝试使用 CryptoAPI 获取密钥。

如果使用 CNG 获取密钥,则证书 的 CERT_KEY_PROV_INFO_PROP_ID 属性设置为零。

[in] pvReserved

保留以供将来使用,必须为 NULL

返回值

如果函数在搜索的容器中找到与证书公钥相对应的私钥,则为 TRUE;如果函数在容器中找不到容器或私钥,则为 FALSE

GetLastError 返回以下错误:

返回代码 说明
NTE_NO_KEY
找不到容器。

注解

此函数枚举加密提供程序及其容器,以查找与证书公钥对应的 私钥。 对于匹配项, 函数更新证书的 CERT_KEY_PROV_INFO_PROP_ID 属性。 如果已设置 CERT_KEY_PROV_INFO_PROP_ID ,则检查它以确定它是否与提供程序的公钥匹配。 对于匹配,函数将跳过前面提到的 枚举。

要求

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

另请参阅

数据管理函数