CMSG_STREAM_INFO 结构 (wincrypt.h)

CMSG_STREAM_INFO 结构用于启用数据的流处理,而不是单个块处理。 处理大型消息时,最常使用Stream处理。 Stream处理的消息可能源自任何序列化源,例如硬盘、服务器或 CD ROM 上的文件。

此结构将传递给 CryptMsgOpenToEncodeCryptMsgOpenToDecode 函数。

语法

typedef struct _CMSG_STREAM_INFO {
  DWORD                  cbContent;
  PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
  void                   *pvArg;
} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;

成员

cbContent

指定内容的大小(以字节为单位)。 除非传递CMSG_INDEFINITE_LENGTH (0xFFFFFFFF) ,否则使用正常可辨别编码规则 (DER) 编码,指示应用程序未指定内容长度。 这会强制使用无限长 的基本编码规则 (BER) 编码。

pfnStreamOutput

用于在处理大型消息时从磁盘读取数据并将数据写入磁盘的回调函数的地址。

回调函数必须具有以下签名和参数:

#include <windows.h>
#include <Wincrypt.h>

BOOL WINAPI CmsgStreamOutputCallback(
  IN const void *pvArg,  //in
  IN BYTE *pbData,       //in
  IN DWORD cbData,       //in
  IN BOOL fFinal         //in
);

含义
pvArg
由 CMSG_STREAM_INFO 指定的参数。
pbData
指向应用程序可用的已处理数据块的指针。
cbData
pbData 处已处理数据块的大小(以字节为单位)。
fFinal
指定正在处理最后一个数据块,这是最后一次执行回调。

pvArg

指向要传递给回调函数的参数的指针。 通常,它用于状态数据,其中包括解码) 时嵌套程度更高的消息 (的句柄,或编码) 时嵌套程度较低的消息 (。

注解

消息可能非常大,以至于通过将整个消息存储在内存中来一次性处理它们可能很困难(如果不是不可能的话)。 通过将要处理的数据流式传输到可管理大小的块中,可以在不遇到内存限制的情况下处理大型消息。 低级别消息函数可以与流式处理一起使用,以便对消息进行编码或解码。 流式处理到编码和流式处理以解码时,支持任何级别的消息嵌套。

要作为流处理的输入消息一次将一个块馈送到 CryptMsgUpdate 中,应用程序将确定块的大小。 处理流消息进行编码或解码时,生成的输出数据将通过 pfnStreamOutput 成员指定的应用程序指定的回调函数传回应用程序。

无法对输出数据的块大小做出假设,因为大小可能因多种原因而异,例如处理信封消息时加密算法的块大小导致的输出块大小抖动,或者处理包含 PKCS #7 定义的消息头和 SignerInfo 的块时。

输出块的大小将传递给其 cbData 参数中的回调函数。 输出数据的使用在调用应用程序中确定。 通常,由于内存限制,流处理的输出不会作为一个整体保留在内存中;相反,它将序列化为磁盘或服务器文件。

要求

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