Función VirtualProtectEx (memoryapi.h)
Cambia la protección en una región de páginas confirmadas en el espacio de direcciones virtuales de un proceso especificado.
Sintaxis
BOOL VirtualProtectEx(
[in] HANDLE hProcess,
[in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] PDWORD lpflOldProtect
);
Parámetros
[in] hProcess
Identificador del proceso cuya protección de memoria se va a cambiar. El identificador debe tener el derecho de acceso PROCESS_VM_OPERATION . Para obtener más información, consulte Derechos de acceso y seguridad de procesos.
[in] lpAddress
Puntero a la dirección base de la región de páginas cuyos atributos de protección de acceso se van a cambiar.
Todas las páginas de la región especificada deben estar dentro de la misma región reservada asignada al llamar a la función VirtualAlloc o VirtualAllocEx mediante MEM_RESERVE. Las páginas no pueden abarcar regiones reservadas adyacentes asignadas por llamadas independientes a VirtualAlloc o VirtualAllocEx mediante MEM_RESERVE.
[in] dwSize
Tamaño de la región cuyos atributos de protección de acceso se cambian, en bytes. La región de las páginas afectadas incluye todas las páginas que contienen uno o más bytes en el intervalo desde el parámetro lpAddress a (lpAddress+dwSize)
. Esto significa que un intervalo de 2 bytes que coloca un límite de página hace que se cambien los atributos de protección de ambas páginas.
[in] flNewProtect
La opción de protección de memoria. Este parámetro puede ser una de las constantes de protección de memoria.
Para las vistas asignadas, este valor debe ser compatible con la protección de acceso especificada cuando se asignó la vista (vea MapViewOfFile, MapViewOfFileEx y MapViewOfFileExNuma).
[out] lpflOldProtect
Puntero a una variable que recibe la protección de acceso anterior de la primera página de la región especificada de páginas. Si este parámetro es NULL o no apunta a una variable válida, se produce un error en la función.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
El valor de protección de acceso solo se puede establecer en páginas confirmadas. Si el estado de cualquier página de la región especificada no se confirma, se produce un error en la función y devuelve sin modificar la protección de acceso de las páginas de la región especificada.
El modificador de protección PAGE_GUARD establece páginas de protección. Las páginas de protección actúan como alarmas de acceso de un solo disparo. Para obtener más información, vea Creating Guard Pages (Crear páginas de protección).
Es mejor evitar el uso de VirtualProtectEx para cambiar las protecciones de página en bloques de memoria asignados por GlobalAlloc, HeapAlloc o LocalAlloc, ya que pueden existir varios bloques de memoria en una sola página. El administrador del montón supone que todas las páginas del montón conceden al menos acceso de lectura y escritura.
Al proteger una región que será ejecutable, el programa de llamada asume la responsabilidad de garantizar la coherencia de la memoria caché a través de una llamada adecuada a FlushInstructionCache una vez establecido el código. De lo contrario, los intentos de ejecutar código fuera de la región recién ejecutable pueden producir resultados imprevisibles.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | memoryapi.h (incluye Windows.h, Memoryapi.h) |
Library | onecore.lib |
Archivo DLL | Kernel32.dll |
Consulte también
Funciones de administración de memoria