Fonction RtlSecureZeroMemory2 (wdm.h)
La fonction RtlSecureZeroMemory2 est un wrapper pratique autour de RtlFillVolatileMemory et est identique à RtlZeroVolatileMemory.
Syntaxe
volatile void * RtlSecureZeroMemory2(
[out] volatile void *Destination,
[in] size_t Length
);
Paramètres
[out] Destination
Pointeur vers l’adresse de départ du bloc de mémoire à remplir avec des zéros.
[in] Length
Taille du bloc de mémoire à remplir avec des zéros, en octets.
Valeur retournée
Retourne la valeur de Destination.
Remarques
La fonction RtlSecureZeroMemory2 est un wrapper pratique autour de RtlFillVolatileMemory et est identique à RtlZeroVolatileMemory.
Pour plus d’informations, consultez la section remarques de RtlFillVolatileMemory.
Notes
Cette fonction fonctionne sur toutes les versions de Windows, pas seulement sur la dernière version. Vous devez utiliser le dernier WDK pour obtenir la déclaration de fonction à partir de l’en-tête wdm.h. Vous avez également besoin de la bibliothèque (volatileaccessk.lib) du dernier WDK. Toutefois, le pilote résultant s’exécute correctement sur les versions antérieures de Windows.
Exemple
UCHAR SensitiveData[100];
// Imagine we temporarily store some sensitive cryptographic
// material in a buffer.
StoreCryptographicKey(&SensitiveData);
DoCryptographicOperation(&SensitiveData);
// Now that we are done using the sensitive data we want to
// erase it from the stack. We cannot call RtlFillMemory because
// if the compiler realizes that "SensitiveData" is not
// referenced again the compiler can remove the call to RtlFillMemory.
// Instead we can call RtlSecureZeroMemory2, RtlZeroVolatileMemory, or RtlFillVolatileMemory
// (the former two are convenience wrappers around the latter). These
// calls will not be optimized away by the compiler.
// Note that RtlSecureZeroMemory2 performs better than
// RtlSecureZeroMemory function.
RtlSecureZeroMemory2(&SensitiveData, sizeof(SensitiveData));
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | wdm.h (inclure Wdm.h) |
Bibliothèque | volatileaccessk.lib (mode noyau), volatileaccessu.lib (mode utilisateur) |