CryptFindOIDInfo 函数 (wincrypt.h)
CryptFindOIDInfo 函数检索与指定键类型和键匹配的第一个预定义或注册CRYPT_OID_INFO结构。 搜索可以限制为指定 OID 组中 的对象标识符 (OID) 。
使用 CryptEnumOIDInfo 列出 CRYPT_OID_INFO 结构的所有或选定子集。 可以使用 CryptRegisterOIDInfo 注册新的CRYPT_OID_INFO结构。 可以使用 CryptUnregisterOIDInfo 从已注册的 OID 列表中删除用户注册的 OID。
新的 OID 可以放在预定义条目之前或之后的已注册 OID 列表中。 由于 CryptFindOIDInfo 返回列表上与搜索条件匹配的第一个键,因此新注册的 OID 放置在具有相同键的预定义 OID 条目之前会替代预定义项。
语法
PCCRYPT_OID_INFO CryptFindOIDInfo(
[in] DWORD dwKeyType,
[in] void *pvKey,
[in] DWORD dwGroupId
);
参数
[in] dwKeyType
指定查找 OID 信息时要使用的键类型。
此参数可以是以下键类型之一。
CRYPT_OID_INFO_OID_KEY
pvKey 是包含要查找的 OID 字符串的以 null 结尾的 ANSI 字符串的地址。
CRYPT_OID_INFO_NAME_KEY
pvKey 是包含要查找的名称的以 null 结尾的 Unicode 字符串的地址。
CRYPT_OID_INFO_ALGID_KEY
pvKey 是 ALG_ID变量的 地址。 支持以下 ALG_ID:
哈希算法:
对称加密算法:
公钥算法:
使用加密 API 支持未列出的算法 :下一代 (CNG 仅) ;请改用 CRYPT_OID_INFO_CNG_ALGID_KEY。
CRYPT_OID_INFO_SIGN_KEY
pvKey 是两个 ALG_ID数组的地址,其中第一个元素包含哈希算法标识符,第二个元素包含公钥算法标识符。
支持以下 ALG_ID 组合。
签名算法标识符 | 哈希算法标识符 |
---|---|
CALG_RSA_SIGN |
|
CALG_DSS_SIGN |
|
CALG_NO_SIGN |
|
未列出的算法仅通过 CNG 受支持;请改用 CRYPT_OID_INFO_CNG_SIGN_KEY。
CRYPT_OID_INFO_CNG_ALGID_KEY
pvKey 是包含要查找的 CNG 算法标识符的以 null 结尾的 Unicode 字符串的地址。 这可以是预定义的 CNG 算法标识符 之一,也可以是另一个已注册的算法标识符。
Windows Server 2003 R2 Windows Server 2003: 不支持此密钥类型。CRYPT_OID_INFO_CNG_SIGN_KEY
pvKey 是两个以 null 结尾的 Unicode 字符串指针数组的地址,其中第一个字符串包含哈希 CNG 算法标识符,第二个字符串包含公钥 CNG 算法标识符。 这些标识符可以来自预定义的 CNG 算法标识符 或其他已注册的算法标识符。
Windows Server 2003 R2 Windows Server 2003: 不支持此密钥类型。(可选)可以使用逻辑 OR 运算符在 dwKeyType 参数中指定以下键类型 (|) 。
[in] pvKey
包含其他搜索信息的缓冲区的地址。 此参数取决于 dwKeyType 参数的值。 有关详细信息,请参阅 dwKeyType 下的表。
[in] dwGroupId
查找 OID 信息时要使用的组标识符。 将此参数设置为零会根据 dwKeyType 参数搜索所有组。 否则,仅搜索指示的 dwGroupId 。
有关按组标识符列出 OID 信息的代码的信息,请参阅 CryptEnumOIDInfo。
(可选)可以使用逻辑 OR 运算符在 dwGroupId 参数中指定以下标志 (|) 。
值 | 含义 |
---|---|
|
禁用搜索目录服务器。 |
可以使用逻辑 OR 运算符在 dwGroupId 参数中指定左移 16 位的位长度 (|) 。 有关详细信息,请参阅“备注”。
返回值
返回指向 CRYPT_OID_INFO 类型的常量结构的指针。 不得释放返回的指针。 如果未找到指定的键和组,则返回 NULL 。
注解
CryptFindOIDInfo 函数在 Active Directory 中执行查找,以在以下条件下检索 OID 的友好名称:
- dwKeyType 参数中的键类型设置为CRYPT_OID_INFO_OID_KEY或CRYPT_OID_INFO_NAME_KEY。
- 未在 dwGroupId 参数中指定组标识符,或者 GroupID 引用 EKU OID、策略 OID 或模板 OID。
可以使用逻辑 OR 运算符在 dwGroupId 参数中指定左移 16 位的位长度 (|) 。 这仅适用于 在 CRYPT_OID_INFO 结构的 ExtraInfo 成员中指定的位长度 的CRYPT_ENCRYPT_ALG_OID_GROUP_ID 组条目。 目前,只有 AES 加密算法具有此功能。 常 量CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT 可用于执行移位。 例如,若要查找位长度等于 192 的BCRYPT_AES_ALGORITHM 的 OID 信息,请调用 CryptFindOIDInfo ,如下所示。
DWORD dwBitLen = 192;
PCCRYPT_OID_INFO pOIDInfo = CryptFindOIDInfo(
CRYPT_OID_INFO_CNG_ALGID_KEY,
(void *) BCRYPT_AES_ALGORITHM,
CRYPT_ENCRYPT_ALG_OID_GROUP_ID |
(dwBitLen << CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT)
);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |