共用方式為


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 值

傳回碼 Description
CERTSRV_E_PROPERTY_EMPTY
找不到私鑰。
OLE_E_BLANK
物件未初始化。

備註

這個方法會擷取 ICspStatus 物件的集合。 每個物件都代表單一提供者/演算法組。 如果您在初始化 IX509CertificateRequestPkcs10 要求物件時指定範本,則 pKIDefaultCSPs 和 pKIDefaultKeySpec 等範本屬性會影響最初啟用的配對。 您可以在每個 ICspStatus 物件上呼叫下列屬性,以擷取配對的相關信息:

此方法所擷取的集合會在要求對象內部儲存。 最多可以為每個 KeySpec 值建立並儲存三個集合。 這麼做是為了保留提供者/演算法組的選取狀態,以便正確且快速地顯示相關的屬性頁,讓 Encode 方法可以在必須建立私鑰時識別選取的提供者和演算法。 如果修改提供者/演算法組的選取狀態,則會將變更儲存至適當的集合。 對某個集合成員所做的變更不會影響任何其他集合的成員。 只要 PKCS #10 物件繼續存在,集合就會存在。

例如,假設使用 KeySpec 參數設定為 XCN_AT_SIGNATURE 呼叫此方法,並使用範本來初始化要求。 下列語句為 true:

  • ICspStatus 物件的集合會建立並儲存在IX509CertificateRequestPkcs10 物件上。 集合包含計算機上安裝的所有有效提供者/演算法組。
  • 因為 KeySpec 參數未設定為 XCN_AT_NONE,所以每個密碼編譯 API 的 Selected 屬性都會設定為 SelectedNo :新一代 (CNG) 提供者/演算法組集合中。
  • 因為 KeySpec 參數未設定為 XCN_AT_KEYEXCHANGE,所以 Selected 屬性會針對集合中可用來加密數據或封存密鑰的每個 CryptoAPI CSP/演算法組,將 Selected 屬性設定為 SelectedNo
  • 針對範本或私鑰所參考但計算機上不支援的每個提供者,會建立佔位元 ICspStatus 物件並新增至集合,並將 Selected 屬性設定為 SelectedNo。
  • Selected 屬性會針對每個 CryptoAPI CSP/algorithm 配對設定為 SelectedYes ,其中演算法只能用來簽署數據。
  • Ordinal 屬性設定為反映 PKIDefaultCSP 範本屬性所識別的 CSP 順序。 屬性先列出的 CSP 會先在集合中排序。 如果必須建立私鑰,則此屬性會在註冊期間使用。 第一個選取的 CSP/演算法組是用來建立金鑰,但如果作業失敗,則會嘗試下一個選取的配對。
  • 使用相同的 KeySpec 參數再次呼叫這個方法,會擷取先前針對該參數值所建立之現有集合的指標。
  • 使用不同的 KeySpec 參數再次呼叫這個方法,不會影響為 XCN_AT_SIGNATURE KeySpec 值建立的集合。 此外,變更新集合之任何成員上的 Selected 屬性不會影響先前集合的任何成員。

GetCspStatuses 方法會使用 KeySpec 參數,與 CspStatuses 屬性不同。 方法可讓使用者指定這個值,但 屬性會使用與要求對象相關聯的私鑰上設定的值。

您必須先初始化 IX509CertificateRequestPkcs10 物件,才能呼叫此方法。 如需詳細資訊,請參閱下列任一方法:

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 certenroll.h
Dll CertEnroll.dll

另請參閱

IX509CertificateRequestPkcs10