CertCloseStore 函式 (wincrypt.h)
CertCloseStore 函式會關閉證書存儲句柄,並減少存放區上的參考計數。 每個成功呼叫 CertOpenStore 或 CertDuplicateStore 函式時,都必須有對應的 CertCloseStore 呼叫。
語法
BOOL CertCloseStore(
[in] HCERTSTORE hCertStore,
[in] DWORD dwFlags
);
參數
[in] hCertStore
要關閉之證書存儲的句柄。
[in] dwFlags
一般而言,此參數會使用預設值零。 默認值是關閉儲存區,其餘記憶體會配置給尚未釋放的內容。 在此情況下,不會進行任何檢查,以判斷內容的記憶體是否維持配置狀態。
設定旗標可以在關閉存放區時強制釋放所有存放區的 憑證、 證書吊銷清單 (CRL) ,以及 憑證信任清單 (CTL) 內容。 您也可以設定旗標,以檢查是否已釋放所有存放區的憑證、CRL 和 CTL 內容。 定義下列值。
傳回值
如果函式成功,則傳回值為 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 傳回的任何現有值。
備註
當證書存儲開啟時,可以擷取或複製該存放區 的內容 。 擷取或複製 內容 時,其參考計數會遞增。 將內容傳遞至搜尋或列舉函式做為上一個內容或使用 CertFreeCertificateContext、CertFreeCRLContext 或 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 |