Freigeben über


CMSG_STREAM_INFO-Struktur (wincrypt.h)

Die CMSG_STREAM_INFO-Struktur wird verwendet, um die Datenstromverarbeitung anstelle der Einzelblockverarbeitung zu ermöglichen. Stream Wird am häufigsten bei der Verarbeitung großer Nachrichten verwendet. Stream verarbeiteten Nachrichten können aus jeder serialisierten Quelle stammen, z. B. aus einer Datei auf einer Festplatte, einem Server oder einer CD-ROM.

Diese Struktur wird an die Funktionen CryptMsgOpenToEncode und CryptMsgOpenToDecode übergeben.

Syntax

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

Member

cbContent

Gibt die Größe des Inhalts in Bytes an. Die normale Distinguished Encoding Rules-Codierung (DER) wird verwendet, es sei denn, CMSG_INDEFINITE_LENGTH(0xFFFFFFFF) wird übergeben, was angibt, dass die Anwendung die Inhaltslänge nicht angibt. Dadurch wird die Verwendung der BER-Codierung (Basic Encoding Rules ) auf unbestimmte Länge erzwungen.

pfnStreamOutput

Die Adresse einer Rückruffunktion, die zum Lesen und Schreiben von Daten auf einen Datenträger bei der Verarbeitung großer Nachrichten verwendet wird.

Die Rückruffunktion muss über die folgenden Signaturen und Parameter verfügen:

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

Wert Bedeutung
pvArg
Die von CMSG_STREAM_INFO angegebenen Argumente.
pbData
Ein Zeiger auf einen Block verarbeiteter Daten, der für die Anwendung verfügbar ist.
cbData
Die Größe des Blocks der verarbeiteten Daten in pbData in Byte.
fFinal
Gibt an, dass der letzte Datenblock verarbeitet wird und dass der Rückruf zum letzten Mal ausgeführt wird.

pvArg

Ein Zeiger auf das Argument, das an die Rückruffunktion übergeben werden soll. In der Regel wird dies für Zustandsdaten verwendet, die das Handle für eine tiefer geschachtelte Nachricht (beim Decodieren) oder eine weniger tief geschachtelte Nachricht (bei der Codierung) enthalten.

Hinweise

Nachrichten können so groß sein, dass die Verarbeitung aller Nachrichten auf einmal durch speichern der gesamten Nachricht im Arbeitsspeicher schwierig, wenn nicht gar unmöglich sein kann. Es ist möglich, große Nachrichten zu verarbeiten, ohne auf Speicherbeschränkungen zu stoßen, indem die Daten gestreamt werden, die in Blöcke mit verwaltbarer Größe verarbeitet werden sollen. Die Nachrichtenfunktionen auf niedriger Ebene können beim Streaming verwendet werden, um eine Nachricht zu codieren oder zu decodieren. Jede Ebene der Schachtelung von Nachrichten wird beim Streaming zum Codieren und Streaming zum Decodieren unterstützt.

Die Eingabenachricht, die als Stream verarbeitet werden soll, wird Block für Block in CryptMsgUpdate eingespeist, wobei die Anwendung die Größe des Blocks bestimmt. Während die gestreamte Nachricht für die Codierung oder Decodierung verarbeitet wird, werden die resultierenden Ausgabedaten über eine anwendungsspezifische Rückruffunktion, die vom pfnStreamOutput-Member angegeben wird, an die Anwendung zurückgegeben.

Es können keine Annahmen über die Blockgröße der Ausgabedaten getroffen werden, da die Größe aus verschiedenen Gründen variieren kann, z. B. aufgrund der Jitter in der Ausgabeblockgröße, die durch die Blockgröße für den Verschlüsselungsalgorithmus bei der Verarbeitung einer umhüllten Nachricht verursacht wird, oder wenn Blöcke verarbeitet werden, die den Nachrichtenheader und die SignerInfo enthalten, wie von PKCS # 7 definiert.

Die Größe des Ausgabeblocks wird an die Rückruffunktion in ihrem cbData-Parameter übergeben. Die Verwendung von Ausgabedaten wird in der aufrufenden Anwendung bestimmt. In der Regel wird die Ausgabe der Streamverarbeitung aufgrund von Speicherbeschränkungen nicht im gesamten Arbeitsspeicher beibehalten. Stattdessen wird sie in eine Datenträger- oder Serverdatei serialisiert.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile wincrypt.h