IX509CertificateRequestPkcs10::GetCspStatuses 方法 (certenroll.h)
GetCspStatuses 方法检索一个 ICspStatuses 集合,该集合包含与调用方指定的私钥的预期用途一致的所有提供程序/算法对。
语法
HRESULT GetCspStatuses(
[in] X509KeySpec KeySpec,
[out] ICspStatuses **ppCspStatuses
);
参数
[in] KeySpec
指定密钥的预期用途的 X509KeySpec 枚举值。 这可以是以下值之一。
值 | 含义 |
---|---|
|
仅选择加密 API:下一代 (CNG) 提供程序。 |
|
仅选择使用加密算法 (包括密钥交换) 在内的 CryptoAPI 加密服务提供商 (CSP) 。 |
|
仅选择具有签名算法的 CryptoAPI CSP。 |
[out] ppCspStatuses
接收指向表示集合的 ICspStatuses 接口的指针的变量的地址。
返回值
如果函数成功,该函数将返回 S_OK。
如果函数失败,它将返回一个 指示错误的 HRESULT 值。 可能的值包括(但并不限于)下表中的项。 有关常见错误代码的列表,请参阅 通用 HRESULT 值。
返回代码 | 说明 |
---|---|
|
找不到私钥。 |
|
对象未初始化。 |
注解
此方法检索 ICspStatus 对象的集合。 每个对象表示单个提供程序/算法对。 如果在初始化 IX509CertificateRequestPkcs10 请求对象时指定模板,则模板属性(如 pKIDefaultCSP 和 pKIDefaultKeySpec )会影响最初启用的对。 可以调用每个 ICspStatus 对象上的以下属性来检索有关对的信息:
- CspInformation 属性检索提供程序信息。
- CspAlgorithm 属性检索算法信息。
- EnrollmentStatus 属性检索 IX509EnrollmentStatus 对象。 对 status 对象调用 Selected 属性以确定是否为此请求启用了提供程序/算法对。
- Ordinal 属性检索提供程序/算法对集合中的位置。
此方法检索到的集合保存在请求对象内部。 最多可以创建和保存三个集合,每个 KeySpec 值一个集合。 这样做是为了保留提供程序/算法对的选择状态,以便可以准确快速地多次显示相关属性页,以便在必须创建私钥时 ,Encode 方法可以识别选择哪些提供程序和算法。 如果修改了提供程序/算法对的选择状态,则更改将保存到相应的集合中。 对一个集合的成员所做的更改不会影响任何其他集合的成员。 只要 PKCS #10 对象继续存在,集合就存在。
例如,假设调用此方法时 ,KeySpec 参数设置为 XCN_AT_SIGNATURE,并使用模板初始化请求。 以下语句为 true:
- ICspStatus 对象的集合创建并保存在 IX509CertificateRequestPkcs10 对象上。 集合包含计算机上安装的所有有效提供程序/算法对。
- 由于 KeySpec 参数未设置为 XCN_AT_NONE,因此每个加密 API 的 Selected 属性设置为 SelectedNo:下一代 (集合中的 CNG) 提供程序/算法对。
- 由于 KeySpec 参数未设置为 XCN_AT_KEYEXCHANGE,因此集合中每个 CryptoAPI CSP/算法对的 Selected 属性设置为 SelectedNo,该算法可用于加密数据或存档密钥。
- 对于模板或私钥引用但计算机上不支持的每个提供程序,将创建占位符 ICspStatus 对象并将其添加到集合,并将 Selected 属性设置为 SelectedNo。
- 对于每个 CryptoAPI CSP/算法对, Selected 属性设置为 SelectedYes,其中算法只能用于对数据进行签名。
- Ordinal 属性设置为反映由 pKIDefaultCSP 模板属性标识的 CSP 顺序(如果有)。 首先在集合中按 属性列出的 CSP 进行排序。 如果必须创建私钥,则会在注册期间使用此属性。 第一个选定的 CSP/算法对用于创建密钥,但如果操作失败,则会尝试下一个所选对。
- 再次使用相同的 KeySpec 参数调用此方法会检索指向之前为该参数值创建的现有集合的指针。
- 使用其他 KeySpec 参数再次调用此方法不会影响为 XCN_AT_SIGNATURE KeySpec 值创建的集合。 此外,更改新集合的任何成员的 Selected 属性不会影响上一个集合的任何成员。
GetCspStatuses 方法不同于 CspStatuses 属性,方法是使用 KeySpec 参数。 方法允许用户指定此值,但 属性使用与请求对象关联的私钥上设置的值。
在调用此方法之前,必须初始化 IX509CertificateRequestPkcs10 对象。 有关详细信息,请参阅以下任一方法:
- InitializeDecode
- InitializeFromCertificate
- InitializeFromPrivateKey
- InitializeFromPublicKey
- InitializeFromTemplateName
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | certenroll.h |
DLL | CertEnroll.dll |