CertCloseStore 函式 (wincrypt.h)

CertCloseStore 函式會關閉證書存儲句柄,並減少存放區上的參考計數。 每個成功呼叫 CertOpenStore 或 CertDuplicateStore 函式時,都必須有對應的 CertCloseStore 呼叫。

語法

BOOL CertCloseStore(
  [in] HCERTSTORE hCertStore,
  [in] DWORD      dwFlags
);

參數

[in] hCertStore

要關閉之證書存儲的句柄。

[in] dwFlags

一般而言,此參數會使用預設值零。 默認值是關閉儲存區,其餘記憶體會配置給尚未釋放的內容。 在此情況下,不會進行任何檢查,以判斷內容的記憶體是否維持配置狀態。

設定旗標可以在關閉存放區時強制釋放所有存放區的 憑證證書吊銷清單 (CRL) ,以及 憑證信任清單 (CTL) 內容。 您也可以設定旗標,以檢查是否已釋放所有存放區的憑證、CRL 和 CTL 內容。 定義下列值。

意義
CERT_CLOSE_STORE_CHECK_FLAG
檢查非免費憑證、CRL 和 CTL 內容。 傳回的錯誤碼表示一或多個存放區元素仍在使用中。 此旗標應該只作為應用程式開發中的診斷工具。
CERT_CLOSE_STORE_FORCE_FLAG
強制釋放與存放區相關聯之所有內容的記憶體。 只有當存放區在函式中開啟,而且存放區句柄及其任何內容都不會傳遞至任何已呼叫的函式時,才能安全地使用此旗標。 如需詳細資料,請參閱<備註>。

傳回值

如果函式成功,則傳回值為 TRUE

如果函式失敗,傳回值為 FALSE。 如需擴充的錯誤資訊,請呼叫 GetLastError

如果未設定CERT_CLOSE_STORE_CHECK_FLAG,或已設定且與存放區相關聯的所有內容都已釋放,則傳回值為 TRUE

如果已設定CERT_CLOSE_STORE_CHECK_FLAG,且與存放區相關聯的一或多個內容記憶體仍會保持配置,則傳回值為 FALSE。 即使函式傳回 FALSE,存放區一律會關閉。 如需詳細資料,請參閱<備註>。

如果與存放區相關聯的內容記憶體維持配置,GetLastError 會設定為CRYPT_E_PENDING_CLOSE。 除非設定CERT_CLOSE_STORE_CHECK_FLAG,否則 會保留 GetLastError 傳回的任何現有值。

備註

當證書存儲開啟時,可以擷取或複製該存放區 的內容 。 擷取或複製 內容 時,其參考計數會遞增。 將內容傳遞至搜尋或列舉函式做為上一個內容或使用 CertFreeCertificateContextCertFreeCRLContext 或 CertFreeCTLContext 釋放內容時,其參考計數會遞減。 當內容的參考計數達到零時,會自動釋放配置給該內容的記憶體。 釋放配置給內容的記憶體時,該內容的任何指標都會變成無效。

根據預設,關閉證書存儲時,不會釋放用來儲存參考計數大於零內容的記憶體。 這些內容的參考仍然有效;不過,這可能會造成記憶體流失。 此外,在關閉存放區之後,對內容屬性所做的任何變更都不會保存。

若要強制釋放與存放區相關聯之所有內容的記憶體,請設定CERT_CLOSE_STORE_FORCE_FLAG。 設定此旗標后,會釋放與存放區相關聯之所有內容的記憶體,且與存放區相關聯的憑證、CRL 或 CTL 內容的所有指標都會變成無效。 只有在函式中開啟存放區,而且存放區句柄及其任何內容都從未傳遞至任何呼叫的函式時,才應該設定此旗標。

使用 CERT_CLOSE_STORE_CHECK_FLAG 關閉存放區時,可以檢查與存放區相關聯之內容的參考計數狀態。 設定此旗標,且尚未釋放所有憑證、CRL 或 CTL 內容時,函式會傳回 FALSE ,而 GetLastError 會傳回CRYPT_E_PENDING_CLOSE。 請注意,當傳回 FALSE 且未釋放任何使用中內容的記憶體時,仍會關閉存放區。

如果在開啟存放區時未設定CERT_STORE_NO_CRYPT_RELEASE_FLAG,關閉存放區會釋放其 CSP 句柄。

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

CertOpenStore

證書存儲函式

CryptReleaseContext