CryptGetTimeValidObject 函数 (wincrypt.h)

CryptGetTimeValidObject 函数检索在给定上下文和时间内有效的 CRL、OCSP 响应或 CTL 对象。

语法

BOOL CryptGetTimeValidObject(
  [in]                LPCSTR                                  pszTimeValidOid,
  [in]                LPVOID                                  pvPara,
  [in]                PCCERT_CONTEXT                          pIssuer,
  [in, optional]      LPFILETIME                              pftValidFor,
  [in]                DWORD                                   dwFlags,
  [in]                DWORD                                   dwTimeout,
  [out, optional]     LPVOID                                  *ppvObject,
  [in, optional]      PCRYPT_CREDENTIALS                      pCredentials,
  [in, out, optional] PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO pExtraInfo
);

参数

[in] pszTimeValidOid

指向标识所请求 对象的 OID) (对象标识符的指针。 如果 pszTimeValidOid 参数的 HIWORD 为零,则 LOWORD 指定指定结构的类型的整数标识符。

此参数的取值可为下列值之一: 有关这些值如何影响 pvPara 参数的信息,请参阅“含义”列中的标题“For the pvPara parameter”。

含义
TIME_VALID_OID_GET_CTL
( (LPCSTR) 1)
根据从当前 CTL 上下文的 NextUpdateLocation 属性或扩展获取的 URL, (CTL) 提供证书信任列表。

对于 pvPara 参数:指向表示当前证书信任列表 的PCCTL_CONTEXT 的指针。

TIME_VALID_OID_GET_CRL
保留此值供将来使用。
TIME_VALID_OID_GET_CRL_FROM_CERT
( (LPCSTR) 3)
根据从当前证书上下文的 CRL 分发点扩展获取的信息提供 CRL。

对于 pvPara 参数:指向表示使用者证书 的PCCERT_CONTEXT 的指针。

TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT
( (LPCSTR) 4)
根据从当前证书上下文的最新 CRL 扩展获取的信息提供增量 CRL。

对于 pvPara 参数:指向表示使用者证书 的PCCERT_CONTEXT 的指针。

TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL
( (LPCSTR) 5)
根据从当前 CRL 上下文的最新 CRL 扩展获取的信息提供增量 CRL。

对于 pvPara 参数:指向表示使用者证书及其基本 CRL 的PCCERT_CRL_CONTEXT_PAIR 的指针。

[in] pvPara

pszTimeValidOid 的值确定的结构。 有关详细信息,请参阅 pszTimeValidOid 参数的说明。

[in] pIssuer

指向包含颁发者证书 的CERT_CONTEXT 的指针。

[in, optional] pftValidFor

指向当前系统时间的可选 FILETIME 结构版本的指针,或当前上下文中的新鲜时间。

[in] dwFlags

一个 值,该值确定各种检索因素,例如超时、源和有效性检查。

下表列出了 dwFlags 参数的可能值。

含义
CRYPT_ACCUMULATIVE_TIMEOUT
0x00000800
使用客户端计算机的累积超时注册表设置进行吊销 URL 检索。
CRYPT_CACHE_ONLY_RETRIEVAL
0x00000002
仅从客户端 URL 缓存中检索编码位。 请勿使用线路检索 URL。
CRYPT_CHECK_FRESHNESS_TIME_VALIDITY
0x00000400
检查当前上下文的 ThisUpdate 属性或扩展是否大于或等于 ftValidFor 参数。
CRYPT_DONT_CHECK_TIME_VALIDITY
0x00000200
不要执行时间有效性检查。 使用它通过线路检索较新的基本 CRL,或在缓存检索期间绕过时间有效性检查。 设置此标志后, pftValidFor 可以为 NULL
CRYPT_DONT_VERIFY_SIGNATURE
0x00000100
不要执行签名验证。 当检索到的对象验证将在此函数之外执行,或者强制用对象的新缓存条目替换检索到的缓存项时,请使用此方法。
CRYPT_KEEP_TIME_VALID
0x00000080
保留此值供将来使用。
CRYPT_OCSP_ONLY_RETRIEVAL
0x01000000
仅基于当前上下文中的颁发机构信息访问 URL 从 OCSP 响应方服务检索有效时间对象。 CertVerifyRevocation 函数在将 dwFlags 参数设置为 CERT_VERIFY_REV_SERVER_OCSP_FLAG 的情况下调用它时,会设置此标志。
CRYPT_WIRE_ONLY_RETRIEVAL
0x00000004
仅从线路中检索编码位。 不使用 URL 缓存。

[in] dwTimeout

一个值,以毫秒为单位,指定何时终止未返回结果的 URL 检索尝试。

[out, optional] ppvObject

指向返回的 对象的地址的指针。 返回类型可以是 CryptRetrieveObjectByUrl 函数的 pszObjectOid 参数中显示的受支持的类型之一。

[in, optional] pCredentials

指向用于访问 URL 的可选CRYPT_CREDENTIALS 结构的指针。 当前支持的唯一凭据类型是用户名和密码凭据。

[in, out, optional] pExtraInfo

指向可选的 CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO 结构的指针,该结构包含有关对象的缓存条目的额外信息。

返回值

如果函数成功,则函数返回 TRUE

如果函数失败,则返回 FALSE。 有关扩展的错误信息,请调用 GetLastError

下面是一些可能的错误代码。

返回代码 说明
CRYPT_E_NOT_FOUND
pszTimeValidOid 参数指定的调用方TIME_VALID_OID_GET_CRL。 不支持此 OID。
CRYPT_E_NOT_IN_REVOCATION_DATABASE
调用方设置CRYPT_OCSP_ONLY_RETRIEVAL标志,上下文包含非 OCSP URL。
E_INVALIDARG
函数无法从证书上下文中检索 CRL 或检索 CTL,并且无法从缓存条目复制任何 URL。
E_OUTOFMEMORY
函数无法为内部数组操作分配内存。
ERROR_NOT_CONNECTED
调用方未设置 CRYPT_CACHE_ONLY_RETRIEVAL 标志,并且未连接到 Internet。

注解

Cryptnet 动态链接库实现一个时间有效的对象 (TVO) 缓存,该缓存用于支持 CryptGetTimeValidObject 函数。 缓存由进程全局 TVO 代理使用,其中每个缓存条目都包含以下信息。

  • 源标识符
  • 上下文 OID
  • 上下文
  • 检索 URL
  • 过期时间
  • 脱机 URL 时间信息
TVO 代理支持按需或通过自动更新检索 TVO 对象。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 wincrypt.h
Library Cryptnet.lib
DLL Cryptnet.dll