Freigeben über


CryptUnprotectMemory-Funktion (dpapi.h)

Die CryptUnprotectMemory-Funktion entschlüsselt Arbeitsspeicher, der mit der Funktion CryptProtectMemory verschlüsselt wurde.

Syntax

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

Parameter

[in, out] pDataIn

Ein Zeiger auf den zu entschlüsselnden Speicherblock. Der cbData-Parameter gibt die Anzahl der Bytes an, die die Funktion entschlüsseln möchte. Wenn die im Arbeitsspeicher enthaltenen Daten kleiner als die angegebene Anzahl von Bytes sind, versucht die Funktion, Daten außerhalb des beabsichtigten Blocks zu entschlüsseln. Wenn es größer als cbData-Bytes ist, werden nur die ersten cbData-Bytes entschlüsselt.

[in] cbDataIn

Anzahl der Bytes des Arbeitsspeichers, auf die der pData-Parameter verweist, der entschlüsselt werden soll. Die Anzahl der Bytes muss ein Vielfaches der in Wincrypt.h definierten CRYPTPROTECTMEMORY_BLOCK_SIZE Konstanten sein.

[in] dwFlags

Dieser Parameter kann eines der folgenden Flags sein. Beim Verschlüsseln und Entschlüsseln des Arbeitsspeichers müssen Sie das gleiche Flag angeben.

Wert Bedeutung
CRYPTPROTECTMEMORY_SAME_PROCESS
Verschlüsseln und Entschlüsseln des Arbeitsspeichers im selben Prozess. Eine Anwendung, die in einem anderen Prozess ausgeführt wird, kann die Daten nicht entschlüsseln.
CRYPTPROTECTMEMORY_CROSS_PROCESS
Ver- und Entschlüsselung von Arbeitsspeicher in verschiedenen Prozessen. Eine Anwendung, die in einem anderen Prozess ausgeführt wird, kann die Daten entschlüsseln.
CRYPTPROTECTMEMORY_SAME_LOGON
Verwenden Sie dieselben Anmeldeinformationen, um Arbeitsspeicher in verschiedenen Prozessen zu verschlüsseln und zu entschlüsseln. Eine Anwendung, die in einem anderen Prozess ausgeführt wird, kann die Daten entschlüsseln. Der Prozess muss jedoch als derselbe Benutzer ausgeführt werden, der die Daten verschlüsselt hat, und in derselben Anmeldesitzung.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion TRUE zurück.

Wenn die Funktion fehlschlägt, gibt sie FALSE zurück. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Hinweise

Die Verwendung von CryptProtectMemory und CryptUnprotectMemory für die Kennwortverschlüsselung ist nicht sicher, da die Daten als Klartext im Arbeitsspeicher vorhanden sind, bevor sie verschlüsselt werden und der Aufrufer sie jederzeit zur Verwendung entschlüsselt.

Sie müssen den Arbeitsspeicher während derselben Startsitzung verschlüsseln und entschlüsseln. Wenn der Computer neu gestartet wird, bevor Sie die CryptUnprotectMemory-Funktion aufrufen, können Sie die Daten nicht entschlüsseln.

Sie müssen das gleiche Flag an CryptUnprotectMemory und CryptProtectMemory übergeben. Wenn Sie verschiedene Flags übergeben, ist die Funktion CryptUnprotectMemory erfolgreich; das Ergebnis ist jedoch unvorhersehbar.

Wenn Sie die verwendung der vertraulichen Informationen abgeschlossen haben, löschen Sie sie aus dem Arbeitsspeicher, indem Sie die SecureZeroMemory-Funktion aufrufen.

Beispiele

Im folgenden Beispiel wird die CryptUnprotectMemory-Funktion aufgerufen, um Daten im Arbeitsspeicher zu entschlüsseln. Im Beispiel wird davon ausgegangen, dass die Variable pEncryptedText auf eine Zeichenfolge verweist, die mit der Funktion CryptProtectMemory verschlüsselt wurde.

#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;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile dpapi.h
Bibliothek Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CryptProtectMemory

CryptUnprotectData

RtlDecryptMemory

RtlEncryptMemory