Función NCryptStreamUpdate (ncryptprotect.h)
La función NCryptStreamUpdate cifra y descifra bloques de datos.
Sintaxis
SECURITY_STATUS NCryptStreamUpdate(
[in] NCRYPT_STREAM_HANDLE hStream,
[in] const BYTE *pbData,
SIZE_T cbData,
BOOL fFinal
);
Parámetros
[in] hStream
Controle el objeto de secuencia creado llamando a NCryptStreamOpenToProtect o NCryptStreamOpenToUnprotect.
[in] pbData
Puntero a la matriz de bytes que se va a procesar.
cbData
Número de bytes de la matriz binaria especificada por el parámetro pbData .
fFinal
Valor booleano que especifica si se ha procesado el último bloque de datos.
Valor devuelto
Devuelve un código de estado que indica el éxito o error de la función. Entre los códigos de retorno posibles se incluyen, entre otros, los siguientes.
Código devuelto | Descripción |
---|---|
|
La función se realizó correctamente. |
|
No se pudo descodificar el contenido. |
|
El identificador de secuencia al que apunta el parámetro hStream no es válido. |
|
No había memoria suficiente disponible para procesar el contenido. |
Comentarios
Debe llamar a NCryptStreamOpenToProtect o NCryptStreamOpenToUnprotect para abrir una secuencia antes de llamar a NCryptStreamUpdate.
Los mensajes pueden ser tan grandes que procesarlos a la vez almacenando todo el mensaje en la memoria puede ser difícil. Sin embargo, es posible procesar mensajes de gran tamaño mediante la creación de particiones de los datos que se van a procesar en bloques administrables.
Para ello, use NCryptStreamUpdate en un bucle que avanza a través del bloque de archivos por bloque. A medida que se procesa el mensaje transmitido, los datos de salida resultantes se devuelven a la aplicación mediante una función de devolución de llamada que especifique. Esto se muestra en el siguiente ejemplo. Para obtener más información sobre la función de devolución de llamada, 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 | Value |
---|---|
Cliente mínimo compatible | Windows 8 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2012 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | ncryptprotect.h |
Library | NCrypt.lib |
Archivo DLL | NCrypt.dll |