structure CMSG_STREAM_INFO (wincrypt.h)
La structure CMSG_STREAM_INFO est utilisée pour activer le traitement de flux de données plutôt que le traitement d’un seul bloc. Stream traitement est le plus souvent utilisé lors du traitement de messages volumineux. Stream messages traités peuvent provenir de n’importe quelle source sérialisée telle qu’un fichier sur un disque dur, un serveur ou un CD-ROM.
Cette structure est transmise aux fonctions CryptMsgOpenToEncode et CryptMsgOpenToDecode .
Syntaxe
typedef struct _CMSG_STREAM_INFO {
DWORD cbContent;
PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
void *pvArg;
} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;
Membres
cbContent
Spécifie la taille, en octets, du contenu. L’encodage de Distinguished Encoding Rules normal (DER) est utilisé, sauf si CMSG_INDEFINITE_LENGTH(0xFFFFFFFF) est passé, ce qui indique que l’application ne spécifie pas la longueur du contenu. Cela force l’utilisation de l’encodage BER ( Basic Encoding Rules ) de longueur indéfinie.
pfnStreamOutput
Adresse d’une fonction de rappel utilisée pour lire et écrire des données sur un disque lors du traitement de messages volumineux.
La fonction de rappel doit avoir la signature et les paramètres suivants :
#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
Pointeur vers l’argument à passer à la fonction de rappel. En règle générale, cela est utilisé pour les données d’état qui incluent le handle vers un message imbriqué plus profondément (lors du décodage) ou un message moins profondément imbriqué (lors de l’encodage).
Remarques
Les messages peuvent être si volumineux qu’il peut être difficile, voire impossible, de les traiter en même temps en stockant l’ensemble du message en mémoire. Il est possible de traiter des messages volumineux sans rencontrer de limitations de mémoire en continuant les données qui doivent être traitées dans des blocs de taille gérable. Les fonctions de message de bas niveau peuvent être utilisées avec le streaming pour encoder ou décoder un message. N’importe quel niveau d’imbrication des messages est pris en charge lors de la diffusion en continu à encoder et de la diffusion en continu à décoder.
Le message d’entrée à traiter en tant que flux est envoyé dans CryptMsgUpdate un bloc à la fois, l’application déterminant la taille du bloc. Lorsque le message diffusé en continu est traité pour l’encodage ou le décodage, les données de sortie obtenues sont transmises à l’application via une fonction de rappel spécifiée par l’application spécifiée par le membre pfnStreamOutput .
Aucune hypothèse ne peut être faite concernant la taille de bloc des données de sortie, car la taille peut varier pour plusieurs raisons, telles que la gigue dans la taille du bloc de sortie provoquée par la taille de bloc pour l’algorithme de chiffrement lors du traitement d’un message enveloppe, ou lorsque les blocs qui contiennent l’en-tête du message et signerInfo tel que défini par PKCS #7 sont traités.
La taille du bloc de sortie est passée à la fonction de rappel dans son paramètre cbData . L’utilisation des données de sortie est déterminée dans l’application appelante. En règle générale, la sortie du traitement de flux ne sera pas conservée dans la mémoire dans son ensemble en raison de limitations de mémoire ; au lieu de cela, il sera sérialisé dans un fichier de disque ou de serveur.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
En-tête | wincrypt.h |