CRYPT_KEY_PROV_INFO 结构 (wincrypt.h)

CRYPT_KEY_PROV_INFO 结构包含有关加密服务提供程序 (CSP) 中的密钥容器的信息。

语法

typedef struct _CRYPT_KEY_PROV_INFO {
  LPWSTR                pwszContainerName;
  LPWSTR                pwszProvName;
  DWORD                 dwProvType;
  DWORD                 dwFlags;
  DWORD                 cProvParam;
  PCRYPT_KEY_PROV_PARAM rgProvParam;
  DWORD                 dwKeySpec;
} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;

成员

pwszContainerName

指向包含密钥容器名称的以 null 结尾的 Unicode 字符串的指针。

dwProvType 成员为零时,此字符串包含 CNG 密钥存储提供程序中的密钥的名称。 此字符串作为 pwszKeyName 参数传递到 NCryptOpenKey 函数。

pwszProvName

指向包含 CSP 名称的以 null 结尾的 Unicode 字符串的指针。

dwProvType 成员为零时,此字符串包含 CNG 密钥存储提供程序的名称。 此字符串作为 pwszProviderName 参数传递到 NCryptOpenStorageProvider 函数。

dwProvType

指定 CSP 类型。 这可以是零种,也可以是 加密提供程序类型之一。

如果此成员为零,则密钥容器是 CNG 密钥存储提供程序之一。

dwFlags

一组标志,指示有关提供程序的其他信息。 这可以是零个值,也可以是以下值之一。

含义
CERT_SET_KEY_PROV_HANDLE_PROP_ID / CERT_SET_KEY_CONTEXT_PROP_ID
使密钥提供程序的句柄保持打开状态,以便后续调用加密函数。
CRYPT_MACHINE_KEYSET / NCRYPT_MACHINE_KEY_FLAG
密钥容器包含计算机密钥。 如果此标志不存在,则密钥容器包含用户密钥。
CRYPT_SILENT /NCRYPT_SILENT_FLAG
密钥容器将尝试在没有任何用户界面提示的情况下以无提示方式打开任何密钥。
 

加密函数 CryptDecryptMessageCryptSignMessageCryptDecryptAndVerifyMessageSignatureCryptSignAndEncryptMessage 在内部使用证书中的CRYPT_KEY_PROV_INFO执行 CryptAcquireContext 操作。 设置CERT_SET_KEY_CONTEXT_PROP_IDCERT_SET_KEY_PROV_HANDLE_PROP_ID标志后,这些加密函数可以使用 CERT_KEY_CONTEXT_PROP_ID 调用 CertSetCertificateContextProperty。 此调用使密钥提供程序的句柄保持打开状态,以便后续调用提到的使用同一证书的加密函数,这样就无需对 CryptAcquireContext 执行其他调用,从而提高效率。 此外,由于某些提供程序可能要求为调用 CryptAcquireContext 输入密码,因此应用程序需要尽量减少进行的 CryptAcquireContext 调用数。 在存储关闭时,会自动释放保持打开状态的密钥提供程序的句柄。

例如,假设电子邮件应用程序收到了五封加密邮件,所有邮件都使用同一证书中的公钥进行加密。 如果在处理第一条消息后密钥提供程序的句柄保持打开状态,则其余四条消息不需要调用 CryptAcquireContext

cProvParam

rgProvParam 数组中的元素数。

dwProvType 成员为零时,不会使用此成员,并且必须为零。

rgProvParam

包含密钥容器参数 的CRYPT_KEY_PROV_PARAM 结构的数组。 cProvParam 成员包含此数组中的元素数。

dwProvType 成员为零时,不会使用此成员,并且必须为 NULL

dwKeySpec

要检索的私钥的规范。

为默认提供程序定义以下值。

dwProvType 成员为零时,此值将作为 dwLegacyKeySpec 参数传递到 NCryptOpenKey 函数。

含义
AT_KEYEXCHANGE
用于加密/解密会话密钥的密钥。
AT_SIGNATURE
用于创建和验证数字签名的密钥。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 wincrypt.h

另请参阅

CRYPT_KEY_PROV_PARAM

CertGetCertificateContextProperty

CertSetCertificateContextProperty