Funzione NCryptStreamUpdate (ncryptprotect.h)
La funzione NCryptStreamUpdate crittografa e decrittografa i blocchi di dati.
Sintassi
SECURITY_STATUS NCryptStreamUpdate(
[in] NCRYPT_STREAM_HANDLE hStream,
[in] const BYTE *pbData,
SIZE_T cbData,
BOOL fFinal
);
Parametri
[in] hStream
Gestire l'oggetto di flusso creato chiamando NCryptStreamOpenToProtect o NCryptStreamOpenToUnprotect.
[in] pbData
Puntatore alla matrice di byte da elaborare.
cbData
Numero di byte nella matrice binaria specificata dal parametro pbData .
fFinal
Valore booleano che specifica se l'ultimo blocco di dati è stato elaborato.
Valore restituito
Restituisce un codice di stato che indica l'esito positivo o negativo della funzione. I codici restituiti possibili includono, ma non sono limitati a, i seguenti.
Codice restituito | Descrizione |
---|---|
|
La funzione ha avuto esito positivo. |
|
Impossibile decodificare il contenuto. |
|
L'handle di flusso a cui punta il parametro hStream non è valido. |
|
Memoria insufficiente disponibile per elaborare il contenuto. |
Commenti
È necessario chiamare NCryptStreamOpenToProtect o NCryptStreamOpenToUnprotect per aprire un flusso prima di chiamare NCryptStreamUpdate
I messaggi possono essere così grandi che elaborarli tutti contemporaneamente archiviando l'intero messaggio in memoria può essere difficile. È tuttavia possibile elaborare messaggi di grandi dimensioni partizionando i dati da elaborare in blocchi gestibili.
A tale scopo, usare NCryptStreamUpdate in un ciclo che avanza attraverso il blocco di file per blocco. Quando viene elaborato il messaggio in flusso, i dati di output risultanti vengono passati all'applicazione usando una funzione di callback specificata. come nell'esempio seguente. Per altre informazioni sulla funzione di callback, vedere 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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 [solo app desktop] |
Server minimo supportato | Windows Server 2012 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | ncryptprotect.h |
Libreria | NCrypt.lib |
DLL | NCrypt.dll |