Funzione CryptUnprotectMemory (dpapi.h)
La funzione CryptUnprotectMemory decrittografa la memoria crittografata usando la funzione CryptProtectMemory .
Sintassi
DPAPI_IMP BOOL CryptUnprotectMemory(
[in, out] LPVOID pDataIn,
[in] DWORD cbDataIn,
[in] DWORD dwFlags
);
Parametri
[in, out] pDataIn
Puntatore al blocco di memoria da decrittografare. Il parametro cbData specifica il numero di byte che la funzione tenterà di decrittografare. Se i dati contenuti nello spazio di memoria sono inferiori al numero di byte specificati, la funzione tenterà di decrittografare i dati all'esterno del blocco previsto. Se è maggiore di cbData byte, verranno decrittografati solo i primi byte cbData .
[in] cbDataIn
Numero di byte di memoria a cui punta il parametro pData per decrittografare. Il numero di byte deve essere un multiplo della costante CRYPTPROTECTMEMORY_BLOCK_SIZE definita in Wincrypt.h.
[in] dwFlags
Questo parametro può essere uno dei flag seguenti. È necessario specificare lo stesso flag durante la crittografia e la decrittografia della memoria.
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce TRUE.
Se la funzione ha esito negativo, restituisce FALSE. Per informazioni sull'errore estese, chiamare GetLastError.
Commenti
L'uso di CryptProtectMemory e CryptUnprotectMemory per la crittografia delle password non è sicuro perché i dati esistono come testo non crittografato in memoria prima che vengano crittografati e in qualsiasi momento il chiamante la decrittografa per l'uso.
È necessario crittografare e decrittografare la memoria durante la stessa sessione di avvio. Se il computer viene riavviato prima di chiamare la funzione CryptUnprotectMemory , non sarà possibile decrittografare i dati.
È necessario passare lo stesso flag a CryptUnprotectMemory e CryptProtectMemory. Se si passano flag diversi, la funzione CryptUnprotectMemory ha esito positivo; tuttavia, il risultato è imprevedibile.
Al termine dell'uso delle informazioni riservate, cancellarla dalla memoria chiamando la funzione SecureZeroMemory .
Esempio
Nell'esempio seguente viene chiamata la funzione CryptUnprotectMemory per decrittografare i dati in memoria. L'esempio presuppone che la variabile pEncryptedText punti a una stringa crittografata usando la funzione CryptProtectMemory .
#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
#include <strsafe.h>
#pragma comment(lib, "crypt32.lib")
void main()
{
LPWSTR pEncryptedText; // contains the encrypted text
DWORD cbEncryptedText; // number of bytes to which
// pEncryptedText points
if (CryptUnprotectMemory(pEncryptedText, cbEncryptedText,
CRYPTPROTECTMEMORY_SAME_PROCESS))
{
// Use the decrypted string.
}
else
{
wprintf(L"CryptUnprotectMemory failed: %d\n",
GetLastError());
}
// Clear and free memory after using
// the decrypted string or if an error occurs.
SecureZeroMemory(pEncryptedText, cbEncryptedText);
LocalFree(pEncryptedText);
pEncryptedText = NULL;
}
Requisiti
Client minimo supportato | Windows Vista [app desktop | App UWP] |
Server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | dpapi.h |
Libreria | Crypt32.lib |
DLL | Crypt32.dll |