- Rewrite usermode callbacks. These changes should greatly optimize graphic operation...
[reactos.git] / reactos / subsys / win32k / ntuser / callback.c
index 4b616c8..606c197 100644 (file)
@@ -182,7 +182,7 @@ co_IntCallWindowProc(WNDPROC Proc,
    Arguments->wParam = wParam;
    Arguments->lParam = lParam;
    Arguments->lParamBufferSize = lParamBufferSize;
-   ResultPointer = Arguments;
+   ResultPointer = NULL;
    ResultLength = ArgumentLength;
 
    UserLeaveCo();
@@ -193,6 +193,9 @@ co_IntCallWindowProc(WNDPROC Proc,
                       &ResultPointer,
                       &ResultLength);
 
+   /* Simulate old behaviour: copy into our local buffer */
+   RtlMoveMemory(Arguments, ResultPointer, ArgumentLength);
+
    UserEnterCo();
 
    if (!NT_SUCCESS(Status))
@@ -224,7 +227,7 @@ co_IntLoadSysMenuTemplate()
    PVOID ResultPointer;
    ULONG ResultLength;
 
-   ResultPointer = &Result;
+   ResultPointer = NULL;
    ResultLength = sizeof(LRESULT);
 
    UserLeaveCo();
@@ -235,6 +238,9 @@ co_IntLoadSysMenuTemplate()
                       &ResultPointer,
                       &ResultLength);
 
+   /* Simulate old behaviour: copy into our local buffer */
+   Result = *(LRESULT*)ResultPointer;
+
    UserEnterCo();
 
    if (!NT_SUCCESS(Status))
@@ -253,7 +259,7 @@ co_IntLoadDefaultCursors(VOID)
    ULONG ResultLength;
    BOOL DefaultCursor = TRUE;
 
-   ResultPointer = &Result;
+   ResultPointer = NULL;
    ResultLength = sizeof(LRESULT);
 
    UserLeaveCo();
@@ -264,6 +270,9 @@ co_IntLoadDefaultCursors(VOID)
                       &ResultPointer,
                       &ResultLength);
 
+   /* Simulate old behaviour: copy into our local buffer */
+   Result = *(LRESULT*)ResultPointer;
+
    UserEnterCo();
 
    if (!NT_SUCCESS(Status))
@@ -384,7 +393,7 @@ co_IntCallHookProc(INT HookId,
          break;
    }
 
-   ResultPointer = &Result;
+   ResultPointer = NULL;
    ResultLength = sizeof(LRESULT);
 
    UserLeaveCo();
@@ -395,6 +404,9 @@ co_IntCallHookProc(INT HookId,
                       &ResultPointer,
                       &ResultLength);
 
+   /* Simulate old behaviour: copy into our local buffer */
+   Result = *(LRESULT*)ResultPointer;
+
    UserEnterCo();
 
    IntCbFreeMemory(Argument);