Fonction NCryptStreamUpdate (ncryptprotect.h)
La fonction NCryptStreamUpdate chiffre et déchiffre les blocs de données.
Syntaxe
SECURITY_STATUS NCryptStreamUpdate(
[in] NCRYPT_STREAM_HANDLE hStream,
[in] const BYTE *pbData,
SIZE_T cbData,
BOOL fFinal
);
Paramètres
[in] hStream
Gérez l’objet de flux créé en appelant NCryptStreamOpenToProtect ou NCryptStreamOpenToUnprotect.
[in] pbData
Pointeur vers le tableau d’octets à traiter.
cbData
Nombre d’octets dans le tableau binaire spécifié par le paramètre pbData .
fFinal
Valeur booléenne qui spécifie si le dernier bloc de données a été traité.
Valeur retournée
Retourne un code status qui indique la réussite ou l’échec de la fonction. Les codes de retour possibles incluent, sans s’y limiter, les éléments suivants.
Code de retour | Description |
---|---|
|
La fonction a réussi. |
|
Le contenu n’a pas pu être décodé. |
|
Le handle de flux pointé vers le paramètre hStream n’est pas valide. |
|
La mémoire disponible était insuffisante pour traiter le contenu. |
Remarques
Vous devez appeler NCryptStreamOpenToProtect ou NCryptStreamOpenToUnprotect pour ouvrir un flux avant d’appeler NCryptStreamUpdate
Les messages peuvent être si volumineux qu’il peut être difficile de les traiter en même temps en stockant l’intégralité du message en mémoire. Toutefois, il est possible de traiter des messages volumineux en partitionnant les données à traiter en blocs gérables.
Pour ce faire, utilisez NCryptStreamUpdate dans une boucle qui avance dans le fichier bloc par bloc. Lorsque le message diffusé est traité, les données de sortie résultantes sont transmises à votre application à l’aide d’une fonction de rappel que vous spécifiez. En voici une illustration dans l’exemple suivant. Pour plus d’informations sur la fonction de rappel, consultez 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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8 [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2012 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | ncryptprotect.h |
Bibliothèque | NCrypt.lib |
DLL | NCrypt.dll |