Função NCryptStreamUpdate (ncryptprotect.h)
A função NCryptStreamUpdate criptografa e descriptografa blocos de dados.
Sintaxe
SECURITY_STATUS NCryptStreamUpdate(
[in] NCRYPT_STREAM_HANDLE hStream,
[in] const BYTE *pbData,
SIZE_T cbData,
BOOL fFinal
);
Parâmetros
[in] hStream
Manipule para o objeto de fluxo criado chamando NCryptStreamOpenToProtect ou NCryptStreamOpenToUnprotect.
[in] pbData
Ponteiro para a matriz de bytes a ser processada.
cbData
Número de bytes na matriz binária especificada pelo parâmetro pbData .
fFinal
Um valor booliano que especifica se o último bloco de dados foi processado.
Retornar valor
Retorna um código status que indica o êxito ou a falha da função. Os códigos de retorno possíveis incluem, mas não se limitam a, o seguinte.
Código de retorno | Descrição |
---|---|
|
A função foi bem-sucedida. |
|
Não foi possível decodificar o conteúdo. |
|
O identificador de fluxo apontado pelo parâmetro hStream não é válido. |
|
Não havia memória suficiente disponível para processar o conteúdo. |
Comentários
Você deve chamar NCryptStreamOpenToProtect ou NCryptStreamOpenToUnprotect para abrir um fluxo antes de chamar NCryptStreamUpdate
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. No entanto, é possível processar mensagens grandes particionando os dados a serem processados em blocos gerenciáveis.
Para fazer isso, use NCryptStreamUpdate em um loop que avança pelo bloco de arquivos por bloco. À medida que a mensagem transmitida é processada, os dados de saída resultantes são passados de volta para seu aplicativo usando uma função de retorno de chamada que você especificar. Isso é demonstrado no exemplo a seguir. Para obter mais informações sobre a função de retorno de chamada, consulte PFNCryptStreamOutputCallback.
BOOL fFinal = FALSE;
PBYTE pbBuf = NULL;
// Determine the number of bytes to read.
DWORD cbData = GetFileSize( hFileIn, NULL );
// Call NCryptStreamUpdate while there is data left to read.
while(FALSE == fFinal)
{
// Read dwBlockSize bytes from the file.
if(dwBlockSize > 1)
{
if( !ReadFile(hFileIn, pbBuf, dwBlockSize, &cbResult, NULL) )
{
hr = HRESULT_FROM_WIN32(hr);
goto CleanUp;
}
}
// Decrement the number of bytes to read by the current amount read.
cbData -= cbResult;
// Set fFinal if there are no bytes left to read.
if (cbData <= 0) fFinal = TRUE;
// Encrypt (or decrypt) the bytes pointed to by pbBuf
hr = NCryptStreamUpdate(hStream, pbBuf, cbResult, fFinal);
if( FAILED(hr) )
{
goto CleanUp;
}
}
CleanUp:
if( NULL != hStream )
{
NCryptStreamClose(hStream);
}
if( NULL != hDescriptor )
{
NCryptCloseProtectionDescriptor( hDescriptor );
}
if(NULL != pbBuf)
{
LocalFree(pbBuf);
pbBuf = NULL;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2012 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | ncryptprotect.h |
Biblioteca | NCrypt.lib |
DLL | NCrypt.dll |