Share via


Fonction CryptUnprotectMemory (dpapi.h)

La fonction CryptUnprotectMemory déchiffre la mémoire chiffrée à l’aide de la fonction CryptProtectMemory .

Syntaxe

DPAPI_IMP BOOL CryptUnprotectMemory(
  [in, out] LPVOID pDataIn,
  [in]      DWORD  cbDataIn,
  [in]      DWORD  dwFlags
);

Paramètres

[in, out] pDataIn

Pointeur vers le bloc de mémoire à déchiffrer. Le paramètre cbData spécifie le nombre d’octets que la fonction tente de déchiffrer. Si les données contenues dans l’espace mémoire sont inférieures au nombre d’octets spécifié, la fonction tente de déchiffrer les données en dehors du bloc prévu. S’il est supérieur aux octets cbData , seuls les premiers octets cbData sont déchiffrés.

[in] cbDataIn

Nombre d’octets de mémoire pointés vers le paramètre pData à déchiffrer. Le nombre d’octets doit être un multiple de la constante CRYPTPROTECTMEMORY_BLOCK_SIZE définie dans Wincrypt.h.

[in] dwFlags

Ce paramètre peut être l’un des indicateurs suivants. Vous devez spécifier le même indicateur lors du chiffrement et du déchiffrement de la mémoire.

Valeur Signification
CRYPTPROTECTMEMORY_SAME_PROCESS
Chiffrer et déchiffrer la mémoire dans le même processus. Une application s’exécutant dans un autre processus ne peut pas déchiffrer les données.
CRYPTPROTECTMEMORY_CROSS_PROCESS
Chiffrer et déchiffrer la mémoire dans différents processus. Une application s’exécutant dans un autre processus sera en mesure de déchiffrer les données.
CRYPTPROTECTMEMORY_SAME_LOGON
Utilisez les mêmes informations d’identification d’ouverture de session pour chiffrer et déchiffrer la mémoire dans différents processus. Une application s’exécutant dans un autre processus sera en mesure de déchiffrer les données. Toutefois, le processus doit s’exécuter en tant qu’utilisateur qui a chiffré les données et dans la même session d’ouverture de session.

Valeur retournée

Si la fonction réussit, la fonction retourne TRUE.

Si la fonction échoue, elle retourne FALSE. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Notes

L’utilisation de CryptProtectMemory et CryptUnprotectMemory pour le chiffrement de mot de passe n’est pas sécurisée, car les données existent sous forme de texte clair dans la mémoire avant qu’elles ne soient chiffrées et à tout moment l’appelant les déchiffre pour les utiliser.

Vous devez chiffrer et déchiffrer la mémoire pendant la même session de démarrage. Si l’ordinateur est redémarré avant d’appeler la fonction CryptUnprotectMemory , vous ne pourrez pas déchiffrer les données.

Vous devez passer le même indicateur à CryptUnprotectMemory et CryptProtectMemory. Si vous passez des indicateurs différents, la fonction CryptUnprotectMemory réussit ; toutefois, le résultat est imprévisible.

Lorsque vous avez terminé d’utiliser les informations sensibles, effacez-les de la mémoire en appelant la fonction SecureZeroMemory .

Exemples

L’exemple suivant appelle la fonction CryptUnprotectMemory pour déchiffrer les données en mémoire. L’exemple suppose que la variable pEncryptedText pointe vers une chaîne qui a été chiffrée à l’aide de la fonction 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;
}

Spécifications

   
Client minimal pris en charge Windows Vista [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête dpapi.h
Bibliothèque Crypt32.lib
DLL Crypt32.dll

Voir aussi

CryptProtectMemory

CryptUnprotectData

RtlDecryptMemory

RtlEncryptMemory