From: Thomas Faber Date: Mon, 23 Jun 2014 20:39:49 +0000 (+0000) Subject: [RPCRT4][CRT] X-Git-Tag: backups/0.3.17@66124~961 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=f5c9dd0ad67f918513537f836c3741d21f9a5006 [RPCRT4][CRT] - Do not omit the last argument to VirtualProtect, it will cause the function to fail svn path=/trunk/; revision=63636 --- diff --git a/reactos/dll/win32/rpcrt4/cproxy.c b/reactos/dll/win32/rpcrt4/cproxy.c index bc5fcf008cf..bf8a5910d81 100644 --- a/reactos/dll/win32/rpcrt4/cproxy.c +++ b/reactos/dll/win32/rpcrt4/cproxy.c @@ -175,13 +175,14 @@ static const struct thunk *allocate_block( unsigned int num ) { unsigned int i; struct thunk *prev, *block; + DWORD oldprot; block = VirtualAlloc( NULL, BLOCK_SIZE * sizeof(*block), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE ); if (!block) return NULL; for (i = 0; i < BLOCK_SIZE; i++) init_thunk( &block[i], BLOCK_SIZE * num + i + 3 ); - VirtualProtect( block, BLOCK_SIZE * sizeof(*block), PAGE_EXECUTE_READ, NULL ); + VirtualProtect( block, BLOCK_SIZE * sizeof(*block), PAGE_EXECUTE_READ, &oldprot ); prev = InterlockedCompareExchangePointer( (void **)&method_blocks[num], block, NULL ); if (prev) /* someone beat us to it */ { diff --git a/reactos/dll/win32/rpcrt4/cstub.c b/reactos/dll/win32/rpcrt4/cstub.c index d3a26d73c93..5beeec173f7 100644 --- a/reactos/dll/win32/rpcrt4/cstub.c +++ b/reactos/dll/win32/rpcrt4/cstub.c @@ -176,6 +176,7 @@ static const vtbl_method_t *allocate_block( unsigned int num ) { unsigned int i; vtbl_method_t *prev, *block; + DWORD oldprot; block = VirtualAlloc( NULL, BLOCK_SIZE * sizeof(*block), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE ); @@ -186,7 +187,7 @@ static const vtbl_method_t *allocate_block( unsigned int num ) memcpy( &block[i], opcodes, sizeof(opcodes) ); block[i].offset = (BLOCK_SIZE * num + i + 3) * sizeof(void *); } - VirtualProtect( block, BLOCK_SIZE * sizeof(*block), PAGE_EXECUTE_READ, NULL ); + VirtualProtect( block, BLOCK_SIZE * sizeof(*block), PAGE_EXECUTE_READ, &oldprot ); prev = InterlockedCompareExchangePointer( (void **)&method_blocks[num], block, NULL ); if (prev) /* someone beat us to it */ { diff --git a/reactos/lib/sdk/crt/except/stack.c b/reactos/lib/sdk/crt/except/stack.c index 0fc725c6e50..61416121ff6 100644 --- a/reactos/lib/sdk/crt/except/stack.c +++ b/reactos/lib/sdk/crt/except/stack.c @@ -38,7 +38,8 @@ void _chkesp_failed(void) int CDECL _resetstkoflw(void) { int stack_addr; + DWORD oldprot; /* causes stack fault that updates NtCurrentTeb()->Tib.StackLimit */ - return VirtualProtect( &stack_addr, 1, PAGE_GUARD|PAGE_READWRITE, NULL ); + return VirtualProtect(&stack_addr, 1, PAGE_GUARD|PAGE_READWRITE, &oldprot); }