estructura CMSG_STREAM_INFO (wincrypt.h)

La estructura CMSG_STREAM_INFO se usa para habilitar el procesamiento de flujos de datos en lugar del procesamiento de bloques único. Stream procesamiento se usa con más frecuencia al procesar mensajes grandes. Stream mensajes procesados pueden originarse en cualquier origen serializado, como un archivo en un disco duro, un servidor o una ROM de CD.

Esta estructura se pasa a las funciones CryptMsgOpenToEncode y CryptMsgOpenToDecode .

Sintaxis

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

Miembros

cbContent

Especifica el tamaño, en bytes, del contenido. La codificación normal reglas de codificación distinguida (DER) se usa a menos que se pase CMSG_INDEFINITE_LENGTH(0xFFFFFFFF), lo que indica que la aplicación no especifica la longitud del contenido. Esto fuerza el uso de la codificación básica (BER) de longitud indefinida.

pfnStreamOutput

Dirección de una función de devolución de llamada usada para leer y escribir datos en un disco al procesar mensajes grandes.

La función de devolución de llamada debe tener la firma y los parámetros siguientes:

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

Valor Significado
pvArg
Argumentos especificados por CMSG_STREAM_INFO.
pbData
Puntero a un bloque de datos procesados que está disponible para la aplicación.
cbData
Tamaño, en bytes, del bloque de datos procesados en pbData.
fFinal
Especifica que se está procesando el último bloque de datos y que esta es la última vez que se ejecutará la devolución de llamada.

pvArg

Puntero al argumento que se va a pasar a la función de devolución de llamada. Normalmente, se usa para los datos de estado que incluyen el identificador de un mensaje más profundamente anidado (al descodificar) o un mensaje menos profundamente anidado (al codificar).

Comentarios

Los mensajes pueden ser tan grandes que procesarlos a la vez almacenando todo el mensaje en la memoria puede ser difícil, si no imposible. Es posible procesar mensajes grandes sin encontrar limitaciones de memoria al transmitir los datos que se van a procesar en bloques de tamaño administrable. Las funciones de mensaje de bajo nivel se pueden usar con streaming para codificar o descodificar un mensaje. Se admite cualquier nivel de anidamiento de mensajes cuando se transmite para codificar y transmitir para descodificar.

El mensaje de entrada que se va a procesar como una secuencia se alimenta en CryptMsgUpdate de un bloque cada vez, con la aplicación que determina el tamaño del bloque. A medida que se procesa el mensaje transmitido para codificar o descodificar, los datos de salida resultantes se devuelven a la aplicación a través de una función de devolución de llamada especificada por la aplicación especificada por el miembro pfnStreamOutput .

No se puede realizar ninguna suposición sobre el tamaño de bloque de los datos de salida porque el tamaño puede variar por varias razones, como el vibración en el tamaño del bloque de salida causado por el tamaño del bloque para el algoritmo de cifrado al procesar un mensaje sobre o cuando se procesan bloques que contienen el encabezado del mensaje y SignerInfo, tal como se define en PKCS # 7.

El tamaño del bloque de salida se pasa a la función de devolución de llamada en su parámetro cbData . El uso de datos de salida se determina en la aplicación que realiza la llamada. Normalmente, la salida del procesamiento de flujos no se conservará en la memoria en su conjunto debido a las limitaciones de memoria; en su lugar, se serializará en un disco o archivo de servidor.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado wincrypt.h