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)이 전달되지 않는 한 DER(일반 Distinguished Encoding Rules) 인코딩이 사용됩니다. 이렇게 하면 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 에 피드되며 애플리케이션은 블록의 크기를 결정합니다. 스트리밍된 메시지가 인코딩 또는 디코딩을 위해 처리될 때 결과 출력 데이터는 pfnStreamOutput 멤버에 의해 지정된 애플리케이션 지정 콜백 함수를 통해 애플리케이션에 다시 전달됩니다.
봉투 메시지를 처리할 때 암호화 알고리즘의 블록 크기로 인해 발생하는 출력 블록 크기의 지터 또는 PKCS #7에 정의된 메시지 헤더 및 SignerInfo가 포함된 블록이 처리되는 경우와 같이 크기가 여러 가지 이유로 달라질 수 있으므로 출력 데이터의 블록 크기에 대해 가정할 수 없습니다.
출력 블록의 크기는 cbData 매개 변수의 콜백 함수에 전달됩니다. 출력 데이터의 사용은 호출 애플리케이션에서 결정됩니다. 일반적으로 스트림 처리의 출력은 메모리 제한으로 인해 메모리 전체에 유지되지 않습니다. 오히려 디스크 또는 서버 파일로 직렬화됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
머리글 | wincrypt.h |