CryptDecodeObject 函数 (wincrypt.h)
CryptDecodeObject 函数解码由 lpszStructType 参数指示的类型结构。 建议使用 CryptDecodeObjectEx 作为执行相同函数的 API,并显著提高性能。
语法
BOOL CryptDecodeObject(
[in] DWORD dwCertEncodingType,
[in] LPCSTR lpszStructType,
[in] const BYTE *pbEncoded,
[in] DWORD cbEncoded,
[in] DWORD dwFlags,
[out] void *pvStructInfo,
[in, out] DWORD *pcbStructInfo
);
参数
[in] dwCertEncodingType
使用的编码类型。 始终可以通过将证书和 消息编码类型 与按位 OR 操作结合使用来指定它们,如以下示例所示:
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING
当前定义的编码类型为:
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] lpszStructType
指向定义结构类型的 OID 的指针。 如果 lpszStructType 参数的高序字为零,则低序字将指定指定结构的类型的整数标识符。 否则,此参数是指向以 null 结尾的字符串的长指针。
有关对象标识符字符串、其预定义常量和相应结构的详细信息,请参阅 CryptEncodeObject 和 CryptDecodeObject 的常量。
[in] pbEncoded
指向要解码的编码结构的指针。
[in] cbEncoded
pbEncoded 指向的字节数。
[in] dwFlags
定义了以下标志。 它们可以与按位 OR 运算组合使用。
[out] pvStructInfo
指向要接收解码结构的缓冲区的指针。 当指定的缓冲区不够大,无法接收解码结构时,函数将设置ERROR_MORE_DATA代码,并将所需的缓冲区大小(以字节为单位)存储在 由ERROR_MORE_DATA所指向的变量中。
此参数可以为 NULL ,用于检索此信息的大小以进行内存分配。 有关详细信息,请参阅 检索长度未知的数据。
[in, out] pcbStructInfo
指向 DWORD 值的指针,该值指定 pvStructInfo 参数指向的缓冲区的大小(以字节为单位)。 函数返回时,此 DWORD 值包含复制到 pvStructInfo 的解码数据的大小。 由板结构Info 指向的变量中包含的大小可以指示大于已解码结构的大小,因为解码结构可以包含指向其他结构的指针。 此大小是所指向的解码结构和其他结构所需的大小之和。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零, (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。 下表列出了一些可能的错误代码。
返回代码 | 说明 |
---|---|
|
解码时遇到错误。 |
|
找不到指定 dwCertEncodingType 和 lpszStructType 的解码函数 |
|
如果 pvStructInfo 参数指定的缓冲区不够大,无法容纳返回的数据,则函数将设置ERROR_MORE_DATA代码,并将所需的缓冲区大小(以字节为单位)存储在 由ERROR_MORE_DATA指向的变量中。 |
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
注解
使用首选 CryptEncodeObjectEx 函数对加密对象进行编码时,将包含终止 NULL 字符。 解码时,使用首选 CryptDecodeObjectEx 函数时,不会保留终止 NULL 字符。
示例
有关使用此函数的示例,请参阅 示例 C 程序:ASN.1 编码和解码。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |