VirtualProtectEx, fonction (memoryapi.h)

Modifie la protection sur une région de pages validées dans l’espace d’adressage virtuel d’un processus spécifié.

Syntaxe

BOOL VirtualProtectEx(
  [in]  HANDLE hProcess,
  [in]  LPVOID lpAddress,
  [in]  SIZE_T dwSize,
  [in]  DWORD  flNewProtect,
  [out] PDWORD lpflOldProtect
);

Paramètres

[in] hProcess

Handle du processus dont la protection de la mémoire doit être modifiée. Le handle doit avoir le droit d’accès PROCESS_VM_OPERATION . Pour plus d’informations, consultez Droits d’accès et de sécurité des processus.

[in] lpAddress

Pointeur vers l’adresse de base 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 sont 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 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

La valeur de protection d’accès peut être définie uniquement sur les pages validées. 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 VirtualProtectEx 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

Condition requise Valeur
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

Fonctions de mémoire virtuelle

VirtualAlloc

VirtualProtect

VirtualQueryEx