CERT_STORE_PROV_FIND_INFO 结构 (wincrypt.h)

CERT_STORE_PROV_FIND_INFO结构由许多存储提供程序回调函数使用。 它包含查找证书的条件、证书吊销列表 (CRL) 或证书存储中的证书信任列表 (CTL) 。

语法

typedef struct _CERT_STORE_PROV_FIND_INFO {
  DWORD      cbSize;
  DWORD      dwMsgAndCertEncodingType;
  DWORD      dwFindFlags;
  DWORD      dwFindType;
  const void *pvFindPara;
} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;

成员

cbSize

结构的大小。

dwMsgAndCertEncodingType

指定用于消息和证书的编码类型。 证书和 消息编码类型 可以与按位 OR 操作结合使用。 下面是定义的编码类型:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

dwFindFlags

与某些 dwFindType 值一起使用以修改搜索条件。 对于大多数 dwFindType 值,不使用 dwFindFlags ,应设置为零。

dwFindType

指定要进行的搜索的类型。 搜索类型确定 pvFindPara 的数据类型、内容和用法。 目前定义的 dwFindType 值和 pvFindPara 所需的数据类型如下所示。

含义
CERT_FIND_ANY
NULL;未使用 pvFindPara
未使用搜索条件。 返回存储中的下一个证书。
CERT_FIND_CERT_ID
CERT_ID 结构
查找由指定 CERT_ID标识的证书。
CERT_FIND_CTL_USAGE
CTL_USAGE结构
搜索具有szOID_ENHANCED_KEY_USAGE扩展的证书或与 CTL_USAGE 结构的 pszUsageIdentifier 成员匹配 的CERT_CTL_PROP_ID
CERT_FIND_ENHKEY_USAGE
CERT_ENHKEY_USAGE 结构
在存储中搜索具有增强密钥用法扩展或增强密钥用法属性的证书,以及与 CERT_ENHKEY_USAGE 结构中的 pszUsageIdentifier 成员匹配的用法标识符。

如果证书具有CERT_EXTENSION结构,并将 pszObjId 成员设置为 szOID_ENHANCED_KEY_USAGE,则证书具有增强的密钥使用扩展。 如果设置了证书CERT_ENHKEY_USAGE_PROP_ID标识符,则证书具有增强的密钥使用属性。

如果 pvFindParaNULLCERT_ENHKEY_USAGEcUsageIdentifier 成员为零,则具有增强型密钥用法扩展或增强密钥用法属性的任何证书都满足选择条件。

如果 pvFindParaNULLCERT_ENHKEY_USAGE 结构的 cUsageIdentifier 成员为零,则任何具有增强密钥用法的证书都是匹配项。

如果在 dwFindFlags 中设置了CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG,则不带密钥用法扩展或属性的证书也会匹配。 设置此标志优先于在 pvFindPara 中传递 NULL

如果设置了CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG,则仅对密钥用法扩展执行匹配。

有关对搜索条件的标志修改的信息,请参阅备注。

CERT_FIND_EXISTING
CERT_CONTEXT结构
搜索与指定证书上下文完全匹配的证书。
CERT_FIND_HASH
CRYPT_HASH_BLOB 结构
搜索具有与 CRYPT_HASH_BLOB 结构中的哈希匹配的 SHA1 哈希的证书。
CERT_FIND_ISSUER_ATTR
CERT_RDN 结构
搜索具有与 CERT_RDN 结构中的属性匹配的指定颁发者属性的证书。 如果设置了这些值,该函数会将证书中颁发者的属性与此CERT_RDN结构中的CERT_RDN_ATTR数组的元素进行比较。 比较会循环访问 CERT_RDN_ATTR 属性,查找与证书颁发者属性的匹配项。

如果 CERT_RDN_ATTRpszObjId 成员为 NULL,则忽略属性对象标识符。

如果 CERT_RDN_ATTRdwValueType 成员CERT_RDN_ANY_TYPE,则忽略值类型。

如果 CERT_RDN_VALUE_BLOBpbData 成员为 NULL,则任何值都是匹配项。

目前,仅支持精确区分大小写的匹配。 有关 Unicode 选项的信息,请参阅备注。 设置这些值后,搜索仅限于其编码类型与 dwMsgAndCertEncodingType 匹配的证书。

