CryptMsgGetParam 函数 (wincrypt.h)
加密消息编码或解码后 ,CryptMsgGetParam 函数获取消息参数。 此函数在最终 的 CryptMsgUpdate 调用之后调用。
语法
BOOL CryptMsgGetParam(
[in] HCRYPTMSG hCryptMsg,
[in] DWORD dwParamType,
[in] DWORD dwIndex,
[out] void *pvData,
[in, out] DWORD *pcbData
);
参数
[in] hCryptMsg
加密消息的句柄。
[in] dwParamType
指示要检索的数据的参数类型。 要检索的数据类型决定了要用于 pvData 的结构类型。
对于编码消息,只有CMSG_BARE_CONTENT、CMSG_ENCODE_SIGNER、CMSG_CONTENT_PARAM和CMSG_COMPUTED_HASH_PARAM dwParamType有效。
值 | 含义 |
---|---|
|
pvData 数据类型:指向 DWORD 的指针
返回 SIGNED 或 ENVELOPED 消息中属性证书的计数。 |
|
pvData 数据类型:指向 BYTE 数组的指针 检索属性证书。 若要获取所有属性证书,请将 CryptMsgGetParam 的 dwIndex 设置为 0(属性数减 1)。 |
|
pvData 数据类型:指向 BYTE 数组的指针 检索编码加密消息的编码内容,而不检索CONTENT_INFO结构的外层。 也就是说,仅返回 PKCS #7 定义的 ContentInfo.content 字段的编码。 |
|
pvData 数据类型:指向 DWORD 的指针
返回收到的 SIGNED 或 ENVELOPED 消息中的证书数。 |
|
pvData 数据类型:指向 BYTE 数组的指针 返回签名者的证书。 若要获取签名者的所有证书,请调用 CryptMsgGetParam,将 dwIndex 从 0 更改为可用证书数减 1。 |
|
pvData 数据类型:指向 BYTE 数组的指针 返回消息中数据计算得出的哈希。 此类型适用于编码和解码。 |
|
pvData 数据类型:指向 BYTE 数组的指针 从打开进行编码的消息返回整个 PKCS #7 消息。 检索打开以解码的消息的内部内容。 如果邮件是信封的,内部类型是数据,并且已调用 CryptMsgControl 来解密消息,则返回解密的内容。 如果内部类型不是数据,则返回需要进一步解码的编码 BLOB。 如果消息未采用信封且内部内容为 DATA,则返回的数据是内部内容的八进制数。 此类型适用于编码和解码。 对于解码,如果类型为CMSG_DATA,则返回内容的八进制数;否则,返回编码的内部内容。 |
|
pvData 数据类型:指向 DWORD 的指针
返回接收、已签名或 ENVELOPED 消息中的 CRL 计数。 |
|
pvData 数据类型:指向 BYTE 数组的指针 返回 CRL。 若要获取所有 CRL,请调用 CryptMsgGetParam,将 dwIndex 从 0 更改为可用 CRL 数减 1。 |
|
pvData 数据类型:指向 BYTE 数组的指针 更改已编码的消息的内容。 必须先通过调用 CryptMsgOpenToDecode 来解码消息。 然后,通过调用 CryptMsgControl、 CryptMsgCountersign 或 CryptMsgCountersignEncoded 来更改消息。 然后,通过调用 CryptMsgGetParam 再次对消息进行编码,指定CMSG_ENCODED_MESSAGE以获取反映所做更改的新编码。 例如,这可用于向消息添加时间戳属性。 |
|
pvData 数据类型:指向 BYTE 数组的指针 返回消息签名者的编码CMSG_SIGNER_INFO签名者信息。 |
|
pvData 数据类型:指向 BYTE 数组的指针 返回签名的加密哈希。 通常用于执行时间戳。 |
|
pvData 数据类型:指向CRYPT_ALGORITHM_IDENTIFIER结构的 BYTE 数组的指针。
返回用于加密消息的加密算法。 |
|
pvData 数据类型:指向CRYPT_ALGORITHM_IDENTIFIER结构的 BYTE 数组的指针。
返回用于加密 ENVELOPED 消息的加密算法。 |
|
pvData 数据类型:指向CRYPT_ALGORITHM_IDENTIFIER结构的 BYTE 数组的指针。
返回创建消息时用于对消息进行哈希运算的哈希算法。 |
|
pvData 数据类型:指向 BYTE 数组的指针 返回创建消息时存储在消息中的哈希值。 |
|
pvData 数据类型:指向 BYTE 数组的指针,用于接收以 null 结尾 的对象标识符 (OID) 字符串。
返回收到的消息的内部内容类型。 此类型不适用于 DATA 类型的消息。 |
|
pvData 数据类型:指向 DWORD 的指针
返回信封D 接收邮件的密钥传输收件人数。 |
|
pvData 数据类型:指向 DWORD 的指针
返回所有邮件收件人(包括密钥协议和邮件列表收件人)的总计数。 |
|
pvData 数据类型:指向 DWORD 的指针
返回用于解密 ENVELOPED 邮件的密钥传输收件人的索引。 只有在解密消息后,此值才可用。 |
|
pvData 数据类型:指向 DWORD 的指针
返回用于解密 ENVELOPED 邮件的密钥传输、密钥协议或邮件列表收件人的索引。 |
|
pvData 数据类型:指向 DWORD 的指针
返回用于解密 ENVELOPED 邮件的密钥协议收件人的加密密钥的索引。 |
|
pvData 数据类型:指向 BYTE 数组的指针,用于接收 CERT_INFO 结构。
返回有关密钥传输邮件收件人的证书信息。 若要获取有关所有密钥传输邮件收件人的证书信息,请重复调用 CryptMsgGetParam,将 dwIndex 从 0 更改为收件人数减 1。 只有返回的 CERT_INFO 结构的 Issuer、SerialNumber 和 PublicKeyAlgorithm 成员可用且有效。 |
|
pvData 数据类型:指向要接收CMSG_CMS_RECIPIENT_INFO结构的 BYTE 数组的指针。
返回有关密钥传输、密钥协议或邮件列表收件人的信息。 它不限于密钥传输邮件收件人。 若要获取有关所有邮件收件人的信息,请重复调用 CryptMsgGetParam,将 dwIndex 从 0 更改为收件人数减 1。 |
|
pvData 数据类型:指向要接收CRYPT_ATTRIBUTES结构的 BYTE 数组 的 指针。
返回消息签名者的经过身份验证的属性。 若要检索指定签名者的经过身份验证的属性,请调用 dwIndex 等于该签名者的索引的 CryptMsgGetParam。 |
|
pvData 数据类型:指向要接收CERT_INFO结构的 BYTE 数组的指针。
返回标识签名者证书所需的消息签名者的信息。 证书的颁发者和 SerialNumber 可用于唯一标识要检索的证书。 若要检索所有签名者的信息,请重复调用 CryptMsgGetParam ,将 dwIndex 从 0 更改为签名者数减 1。 只有返回 的 CERT_INFO 结构中的“颁发者”和“SerialNumber”字段包含可用的有效数据。 |
|
pvData 数据类型:指向 BYTE 数组的指针,用于接收 CERT_ID 结构。
返回有关标识签名者公钥所需的消息签名者的信息。 这可以是证书的颁发者和 SerialNumber、KeyID 或 HashId。 若要检索所有签名者的信息,请调用 CryptMsgGetParam 将 dwIndex 从 0 更改为签名者数减 1。 |
|
pvData 数据类型:指向 DWORD 的指针
返回收到的已签名消息的签名者数。 |
|
pvData 数据类型:指向 BYTE 数组的指针,用于接收 CRYPT_ALGORITHM_IDENTIFIER 结构。
返回消息的签名者使用的哈希算法。 若要获取指定签名者的哈希算法,请调用 dwIndex 等于该签名者的索引的 CryptMsgGetParam。 |
|
pvData 数据类型:指向要接收CMSG_SIGNER_INFO结构的 BYTE 数组的指针。
返回有关消息签名者的信息。 这包括签名者证书的颁发者和序列号,以及签名者证书的经过身份验证和未经身份验证的属性。 若要检索消息所有签名者的签名者信息,请调用 CryptMsgGetParam ,将 dwIndex 从 0 更改为签名者数减 1。 |
|
pvData 数据类型:指向要接收CMSG_CMS_SIGNER_INFO结构的 BYTE 数组的指针。
返回有关消息签名者的信息。 这包括 signerId 以及经过身份验证和未经身份验证的属性。 若要检索消息所有签名者的签名者信息,请调用 CryptMsgGetParam ,将 dwIndex 从 0 更改为签名者数减 1。 |
|
pvData 数据类型:指向要接收CRYPT_ATTRIBUTES结构的 BYTE 数组 的 指针。
返回消息签名者的未经身份验证的属性。 若要检索指定签名者的未经身份验证的属性,请调用 dwIndex 等于该签名者的索引的 CryptMsgGetParam。 |
|
pvData 数据类型:指向 DWORD 的指针
返回未知类型的解码消息的消息类型。 检索到的消息类型可以与支持的类型进行比较,以确定处理是否可以继续。 有关支持的消息类型,请参阅 CryptMsgOpenToDecode 的 dwMessageType 参数。 |
|
pvData 数据类型:指向要接收CMSG_ATTR结构的 BYTE 数组的指针。
返回信封邮件中的不受保护的属性。 |
|
pvData 数据类型:指向 DWORD 的指针
返回已解码消息的版本。 有关详细信息,请参阅“备注”部分中的表。 |
[in] dwIndex
要检索的参数的索引(如果适用)。 未检索参数时,将忽略此参数并将其设置为零。
[out] pvData
指向接收检索到的数据的缓冲区的指针。 此数据的形式将因 dwParamType 参数的值而异。
此参数可以为 NULL ,用于设置此信息的大小,以便进行内存分配。 有关详细信息,请参阅 检索长度未知的数据。
处理此缓冲区中返回的数据时,应用程序需要使用返回的数据的实际大小。 实际大小可以略小于输入时指定的缓冲区的大小。 (输入时,缓冲区大小通常指定得足够大,以确保缓冲区中容纳可能的最大输出数据。) 输出时,此参数指向的变量将更新为反映复制到缓冲区的数据的实际大小。
[in, out] pcbData
指向变量的指针,该变量指定 pvData 参数指向的缓冲区的大小(以字节为单位)。 当函数返回时, 由印刷板Data 参数指向的变量包含缓冲区中存储的字节数。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零, (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。
下表列出了 GetLastError 函数最常返回的错误代码。
返回代码 | 说明 |
---|---|
|
消息不包含请求的属性。 |
|
索引值无效。 |
|
消息类型无效。 |
|
消息内容尚未解密。 |
|
对象标识符的格式不正确。 |
|
消息未按预期进行编码。 |
|
一个或多个参数无效。 |
|
指定的缓冲区不够大,无法保存返回的数据。 |
对于 dwParamType CMSG_COMPUTED_HASH_PARAM,可以从 CryptGetHashParam 传播错误。
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
注解
以下版本号通过调用 CryptMsgGetParam 返回,其中 dwParamType 设置为定义CMSG_VERSION_PARAM:
- CMSG_SIGNED_DATA_V1
- CMSG_SIGNED_DATA_V3
- CMSG_SIGNED_DATA_PKCS_1_5_VERSION
- CMSG_SIGNED_DATA_CMS_VERSION
- CMSG_SIGNER_INFO_V1
- CMSG_SIGNER_INFO_V3
- CMSG_SIGNER_INFO_PKCS_1_5_VERSION
- CMSG_SIGNER_INFO_CMS_VERSION
- CMSG_HASHED_DATA_V0
- CMSG_HASHED_DATA_V2
- CMSG_HASHED_DATA_PKCS_1_5_VERSION
- CMSG_HASHED_DATA_CMS_VERSION
- CMSG_ENVELOPED_DATA_V0
- CMSG_ENVELOPED_DATA_V2
- CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
- CMSG_ENVELOPED_DATA_CMS_VERSION
示例
有关使用此函数的示例,请参阅 示例 C 程序:签名、编码、解码和验证消息、 用于编码信封消息的备用代码、 示例 C 程序:编码信封、签名消息和 示例 C 程序:编码和解码哈希消息。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |