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 所定義的 SignerInfo # 7。

輸出區塊的大小會傳遞至 其 cbData 參數中的回呼函式。 輸出數據的使用是在呼叫的應用程式中決定。 一般而言,由於記憶體限制,串流處理的輸出不會保存在記憶體中;相反地,它會串行化為磁碟或伺服器檔案。

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
標頭 wincrypt.h