struktur CMSG_STREAM_INFO (wincrypt.h)

Struktur CMSG_STREAM_INFO digunakan untuk mengaktifkan pemrosesan aliran data daripada pemrosesan blok tunggal. pemrosesan Stream paling sering digunakan saat memproses pesan besar. pesan yang diproses Stream dapat berasal dari sumber berseri seperti file pada hard disk, server, atau CD ROM.

Struktur ini diteruskan ke fungsi CryptMsgOpenToEncode dan CryptMsgOpenToDecode .

Sintaks

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

Anggota

cbContent

Menentukan ukuran, dalam byte, konten. Pengodean normal Distinguished Encoding Rules (DER) digunakan kecuali CMSG_INDEFINITE_LENGTH (0xFFFFFFFF) diteruskan, menunjukkan bahwa aplikasi tidak menentukan panjang konten. Ini memaksa penggunaan pengodean Aturan Pengodean Dasar (BER) dengan panjang yang tidak terbatas.

pfnStreamOutput

Alamat fungsi panggilan balik yang digunakan untuk membaca dari dan menulis data ke disk saat memproses pesan besar.

Fungsi panggilan balik harus memiliki tanda tangan dan parameter berikut:

#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
);

Nilai Makna
pvArg
Argumen yang ditentukan oleh CMSG_STREAM_INFO.
pbData
Penunjuk ke blok data yang diproses yang tersedia untuk aplikasi.
cbData
Ukuran, dalam byte, dari blok data yang diproses di pbData.
fFinal
Menentukan bahwa blok data terakhir sedang diproses dan ini adalah terakhir kalinya panggilan balik akan dijalankan.

pvArg

Penunjuk ke argumen untuk diteruskan ke fungsi panggilan balik. Biasanya, ini digunakan untuk data status yang mencakup handel ke pesan yang lebih dalam berlapis (saat mendekode) atau pesan yang kurang dalam (saat pengodean).

Keterangan

Pesan bisa sangat besar sehingga memproses semuanya sekaligus dengan menyimpan seluruh pesan dalam memori bisa sulit, jika tidak mustahil. Dimungkinkan untuk memproses pesan besar tanpa mengalami batasan memori dengan mengalirkan data yang akan diproses menjadi blok berukuran dapat dikelola. Fungsi pesan tingkat rendah dapat digunakan dengan streaming untuk mengodekan atau mendekode pesan. Tingkat berlapis pesan apa pun didukung saat streaming untuk mengodekan dan melakukan streaming untuk mendekode.

Pesan input yang akan diproses sebagai umpan aliran ke CryptMsgUpdate satu blok sekaligus, dengan aplikasi yang menentukan ukuran blok. Saat pesan yang dialirkan diproses untuk pengodean atau pendekodean, data output yang dihasilkan diteruskan kembali ke aplikasi melalui fungsi panggilan balik yang ditentukan aplikasi yang ditentukan oleh anggota pfnStreamOutput .

Tidak ada asumsi yang dapat dibuat tentang ukuran blok data output karena ukurannya dapat bervariasi karena beberapa alasan, seperti jitter dalam ukuran blok output yang disebabkan oleh ukuran blok untuk algoritma enkripsi saat memproses pesan yang diselimuti, atau ketika blok yang berisi header pesan dan SignerInfo seperti yang didefinisikan oleh PKCS # 7 diproses.

Ukuran blok output diteruskan ke fungsi panggilan balik dalam parameter cbData-nya . Penggunaan data output ditentukan dalam aplikasi panggilan. Biasanya, output dari pemrosesan aliran tidak akan bertahan dalam memori secara keseluruhan karena keterbatasan memori; sebaliknya, itu akan diserialisasikan ke disk atau file server.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Header wincrypt.h