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
);
値 | 意味 |
---|---|
|
CMSG_STREAM_INFOで指定された引数。 |
|
アプリケーションで使用できる処理済みデータのブロックへのポインター。 |
|
pbData で処理されたデータのブロックのサイズ (バイト単位)。 |
|
データの最後のブロックが処理され、これがコールバックが最後に実行されることを指定します。 |
pvArg
コールバック関数に渡す引数へのポインター。 通常、これは、より深く入れ子になったメッセージ (デコード時) またはあまり深く入れ子になっていないメッセージ (エンコード時) へのハンドルを含む状態データに使用されます。
注釈
メッセージは非常に大きくなる可能性があるため、メッセージ全体をメモリに格納して一度に処理することは、不可能ではないにしても困難な場合があります。 処理するデータを管理可能なサイズのブロックにストリーミングすることで、メモリ制限を発生させずに大きなメッセージを処理できます。 低レベルのメッセージ関数をストリーミングと共に使用して、メッセージをエンコードまたはデコードできます。 エンコードするストリーミングとデコードするストリーミングでは、メッセージの入れ子のレベルがサポートされます。
ストリームとして処理される入力メッセージは 、CryptMsgUpdate に一 度に 1 つのブロックにフィードされ、アプリケーションによってブロックのサイズが決定されます。 ストリーミング されたメッセージがエンコードまたはデコードのために処理されると、結果の出力データは 、pfnStreamOutput メンバーによって指定されたアプリケーション指定のコールバック関数を介してアプリケーションに返されます。
サイズは、エンベロープ メッセージを処理する際の暗号化アルゴリズムのブロック サイズによって発生する出力ブロック サイズのジッターや、PKCS # 7 で定義されたメッセージ ヘッダーと SignerInfo を含むブロックが処理される場合など、いくつかの理由で異なる可能性があるため、出力データのブロック サイズに関する想定は行われません。
出力ブロックのサイズは、 cbData パラメーターでコールバック関数に渡されます。 出力データの使用は、呼び出し元のアプリケーションで決定されます。 通常、ストリーム処理からの出力は、メモリの制限によりメモリ全体に保持されません。むしろ、ディスクまたはサーバー ファイルにシリアル化されます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | wincrypt.h |