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 Significato
CRYPTPROTECTMEMORY_SAME_PROCESS
Crittografare e decrittografare la memoria nello stesso processo. Un'applicazione in esecuzione in un processo diverso non sarà in grado di decrittografare i dati.
CRYPTPROTECTMEMORY_CROSS_PROCESS
Crittografare e decrittografare la memoria in processi diversi. Un'applicazione in esecuzione in un processo diverso sarà in grado di decrittografare i dati.
CRYPTPROTECTMEMORY_SAME_LOGON
Usare le stesse credenziali di accesso per crittografare e decrittografare la memoria in processi diversi. Un'applicazione in esecuzione in un processo diverso sarà in grado di decrittografare i dati. Tuttavia, il processo deve essere eseguito come lo stesso utente che ha crittografato i dati e nella stessa sessione di accesso.

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

Vedi anche

CryptProtectMemory

CryptUnprotectData

RtlDecryptMemory

RtlEncryptMemory