Condividi tramite


CMSG_STREAM_INFO struttura (wincrypt.h)

La struttura CMSG_STREAM_INFO viene usata per abilitare l'elaborazione del flusso di dati anziché l'elaborazione a blocchi singoli. Stream l'elaborazione viene spesso usata durante l'elaborazione di messaggi di grandi dimensioni. Stream messaggi elaborati possono derivare da qualsiasi origine serializzata, ad esempio un file in un disco rigido, un server o un ROM CD.

Questa struttura viene passata alle funzioni CryptMsgOpenToEncode e CryptMsgOpenToDecode.

Sintassi

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

Members

cbContent

Specifica le dimensioni, in byte, del contenuto. La codifica normale Distinguished Encoding Rules (DER) viene usata a meno che non venga passata CMSG_INDEFINITE_LENGTH(0xFFFFFFFF), indicando che l'applicazione non specifica la lunghezza del contenuto. Questo impone l'uso della codifica BER (Basic Encoding Rules ) a lunghezza indefinita.

pfnStreamOutput

Indirizzo di una funzione di callback usata per leggere e scrivere dati in un disco durante l'elaborazione di messaggi di grandi dimensioni.

La funzione di callback deve avere le firme e i parametri seguenti:

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

Valore Significato
pvArg
Gli argomenti specificati da CMSG_STREAM_INFO.
pbData
Puntatore a un blocco di dati elaborati disponibile per l'applicazione.
cbData
Dimensioni, in byte, del blocco di dati elaborati in pbData.
fFinal
Specifica che l'ultimo blocco di dati viene elaborato e che si tratta dell'ultima volta che verrà eseguito il callback.

pvArg

Puntatore all'argomento da passare alla funzione di callback. In genere, questo viene usato per i dati di stato che includono l'handle a un messaggio annidato più profondo (quando si decodifica) o un messaggio meno annidato (quando si codifica).

Commenti

I messaggi possono essere così grandi che elaborarli tutti contemporaneamente archiviando l'intero messaggio in memoria può essere difficile, se non impossibile. È possibile elaborare messaggi di grandi dimensioni senza riscontrare limitazioni di memoria trasmettendo i dati che devono essere elaborati in blocchi di dimensioni gestibili. Le funzioni di messaggio di basso livello possono essere usate con streaming per codificare o decodificare un messaggio. Qualsiasi livello di annidamento dei messaggi è supportato quando lo streaming per codificare e trasmettere per decodificare.

Messaggio di input da elaborare come feed di flusso in CryptMsgUpdate un blocco alla volta, con l'applicazione che determina le dimensioni del blocco. Poiché il messaggio trasmesso viene elaborato per la codifica o la decodifica, i dati di output risultanti vengono passati all'applicazione tramite una funzione di callback specificata dall'applicazione specificata dall'applicazione specificata dal membro pfnStreamOutput .

Non è possibile effettuare ipotesi sulle dimensioni del blocco dei dati di output perché le dimensioni possono variare per diversi motivi, ad esempio il jitter nelle dimensioni del blocco di output causate dalle dimensioni del blocco per l'algoritmo di crittografia durante l'elaborazione di un messaggio busto o quando vengono elaborati blocchi che contengono l'intestazione del messaggio e SignerInfo, come definito da PKCS # 7.

Le dimensioni del blocco di output vengono passate alla funzione di callback nel relativo parametro cbData . L'uso dei dati di output viene determinato nell'applicazione chiamante. In genere, l'output dall'elaborazione del flusso non verrà mantenuto nella memoria nel suo complesso a causa delle limitazioni di memoria; invece, verrà serializzato in un file del disco o del server.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione wincrypt.h