CERT_FIND_ISSUER_NAME
CERT_NAME_BLOB 结构
搜索证书,该证书与 CERT_NAME_BLOB 中的名称与整个颁发者名称完全匹配。 搜索仅限于与 dwMsgAndCertEncodingType 匹配的证书。
CERT_FIND_ISSUER_OF
CERT_CONTEXT结构
搜索证书,该证书的颁发者与 CERT_CONTEXT 中的颁发者匹配。

使用 CertGetCertificateChain 函数,而不是将 CertFindCertificateInStore 函数与此值一起使用。

CERT_FIND_ISSUER_STR
以 null 结尾的宽 (Unicode) 字符串
搜索包含指定颁发者名称字符串的证书。 证书的颁发者成员使用格式为CERT_SIMPLE_NAME_STR的 CertNameToStr 格式转换为相应类型的名称字符串。 然后执行不区分大小写的子字符串内字符串匹配。 设置此值后,搜索仅限于编码类型与 dwMsgAndCertEncodingType 匹配的证书。
CERT_FIND_KEY_IDENTIFIER
CRYPT_HASH_BLOB 结构
搜索具有与 CRYPT_HASH_BLOB 中的密钥标识符匹配 的 CERT_KEY_IDENTIFIER_PROP_ID 属性的证书
CERT_FIND_KEY_SPEC
包含密钥规范的 DWORD
搜索具有与 pvFindPara 中的密钥规范匹配的 CERT_KEY_SPEC_PROP_ID 属性的证书。
CERT_FIND_MD5_HASH
CRYPT_HASH_BLOB 结构
搜索具有与 CRYPT_HASH_BLOB 中的哈希匹配的 MD5 哈希 证书。
CERT_FIND_PROPERTY
包含属性标识符的 DWORD
搜索具有与 pvFindPara 中的 DWORD 指定的属性标识符匹配的证书。
CERT_FIND_PUBLIC_KEY
CERT_PUBLIC_KEY_INFO 结构
搜索具有与 CERT_PUBLIC_KEY_INFO 结构中的公钥匹配的公钥的证书。
CERT_FIND_SHA1_HASH
CRYPT_HASH_BLOB 结构
搜索具有与 CRYPT_HASH_BLOB 结构中的哈希匹配的 SHA1 哈希的证书。
CERT_FIND_SIGNATURE_HASH
CRYPT_HASH_BLOB 结构
搜索具有与 CRYPT_HASH_BLOB 结构中的签名哈希匹配的签名哈希的证书。
CERT_FIND_SUBJECT_ATTR
CERT_RDN 结构
搜索具有与 CERT_RDN 结构中的属性匹配的指定使用者属性的证书。 如果设置了 RDN 值,该函数会将证书中使用者的属性与此CERT_RDN结构中的CERT_RDN_ATTR数组的元素进行比较。 比较循环访问 CERT_RDN_ATTR 属性,以查找与证书使用者的属性匹配项。

如果 CERT_RDN_ATTRpszObjId 成员为 NULL,则忽略属性对象标识符。

如果 CERT_RDN_ATTRdwValueType 成员CERT_RDN_ANY_TYPE,则忽略值类型。

如果 CERT_RDN_VALUE_BLOBpbData 成员为 NULL,则任何值都是匹配项。

目前,仅支持精确区分大小写的匹配项。

有关 Unicode 选项的信息,请参阅备注。 设置这些值后,搜索仅限于编码类型与 dwMsgAndCertEncodingType 匹配的证书。

CERT_FIND_SUBJECT_CERT
CERT_INFO 结构
CERT_INFO 结构中,搜索证书的颁发者和序列号与颁发者和序列号匹配。
CERT_FIND_SUBJECT_NAME
CERT_NAME_BLOB 结构
搜索证书,该证书与整个使用者名称与 CERT_NAME_BLOB 结构中的名称完全匹配。 搜索仅限于与 dwMsgAndCertEncodingType 的值匹配的证书。
CERT_FIND_SUBJECT_STR
以 null 结尾的宽 (Unicode) 字符串
搜索包含指定使用者名称字符串的证书。 证书的使用者成员将使用格式为 CERT_SIMPLE_NAME_STR 的 CertNameToStr 格式转换为相应类型的名称字符串。 然后执行不区分大小写的子字符串内字符串匹配。 设置此值后,搜索仅限于编码类型与 dwMsgAndCertEncodingType 匹配的证书。
 
