estrutura CMSG_STREAM_INFO (wincrypt.h)

A estrutura CMSG_STREAM_INFO é usada para habilitar o processamento de fluxo de dados em vez de processamento de bloco único. Stream processamento é usado com mais frequência ao processar mensagens grandes. Stream mensagens processadas podem ser originadas de qualquer fonte serializada, como um arquivo em um disco rígido, um servidor ou um CD ROM.

Essa estrutura é passada para as funções CryptMsgOpenToEncode e CryptMsgOpenToDecode .

Sintaxe

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

Membros

cbContent

Especifica o tamanho, em bytes, do conteúdo. A codificação DER (Distinguished Encoding Rules normal) é usada, a menos que CMSG_INDEFINITE_LENGTH(0xFFFFFFFF) seja passado, indicando que o aplicativo não está especificando o comprimento do conteúdo. Isso força o uso de codificação BER (Regras básicas de codificação ) de comprimento indefinido.

pfnStreamOutput

O endereço de uma função de retorno de chamada usada para ler e gravar dados em um disco ao processar mensagens grandes.

A função de retorno de chamada deve ter a seguinte assinatura e parâmetros:

#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
Os argumentos especificados por CMSG_STREAM_INFO.
pbData
Um ponteiro para um bloco de dados processados que está disponível para o aplicativo.
cbData
O tamanho, em bytes, do bloco de dados processados em pbData.
fFinal
Especifica que o último bloco de dados está sendo processado e que esta é a última vez que o retorno de chamada será executado.

pvArg

Um ponteiro para o argumento a ser passado para a função de retorno de chamada. Normalmente, isso é usado para dados de estado que incluem o identificador para uma mensagem mais profundamente aninhada (ao decodificar) ou uma mensagem menos aninhada (durante a codificação).

Comentários

As mensagens podem ser tão grandes que processá-las todas de uma só vez armazenando toda a mensagem na memória pode ser difícil, se não impossível. É possível processar mensagens grandes sem encontrar limitações de memória transmitindo os dados que devem ser processados em blocos de tamanho gerenciável. As funções de mensagem de baixo nível podem ser usadas com streaming para codificar ou decodificar uma mensagem. Há suporte para qualquer nível de aninhamento de mensagens ao transmitir para codificar e transmitir para decodificar.

A mensagem de entrada a ser processada como um fluxo se alimenta de CryptMsgUpdate um bloco de cada vez, com o aplicativo determinando o tamanho do bloco. À medida que a mensagem transmitida é processada para codificação ou decodificação, os dados de saída resultantes são passados de volta para o aplicativo por meio de uma função de retorno de chamada especificada pelo aplicativo especificada pelo membro pfnStreamOutput .

Nenhuma suposição pode ser feita sobre o tamanho do bloco dos dados de saída porque o tamanho pode variar por vários motivos, como a tremulação no tamanho do bloco de saída causada pelo tamanho do bloco para o algoritmo de criptografia ao processar uma mensagem envelopeada ou quando blocos que contêm o cabeçalho da mensagem e o SignerInfo, conforme definido pelo PKCS nº 7, são processados.

O tamanho do bloco de saída é passado para a função de retorno de chamada em seu parâmetro cbData . O uso de dados de saída é determinado no aplicativo de chamada. Normalmente, a saída do processamento de fluxo não será mantida na memória como um todo devido a limitações de memória; em vez disso, ele será serializado para um disco ou arquivo de servidor.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho wincrypt.h