共用方式為


管理證書存儲狀態

數個函式提供服務來管理證書存儲狀態。

若要取得憑證的存取權,必須透過呼叫 CertOpenStore 或 CertOpenSystemStore 來開啟儲存憑證的證書存儲。

證書存儲通常會在快取的記憶體中開啟。 它可以是新的存放區,或其內容可以從本機登錄、遠端電腦上的登錄、磁碟檔案、PKCS #7 訊息或其他來源載入。

CryptoAPI 證書存儲函式也允許存放區在 中維護快取記憶體以外的憑證,例如憑證的外部資料庫,例如Microsoft證書伺服器資料庫所提供的憑證。

CertOpenStore 函式的其中一個參數 lpszStoreProvider決定開啟的存放區類型,以及用來開啟該存放區的提供者。 如需使用各種提供者開啟證書存儲的範例,請參閱 開啟證書存儲的 C 程式代碼範例。

CertCloseStore 會關閉證書存儲。 關閉證書存儲時,該存放區中的每個憑證內容都有 其參考計數 減少一個。 記憶體會釋放給參考計數為零的憑證。

使用 CertCloseStore 設定CERT_CLOSE_STORE_FORCE_FLAG會關閉證書存儲,並釋放其所有憑證內容的記憶體,而不論其參考計數為何。 在某些情況下,例如在多線程程式中,這是不可取的。 如果已設定CERT_CLOSE_STORE_CHECK_FLAG,則會關閉存放區,但如果記憶體仍配置給參考計數尚未減少為零的憑證,函式會傳回警告值。 如果憑證的參考計數大於零,則尚未釋放該憑證內容的重複專案。 使用 CertFreeCertificateContext、CertFreeCRLContext 和 CertFreeCTLContext 釋出任何左側開啟的憑證。

注意

憑證內容是類型CERT_CONTEXT的結構,其中具有編碼憑證 BLOB 的指標,以及CERT_INFO結構的指標。 CERT_INFO結構包含最重要的憑證數據。 如需憑證證書吊銷清單 (CRL) 和憑證信任清單 (CTL) 內容結構的詳細資訊,請參閱編碼和譯碼憑證內容。

每個憑證內容也包含 參考計數 ,指出已指派內容位址的複本數目。 每次以任何方式複製憑證內容時,其參考計數都會遞增一個。 每次釋放憑證內容的指標時,憑證內容中的參考計數會遞減一。 當憑證內容的參考計數達到零時,會取消配置持有內容的記憶體。 當該內容位於存放區,且使用 CERT_CLOSE_STORE_FORCE_FLAG 關閉存放區時,也會取消配置為憑證內容配置的記憶體。 如果內容的記憶體已取消配置,且該內容的指標仍在使用中,這些指標就不再有效。

 

CertDuplicateStore 會增加 存放區的參考計數

CertSaveStore 會將存放區的內容儲存到磁碟檔案或記憶體位置,以及

CertControlStore 會在開啟時管理存放區。 當其他程式變更該存放區的保存狀態時,可以通知具有開啟存放區的應用程式。 如果從域控制器計算機將新的憑證複製到本機計算機存放區,就會發生這種情況。

探索到變更時,快取存放區可以重新同步處理其快取存放區,以符合存放區的保存狀態。 CertControlStore 也支援將快取存放區變更複製到永久記憶體的程式,這些變更不會自動儲存在快取存放區中。

類似證書存儲的憑證內容可以有擴充屬性。 CertSetStoreProperty 會將擴充屬性新增至證書存儲。 CertGetStoreProperty 會擷取證書存儲上設定的任何屬性。 目前,唯一預先定義的證書存儲屬性是存放區的當地語系化名稱。