CMSG_STREAM_INFO 構造体 (wincrypt.h)

CMSG_STREAM_INFO構造体は、単一ブロック処理ではなく、データのストリーム処理を有効にするために使用されます。 Stream処理は、大きなメッセージを処理するときに最もよく使用されます。 Stream処理されたメッセージは、ハード ディスク上のファイル、サーバー、CD ROM など、シリアル化された任意のソースから送信できます。

この構造体は、 CryptMsgOpenToEncode 関数と CryptMsgOpenToDecode 関数に渡されます。

構文

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) が渡されない限り、アプリケーションでコンテンツの長さが指定されていないことを示す通常のDistinguished Encoding Rules (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 に一 度に 1 つのブロックにフィードされ、アプリケーションによってブロックのサイズが決定されます。 ストリーミング されたメッセージがエンコードまたはデコードのために処理されると、結果の出力データは 、pfnStreamOutput メンバーによって指定されたアプリケーション指定のコールバック関数を介してアプリケーションに返されます。

サイズは、エンベロープ メッセージを処理する際の暗号化アルゴリズムのブロック サイズによって発生する出力ブロック サイズのジッターや、PKCS # 7 で定義されたメッセージ ヘッダーと SignerInfo を含むブロックが処理される場合など、いくつかの理由で異なる可能性があるため、出力データのブロック サイズに関する想定は行われません。

出力ブロックのサイズは、 cbData パラメーターでコールバック関数に渡されます。 出力データの使用は、呼び出し元のアプリケーションで決定されます。 通常、ストリーム処理からの出力は、メモリの制限によりメモリ全体に保持されません。むしろ、ディスクまたはサーバー ファイルにシリアル化されます。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header wincrypt.h