注意dwFindType 值的替代形式在 pvFindPara 中传递字符串。 一个窗体使用 Unicode 字符串,另一个窗体使用 ASCII 字符串。 以“_W”结尾或不带后缀的值使用 Unicode。 以“_A”结尾的值使用 ASCII 字符串。
 

pvFindPara

指向要与 dwFindType 的值指示的查找类型一起使用的数据项或结构。

注解

dwFindFlags 成员用于修改某些搜索类型的条件。

CERT_UNICODE_IS_RDN_ATTRS_FLAG 的 dwFindFlags 值仅用于 dwFindType 的CERT_FIND_SUBJECT_ATTR和CERT_FIND_ISSUER_ATTR值。 如果 pvFindPara 指向的 CERT_RDN_ATTR 结构是使用 Unicode 字符串初始化的,则必须设置CERT_UNICODE_IS_RDN_ATTRS_FLAG。 在进行任何比较之前,将使用 X509_UNICODE_NAME 转换要匹配的字符串,以便为 Unicode 比较提供 。

以下 dwFindFlags 值仅用于 dwFindType 的 CERT_FIND_ENKEY_USAGE 值。

含义
CERT_FIND_OR_ENHKEY_USAGE_FLAG 可以通过设置一个或多个标志来更改搜索条件。 默认情况下,如果要匹配 pvFindPara 指向的 CERT_ENHKEY_USAGE 结构的 pszUsageIdentifier 成员,则必须匹配每个标识符以满足搜索条件。 但是,如果设置了CERT_FIND_OR_ENHKEY_USAGE_FLAG,则可以使用按位 OR 运算与组合的所有标识符进行匹配;因此,匹配任何一个标识符就足够了。
CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 设置此标志时,除常规匹配项外,任何既没有增强型密钥用法扩展又没有增强密钥用法属性的证书都满足搜索条件。
CERT_FIND_NO_ENHKEY_USAGE_FLAG 设置此标志时,仅匹配既没有增强密钥用法也没有增强型密钥用法属性的证书。 此标志设置优先于 pvFindParaNULL
CERT_FIND_VALID_ENHKEY_USAGE_FLAG 设置此标志时, 函数仅匹配那些对指定用法有效的证书。 默认情况下,为了匹配,证书必须对所有用法都有效。

如果证书只需要对指定用法之一有效,也可以设置CERT_FIND_OR_ENHKEY_USAGE_FLAG。 请注意,调用 CertGetValidUsages 以获取证书的有效用途列表。 设置CERT_FIND_VALID_ENHKEY_USAGE_FLAG时,也只能应用CERT_FIND_OR_ENHKEY_USAGE_FLAG。

CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 设置此标志时,匹配过程仅涉及扩展用法标识符。 如果 pvFindParaNULL,或者 pvFindPara 指向的 CERT_ENHKEY_USAGE 结构的 cUsageIdentifier 成员为零,则任何具有增强型密钥使用扩展的证书都是匹配项。 如果还设置了 CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG,则任何没有增强型密钥使用扩展的证书也会匹配。 如果还设置了 CERT_FIND_NO_ENHKEY_USAGE_FLAG,则仅匹配没有增强型密钥使用扩展的证书。
CERT_FIND_EXT_PROP_ENHKEY_USAGE_FLAG 设置此标志后,匹配过程仅涉及属于属性的使用标识符。 如果 pvFindParaNULLcUsageIdentifier 设置为零,则具有增强型密钥用法属性的任何证书都是匹配项。 如果还设置了CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG,则任何没有增强密钥用法属性的证书也是匹配项。 如果设置了CERT_FIND_NO_ENHKEY_USAGE_FLAG,则仅匹配没有增强型密钥用法属性的证书。
CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 仅用于 dwFindType 的 CERT_FIND_SUBJECT_ATTR 和 CERT_FIND_ISSUER-ATTR 值。 默认情况下,将进行区分大小写的完全匹配。 如果设置了此标志,则匹配项不区分大小写。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 wincrypt.h