IX509CertificateRequestPkcs10::GetCspStatuses 方法 (certenroll.h)

GetCspStatuses 方法检索一个 ICspStatuses 集合,该集合包含与调用方指定的私钥的预期用途一致的所有提供程序/算法对。

语法

HRESULT GetCspStatuses(
  [in]  X509KeySpec  KeySpec,
  [out] ICspStatuses **ppCspStatuses
);

参数

[in] KeySpec

指定密钥的预期用途的 X509KeySpec 枚举值。 这可以是以下值之一。

含义
XCN_AT_NONE
仅选择加密 API:下一代 (CNG) 提供程序。
XCN_AT_KEYEXCHANGE
仅选择使用加密算法 (包括密钥交换) 在内的 CryptoAPI 加密服务提供商 (CSP) 。
XCN_AT_SIGNATURE
仅选择具有签名算法的 CryptoAPI CSP。

[out] ppCspStatuses

接收指向表示集合的 ICspStatuses 接口的指针的变量的地址。

返回值

如果函数成功,该函数将返回 S_OK

如果函数失败,它将返回一个 指示错误的 HRESULT 值。 可能的值包括(但并不限于)下表中的项。 有关常见错误代码的列表,请参阅 通用 HRESULT 值

返回代码 说明
CERTSRV_E_PROPERTY_EMPTY
找不到私钥。
OLE_E_BLANK
对象未初始化。

注解

此方法检索 ICspStatus 对象的集合。 每个对象表示单个提供程序/算法对。 如果在初始化 IX509CertificateRequestPkcs10 请求对象时指定模板,则模板属性(如 pKIDefaultCSPpKIDefaultKeySpec )会影响最初启用的对。 可以调用每个 ICspStatus 对象上的以下属性来检索有关对的信息:

此方法检索到的集合保存在请求对象内部。 最多可以创建和保存三个集合,每个 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 对象。 有关详细信息,请参阅以下任一方法:

要求

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

另请参阅

IX509CertificateRequestPkcs10