[RPCRT4][CRT]
authorThomas Faber <thomas.faber@reactos.org>
Mon, 23 Jun 2014 20:39:49 +0000 (20:39 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Mon, 23 Jun 2014 20:39:49 +0000 (20:39 +0000)
- Do not omit the last argument to VirtualProtect, it will cause the function to fail

svn path=/trunk/; revision=63636

reactos/dll/win32/rpcrt4/cproxy.c
reactos/dll/win32/rpcrt4/cstub.c
reactos/lib/sdk/crt/except/stack.c

index bc5fcf0..bf8a591 100644 (file)
@@ -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 */
     {
index d3a26d7..5beeec1 100644 (file)
@@ -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 */
     {
index 0fc725c..6141612 100644 (file)
@@ -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);
 }