Changes the protection on a region of committed pages in the virtual address space of a specified process.
Syntax
BOOL WINAPI VirtualProtectEx(
__in HANDLE hProcess,
__in LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD flNewProtect,
__out PDWORD lpflOldProtect
);
Parameters
- hProcess [in]
-
A handle to the process whose memory protection is to be changed. The handle must have the PROCESS_VM_OPERATION access right. For more information, see
Process Security and Access Rights.
- lpAddress [in]
-
A pointer to the base address of the region of pages whose access protection attributes are to be changed.
All pages in the specified region must be within the same reserved region allocated when calling the
VirtualAlloc or
VirtualAllocEx function using MEM_RESERVE. The pages cannot span adjacent reserved regions that were allocated by separate calls to
VirtualAlloc or
VirtualAllocEx using MEM_RESERVE.
- dwSize [in]
-
The size of the region whose access protection attributes are changed, in bytes. The region of affected pages includes all pages containing one or more bytes in the range from the lpAddress parameter to (lpAddress+dwSize). This means that a 2-byte range straddling a page boundary causes the protection attributes of both pages to be changed.
- flNewProtect [in]
-
The memory protection option. This parameter can be one of the
memory protection constants.
This value must be compatible with the access protection specified for the pages using VirtualAlloc or
VirtualAllocEx.
- lpflOldProtect [out]
-
A pointer to a variable that receives the previous access protection of the first page in the specified region of pages. If this parameter is NULL or does not point to a valid variable, the function fails.
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call
GetLastError.
Remarks
The access protection value can be set only on committed pages. If the state of any page in the specified region is not committed, the function fails and returns without modifying the access protection of any pages in the specified region.
The PAGE_GUARD protection modifier establishes guard pages. Guard pages act as one-shot access alarms. For more information, see
Creating Guard Pages.
It is best to avoid using VirtualProtectEx to change page protections on memory blocks allocated by GlobalAlloc, HeapAlloc, or LocalAlloc, because multiple memory blocks can exist on a single page. The heap manager assumes that all pages in the heap grant at least read and write access.
Requirements
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | Winbase.h (include Windows.h) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |
See Also
- Memory
Management Functions
- Virtual Memory Functions
- VirtualAlloc
- VirtualProtect
- VirtualQueryEx
Send comments about this topic to Microsoft
Build date: 11/19/2009