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.
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 |