Module: wine Branch: master Commit: a10c40df231121cf7580dad1cac6eee02fc91902 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a10c40df231121cf7580dad1ca...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Dec 5 15:43:13 2006 +0100
ntdll: Added support for the HEAP_CREATE_ENABLE_EXECUTE flag.
---
dlls/ntdll/heap.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index 53f2695..2f52aec 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c @@ -201,6 +201,12 @@ static inline unsigned int get_freelist_ return i; }
+/* get the memory protection type to use for a given heap */ +static inline ULONG get_protection_type( DWORD flags ) +{ + return (flags & HEAP_CREATE_ENABLE_EXECUTE) ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE; +} + static RTL_CRITICAL_SECTION_DEBUG process_heap_critsect_debug = { 0, 0, NULL, /* will be set later */ @@ -411,7 +417,7 @@ static inline BOOL HEAP_Commit( SUBHEAP size -= subheap->commitSize; ptr = (char *)subheap + subheap->commitSize; if (NtAllocateVirtualMemory( NtCurrentProcess(), &ptr, 0, - &size, MEM_COMMIT, PAGE_READWRITE )) + &size, MEM_COMMIT, get_protection_type( subheap->heap->flags ) )) { WARN("Could not commit %08lx bytes at %p for heap %p\n", size, ptr, subheap->heap ); @@ -594,7 +600,7 @@ static BOOL HEAP_InitSubHeap( HEAP *heap if (flags & HEAP_SHARED) commitSize = totalSize; /* always commit everything in a shared heap */ if (NtAllocateVirtualMemory( NtCurrentProcess(), &address, 0, - &commitSize, MEM_COMMIT, PAGE_READWRITE )) + &commitSize, MEM_COMMIT, get_protection_type( flags ) )) { WARN("Could not commit %08lx bytes for sub-heap %p\n", commitSize, address ); return FALSE; @@ -690,7 +696,7 @@ static SUBHEAP *HEAP_CreateSubHeap( HEAP { /* allocate the memory block */ if (NtAllocateVirtualMemory( NtCurrentProcess(), &address, 0, &totalSize, - MEM_RESERVE, PAGE_READWRITE )) + MEM_RESERVE, get_protection_type( flags ) )) { WARN("Could not allocate %08lx bytes\n", totalSize ); return NULL;