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 返回的任何现有值。

注解

证书存储处于打开状态时,可以检索或复制该存储中的 上下文 。 检索或复制 上下文 时,其引用计数递增。 通过将上下文作为以前的上下文传递给搜索或枚举函数或使用 CertFreeCertificateContextCertFreeCRLContextCertFreeCTLContext 来释放上下文时,其引用计数将递减。 当上下文的引用计数达到零时,将自动释放为该上下文分配的内存。 释放为上下文分配的内存后,指向该上下文的任何指针都无效。

默认情况下,证书存储关闭时,不会释放用于存储引用计数大于零的上下文的内存。 对这些上下文的引用仍然有效;但是,这可能会导致内存泄漏。 此外,在关闭存储后对上下文的属性所做的任何更改都不会持久保存。

若要强制释放与存储关联的所有上下文的内存,请设置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
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

CertOpenStore

证书存储函数

CryptReleaseContext