CertGetCRLFromStore 函数 (wincrypt.h)
CertGetCRLFromStore 函数从指定颁发者的证书存储中获取第一个或下一个证书吊销列表 (CRL) 上下文。 函数还会对 CRL 执行启用的验证检查。 建议使用新的 证书链验证函数 ,而不是此函数。
语法
PCCRL_CONTEXT CertGetCRLFromStore(
[in] HCERTSTORE hCertStore,
[in, optional] PCCERT_CONTEXT pIssuerContext,
[in] PCCRL_CONTEXT pPrevCrlContext,
[in, out] DWORD *pdwFlags
);
参数
[in] hCertStore
证书存储的句柄。
[in, optional] pIssuerContext
指向颁发者的指针 CERT_CONTEXT。 pIssuerContext 指针可以来自此存储或其他存储区,也可以由调用 CertCreateCertificateContext 创建。 如果为此参数传递 NULL ,则会找到存储区中的所有 CRL。
[in] pPrevCrlContext
指向 CRL_CONTEXT的指针。 一个颁发者可以有多个 CRL。 例如,它可以使用 X.509 版本 3 扩展生成增量 CRL。 此参数必须在第一次调用时为 NULL 才能获取 CRL。 若要获取颁发者的下一个 CRL,请将 参数设置为上一个调用返回 的CRL_CONTEXT 。 此函数始终通过调用 CertFreeCRLContext 释放非 NULLpPrevCrlContext,即使出现错误也是如此。
[in, out] pdwFlags
定义以下标志值以对返回的 CRL 启用验证检查。 可以使用按位 OR 运算组合这些标志。
如果启用的验证检查成功,则其标志设置为零。
如果启用的验证检查失败,则返回时仍会设置其标志。 如果 pIssuerContext 为 NULL,则启用的CERT_STORE_SIGNATURE_FLAG始终失败,同时设置CERT_STORE_NO_ISSUER_FLAG。 有关更多详细信息,请参阅“备注”。
如果只设置了CERT_STORE_BASE_CRL_FLAG或CERT_STORE_DELTA_CRL_FLAG中的一个,则此函数将返回基本或增量 CRL,并在返回时清除相应的基标志或增量标志。 如果设置了这两个标志,则只会清除其中一个标志。
对于验证检查失败,仍返回指向第一个或下一个CRL_CONTEXT的指针,并且不会更新 GetLastError。
返回值
如果函数成功,则返回值是指向只读 CRL_CONTEXT的指针。
如果函数失败,并且找不到第一个或下一个 CRL,则返回值为 NULL。
必须通过调用 CertFreeCRLContext 来释放返回的CRL_CONTEXT。 但是,当在后续调用中为 pPrevCrlContext 提供返回的CRL_CONTEXT时,该函数将释放它。
有关扩展的错误信息,请调用 GetLastError。 下面是一些可能的错误代码。
值 | 说明 |
---|---|
|
hCertStore 参数中的句柄与 pPrevCrlContext 参数指向的 CRL 上下文中的句柄不同,或者在 pdwFlags 中设置了不受支持的标志。 |
|
颁发者的存储中不存在 CRL,或者函数到达存储区列表的末尾。 |
注解
可以调用 CertDuplicateCRLContext 来生成重复的 CRL。
可以使用按位 OR 运算合并标志的十六进制值,以启用这两种验证。 例如,若要启用这两个验证,pdwFlags 指向的DWORD 值设置为值 CERT_STORE_SIGNATURE_FLAG |CERT_STORE_TIME_VALIDITY_FLAG。 如果CERT_STORE_SIGNATURE_FLAG验证成功,但CERT_STORE_TIME_VALIDITY_FLAG验证失败,则当函数返回时,pdwFlags 指向的DWORD 值将设置为CERT_STORE_TIME_VALIDITY_FLAG。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |