VirtualProtect, fonction (memoryapi.h)
Modifie la protection sur une région de pages validées dans l’espace d’adressage virtuel du processus appelant.
Pour modifier la protection d’accès d’un processus, utilisez la fonction VirtualProtectEx .
Syntaxe
BOOL VirtualProtect(
[in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] PDWORD lpflOldProtect
);
Paramètres
[in] lpAddress
Adresse de la page de début de la région des pages dont les attributs de protection d’accès doivent être modifiés.
Toutes les pages de la région spécifiée doivent se trouver dans la même région réservée allouée lors de l’appel de la fonction VirtualAlloc ou VirtualAllocEx à l’aide de MEM_RESERVE. Les pages ne peuvent pas couvrir des régions réservées adjacentes qui ont été allouées par des appels distincts à VirtualAlloc ou VirtualAllocEx à l’aide de MEM_RESERVE.
[in] dwSize
Taille de la région dont les attributs de protection d’accès doivent être modifiés, en octets. La région des pages affectées inclut toutes les pages contenant un ou plusieurs octets dans la plage du paramètre lpAddress à (lpAddress+dwSize)
. Cela signifie qu’une plage de 2 octets chevauchant une limite de page entraîne la modification des attributs de protection des deux pages.
[in] flNewProtect
Option de protection de la mémoire. Ce paramètre peut être l’une des constantes de protection de la mémoire.
Pour les vues mappées, cette valeur doit être compatible avec la protection d’accès spécifiée lorsque la vue a été mappée (voir MapViewOfFile, MapViewOfFileEx et MapViewOfFileExNuma).
[out] lpflOldProtect
Pointeur vers une variable qui reçoit la valeur de protection d’accès précédente de la première page dans la région de pages spécifiée. Si ce paramètre a la valeur NULL ou ne pointe pas vers une variable valide, la fonction échoue.
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Vous pouvez définir la valeur de protection d’accès sur les pages validées uniquement. Si l’état d’une page de la région spécifiée n’est pas validé, la fonction échoue et retourne sans modifier la protection d’accès des pages de la région spécifiée.
Le modificateur de protection PAGE_GUARD établit des pages de protection. Les pages de protection agissent comme des alarmes d’accès à une seule fois. Pour plus d’informations, consultez Création de pages de garde.
Il est préférable d’éviter d’utiliser VirtualProtect pour modifier les protections de page sur les blocs de mémoire alloués par GlobalAlloc, HeapAlloc ou LocalAlloc, car plusieurs blocs de mémoire peuvent exister sur une même page. Le gestionnaire de tas suppose que toutes les pages du tas accordent au moins un accès en lecture et en écriture.
Lors de la protection d’une région qui sera exécutable, le programme appelant a la responsabilité de garantir la cohérence du cache via un appel approprié à FlushInstructionCache une fois le code défini en place. Sinon, les tentatives d’exécution de code à partir de la région nouvellement exécutable peuvent produire des résultats imprévisibles.
Configuration requise
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | memoryapi.h (inclure Windows.h, Memoryapi.h) |
Bibliothèque | onecore.lib |
DLL | Kernel32.dll |
Voir aussi
Fonctions de gestion de la mémoire
Constantes de protection de la mémoire