Función VirtualProtectFromApp (memoryapi.h)
Cambia la protección en una región de páginas confirmadas en el espacio de direcciones virtuales del proceso de llamada.
Sintaxis
BOOL VirtualProtectFromApp(
[in] PVOID Address,
[in] SIZE_T Size,
[in] ULONG NewProtection,
[out] PULONG OldProtection
);
Parámetros
[in] Address
Puntero a una dirección que describe la página inicial 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, VirtualAllocFromApp o VirtualAllocEx mediante MEM_RESERVE. Las páginas no pueden abarcar regiones reservadas adyacentes asignadas por llamadas independientes a VirtualAlloc, VirtualAllocFromApp o VirtualAllocEx mediante MEM_RESERVE.
[in] Size
Tamaño de la región cuyos atributos de protección de acceso se van a cambiar, en bytes. La región de las páginas afectadas incluye todas las páginas que contienen uno o varios bytes en el intervalo desde el parámetro Address a (Address+Size)
. 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] NewProtection
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).
Las siguientes constantes generan un error:
- PAGE_EXECUTE_READWRITE
- PAGE_EXECUTE_WRITECOPY
- PAGE_EXECUTE
- PAGE_EXECUTE_READ
[out] OldProtection
Puntero a una variable que recibe el valor de 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
Puedes llamar a VirtualProtectFromApp desde aplicaciones de la Tienda Windows con funcionalidades Just-In-Time (JIT) para usar la funcionalidad JIT. La aplicación debe incluir la funcionalidad codeGeneration en el archivo de manifiesto de la aplicación para usar las funcionalidades JIT.
Solo puede establecer el valor de protección de acceso 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 VirtualProtectFromApp 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.
VirtualProtectFromApp permite marcar páginas como ejecutables, pero no permite establecer permisos de escritura y ejecución al mismo tiempo.
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 10 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2016 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | memoryapi.h (incluye Windows.h) |
Library | WindowsApp.lib |
Archivo DLL | Kernel32.dll |