CryptMsgUpdate 函数 (wincrypt.h)
CryptMsgUpdate 函数将内容添加到加密消息。 使用此函数,可以通过重复调用 CryptMsgUpdate 来逐个构造消息。 添加的消息内容经过编码或解码,具体取决于消息是使用 CryptMsgOpenToEncode 还是 CryptMsgOpenToDecode 打开的。
语法
BOOL CryptMsgUpdate(
[in] HCRYPTMSG hCryptMsg,
[in] const BYTE *pbData,
[in] DWORD cbData,
[in] BOOL fFinal
);
参数
[in] hCryptMsg
要更新的消息的加密消息句柄。
[in] pbData
指向包含要编码或解码的数据的缓冲区的指针。
[in] cbData
pbData 缓冲区中的数据字节数。
[in] fFinal
指示正在处理用于编码或解码的最后一个数据块。 此标志的正确用法取决于正在处理的消息是否具有分离数据。 在调用打开消息的函数时,通过将 dwFlags 设置为 CMSG_DETACHED_FLAG 来指示消息中包含分离数据。
如果未设置CMSG_DETACHED_FLAG,并且已使用 CryptMsgOpenToDecode 或 CryptMsgOpenToEncode 打开消息, 则 fFinal 设置为 TRUE,并且 仅调用一次 CryptMsgUpdate 。
如果已设置CMSG_DETACHED_FLAG标志并使用 CryptMsgOpenToEncode 打开消息,则 fFinal 仅在上次调用 CryptMsgUpdate 时设置为 TRUE。
如果设置了CMSG_DETACHED_FLAG标志并使用 CryptMsgOpenToDecode 打开消息,则通过对 CryptMsgUpdate 的单个调用处理标头时,fFinal 将设置为 TRUE。 在对 CryptMsgUpdate 的后续调用中处理分离数据时,它设置为 FALSE,直到处理最后一个分离的数据块。 上次调用 CryptMsgUpdate 时,它设置为 TRUE。
解码分离数据时,消息的标头和内容将包含在不同的 BLOB 中。 每个 BLOB 要求在对该 BLOB 进行函数的最后一次调用时将 fFinal 设置为 TRUE 。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零, (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。
如果使用流式处理,在 CryptMsgOpenToDecode 和 CryptMsgOpenToEncode 中由 pStreamInfo 指定的应用程序定义的回调函数中遇到的错误可能会传播到 CryptMsgUpdate。 如果发生这种情况,在回调函数返回后,CryptMsgUpdate 不会调用 SetLastError,这将保留应用程序控制下遇到的任何错误。 回调函数 (或调用的 API 之一负责,) 在应用程序处理流数据时出错时调用 SetLastError 。
下表列出了 GetLastError 函数最常返回的错误代码。
返回代码 | 说明 |
---|---|
|
消息类型无效。 |
|
执行加密操作时遇到错误。 |
|
对象标识符的格式不正确。 |
|
消息未按预期进行编码。 |
|
加密算法未知。 |
|
一个或多个参数无效。 |
|
内存不足。 |
以下任一函数都可能会遇到传播错误:
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |