Compartir a través de


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

Constantes de protección de memoria

Funciones de memoria virtual

VirtualAlloc

VirtualProtect

VirtualQueryEx