FillVolatileMemory, fonction

La fonction FillVolatileMemory remplit un bloc de mémoire avec la valeur de remplissage spécifiée.

Important

Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.

Paramètres

Paramètre Destination [out]

Pointeur vers l’adresse de début du bloc de mémoire à remplir.

Paramètre Length [in]

Taille du bloc de mémoire à remplir, en octets. Cette valeur doit être inférieure à la taille de la mémoire tampon Destination.

Paramètre Fill [in]

Valeur d’octet avec laquelle remplir le bloc de mémoire.

Syntaxe

volatile void*
  FillVolatileMemory (
    _Out_writes_bytes_all_(Length) volatile void* Destination,
    SIZE_T Length,
    INT Fill
  );

Notes

Cette API existe pour fournir un comportement FillMemory (c’est-à-dire définir le contenu d’une mémoire tampon) dans les situations où le développeur doit être sûr que l’opération du paramètre se produit (autrement dit, qu’elle n’est pas soumise à des optimisations du compilateur). L'API a les propriétés suivantes :

  • L’API n’est pas reconnue comme étant intrinsèque au compilateur : celui-ci n’optimise donc jamais l’appel (entièrement ou en remplaçant l’appel par une séquence d’instructions « équivalente »). Ceci diffère de FillMemory, qui est soumis à diverses optimisations du compilateur.
  • Une fois l’appel retourné, la mémoire tampon a été remplacée par la valeur souhaitée. Ces accès mémoire des fonctions à la Destination seront effectués seulement au sein de la fonction (autrement dit, le compilateur ne peut pas déplacer les accès mémoire en dehors de cette fonction).
  • L’API peut effectuer des accès à la mémoire non alignés si la plateforme l’autorise.
  • L’API peut accéder plusieurs fois à des emplacements mémoire dans le cadre de son opération.

Remarque

Cette fonction fonctionne sur toutes les versions de Windows, pas seulement sur la dernière. Vous devez utiliser le SDK le plus récent pour obtenir la déclaration de fonction de l’en-tête winbase.h. Vous avez également besoin de la bibliothèque (volatileaccessu.lib) du SDK le plus récent. Cependant, le fichier binaire résultant s’exécutera 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 FillMemory because
// if the compiler realizes that "SensitiveData" is not
// referenced again the compiler can remove the call to FillMemory.
// Instead we can call SecureZeroMemory2, ZeroVolatileMemory, or FillVolatileMemory
// (the former two are convenience wrappers around the latter). These
// calls will not be optimized away by the compiler.
// Note that SecureZeroMemory2 performs better than the old
// SecureZeroMemory API.

FillVolatileMemory(&SensitiveData, sizeof(SensitiveData), 0);

Spécifications

Client minimal pris en charge : Windows 11 Insider Preview Build TBD

En-tête : winbase.h (include Winbase.h)

Bibliothèque en mode noyau : volatileaccessk.lib

Bibliothèque en mode utilisateur : volatileaccessu.lib

Voir aussi