-surround user part (most of it) with a single lock (currently a mutex, but will be a resource). other now useless locks will be removed next.
-dont call NtUser fucnctions internally (they are syscalls only!)
-prepend co_ to functions leading to a "callout" (callback, wait, etc)
Modified: trunk/reactos/subsys/win32k/eng/window.c
Modified: trunk/reactos/subsys/win32k/include/callback.h
Modified: trunk/reactos/subsys/win32k/include/caret.h
Modified: trunk/reactos/subsys/win32k/include/csr.h
Modified: trunk/reactos/subsys/win32k/include/desktop.h
Modified: trunk/reactos/subsys/win32k/include/focus.h
Modified: trunk/reactos/subsys/win32k/include/guicheck.h
Modified: trunk/reactos/subsys/win32k/include/hook.h
Modified: trunk/reactos/subsys/win32k/include/msgqueue.h
Modified: trunk/reactos/subsys/win32k/include/painting.h
Modified: trunk/reactos/subsys/win32k/include/scroll.h
Added: trunk/reactos/subsys/win32k/include/userfuncs.h
Modified: trunk/reactos/subsys/win32k/include/vis.h
Modified: trunk/reactos/subsys/win32k/include/win32k.h
Modified: trunk/reactos/subsys/win32k/include/winpos.h
Modified: trunk/reactos/subsys/win32k/include/winsta.h
Modified: trunk/reactos/subsys/win32k/main/dllmain.c
Modified: trunk/reactos/subsys/win32k/ntuser/accelerator.c
Modified: trunk/reactos/subsys/win32k/ntuser/callback.c
Modified: trunk/reactos/subsys/win32k/ntuser/caret.c
Modified: trunk/reactos/subsys/win32k/ntuser/class.c
Modified: trunk/reactos/subsys/win32k/ntuser/csr.c
Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c
Modified: trunk/reactos/subsys/win32k/ntuser/desktop.c
Modified: trunk/reactos/subsys/win32k/ntuser/focus.c
Modified: trunk/reactos/subsys/win32k/ntuser/guicheck.c
Modified: trunk/reactos/subsys/win32k/ntuser/hook.c
Modified: trunk/reactos/subsys/win32k/ntuser/hotkey.c
Modified: trunk/reactos/subsys/win32k/ntuser/input.c
Modified: trunk/reactos/subsys/win32k/ntuser/keyboard.c
Modified: trunk/reactos/subsys/win32k/ntuser/menu.c
Modified: trunk/reactos/subsys/win32k/ntuser/message.c
Modified: trunk/reactos/subsys/win32k/ntuser/metric.c
Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
Modified: trunk/reactos/subsys/win32k/ntuser/msgqueue.c
Added: trunk/reactos/subsys/win32k/ntuser/ntuser.c
Modified: trunk/reactos/subsys/win32k/ntuser/painting.c
Modified: trunk/reactos/subsys/win32k/ntuser/prop.c
Modified: trunk/reactos/subsys/win32k/ntuser/scrollbar.c
Modified: trunk/reactos/subsys/win32k/ntuser/timer.c
Modified: trunk/reactos/subsys/win32k/ntuser/vis.c
Modified: trunk/reactos/subsys/win32k/ntuser/windc.c
Modified: trunk/reactos/subsys/win32k/ntuser/window.c
Modified: trunk/reactos/subsys/win32k/ntuser/winpos.c
Modified: trunk/reactos/subsys/win32k/ntuser/winsta.c
Modified: trunk/reactos/subsys/win32k/objects/color.c
Modified: trunk/reactos/subsys/win32k/objects/dc.c
Modified: trunk/reactos/subsys/win32k/win32k.xml

Modified: trunk/reactos/subsys/win32k/eng/window.c
--- trunk/reactos/subsys/win32k/eng/window.c	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/eng/window.c	2005-09-05 21:19:23 UTC (rev 17671)
@@ -207,15 +207,22 @@
   WNDGDI *WndObjInt = NULL;
   WNDOBJ *WndObjUser = NULL;
   PWINDOW_OBJECT Window;
+  BOOL calledFromUser;
+  DECLARE_RETURN(WNDOBJ*);
 
   DPRINT("EngCreateWnd: pso = 0x%x, hwnd = 0x%x, pfn = 0x%x, fl = 0x%x, pixfmt = %d\n",
          pso, hwnd, pfn, fl, iPixelFormat);
 
+  calledFromUser = UserIsEntered();
+  if (!calledFromUser){
+     UserEnterShared();
+  }
+
   /* Get window object */
   Window = IntGetWindowObject(hwnd);
   if (Window == NULL)
     {
-      return NULL;
+      RETURN( NULL);
     }
 
   /* Create WNDOBJ */
@@ -224,7 +231,7 @@
     {
       IntReleaseWindowObject(Window);
       DPRINT1("Failed to allocate memory for a WND structure!\n");
-      return NULL;
+      RETURN( NULL);
     }
 
   /* Fill the clipobj */
@@ -233,7 +240,7 @@
     {
       IntReleaseWindowObject(Window);
       EngFreeMem(WndObjInt);
-      return NULL;
+      RETURN( NULL);
     }
 
   /* Fill user object */
@@ -257,7 +264,15 @@
 
   DPRINT("EngCreateWnd: SUCCESS!\n");
   
-  return WndObjUser;
+  RETURN( WndObjUser);
+  
+CLEANUP:
+
+  if (!calledFromUser){
+    UserLeave();
+  }
+
+  END_CLEANUP;
 }
 
 
@@ -271,9 +286,15 @@
 {
   WNDGDI *WndObjInt = ObjToGDI(pwo, WND);
   PWINDOW_OBJECT Window;
+  BOOL calledFromUser; 
 
   DPRINT("EngDeleteWnd: pwo = 0x%x\n", pwo);
 
+  calledFromUser = UserIsEntered();
+  if (!calledFromUser){
+     UserEnterExclusive();
+  }
+
   /* Get window object */
   Window = IntGetWindowObject(WndObjInt->Hwnd);
   if (Window == NULL)
@@ -290,6 +311,10 @@
       IntReleaseWindowObject(Window);
     }
 
+  if (!calledFromUser){
+     UserLeave();
+  }
+
   /* Free resources */
   IntEngDeleteClipRegion(WndObjInt->ClientClipObj);
   EngFreeMem(WndObjInt);

Modified: trunk/reactos/subsys/win32k/include/callback.h
--- trunk/reactos/subsys/win32k/include/callback.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/callback.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -2,7 +2,7 @@
 #define _WIN32K_CALLBACK_H
 
 LRESULT STDCALL
-IntCallWindowProc(WNDPROC Proc,
+co_IntCallWindowProc(WNDPROC Proc,
                   BOOLEAN IsAnsiProc,
                   HWND Wnd,
                   UINT Message,
@@ -11,7 +11,7 @@
                   INT lParamBufferSize);
 
 VOID STDCALL
-IntCallSentMessageCallback(SENDASYNCPROC CompletionCallback,
+co_IntCallSentMessageCallback(SENDASYNCPROC CompletionCallback,
 			    HWND hWnd,
 			    UINT Msg,
 			    ULONG_PTR CompletionCallbackContext,
@@ -19,13 +19,13 @@
 
 
 HMENU STDCALL
-IntLoadSysMenuTemplate();
+co_IntLoadSysMenuTemplate();
 
 BOOL STDCALL
-IntLoadDefaultCursors(VOID);
+co_IntLoadDefaultCursors(VOID);
 
 LRESULT STDCALL
-IntCallHookProc(INT HookId,
+co_IntCallHookProc(INT HookId,
                 INT Code,
                 WPARAM wParam,
                 LPARAM lParam,

Modified: trunk/reactos/subsys/win32k/include/caret.h
--- trunk/reactos/subsys/win32k/include/caret.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/caret.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -4,13 +4,13 @@
 #define IDCARETTIMER (0xffff)
 
 BOOL FASTCALL
-IntDestroyCaret(PW32THREAD Win32Thread);
+co_IntDestroyCaret(PW32THREAD Win32Thread);
 
 BOOL FASTCALL
 IntSetCaretBlinkTime(UINT uMSeconds);
 
 BOOL FASTCALL
-IntSetCaretPos(int X, int Y);
+co_IntSetCaretPos(int X, int Y);
 
 BOOL FASTCALL
 IntSwitchCaretShowing(PVOID Info);
@@ -18,6 +18,11 @@
 VOID FASTCALL
 IntDrawCaret(HWND hWnd);
 
+BOOL FASTCALL co_UserShowCaret(PWINDOW_OBJECT WindowObject);
+
+BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT WindowObject);
+
+
 #endif /* _WIN32K_CARET_H */
 
 /* EOF */

Modified: trunk/reactos/subsys/win32k/include/csr.h
--- trunk/reactos/subsys/win32k/include/csr.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/csr.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -13,7 +13,7 @@
 extern PEPROCESS CsrProcess;
 
 extern NTSTATUS FASTCALL CsrInit(void);
-extern NTSTATUS FASTCALL CsrNotify(PCSR_API_MESSAGE Request);
+extern NTSTATUS FASTCALL co_CsrNotify(PCSR_API_MESSAGE Request);
 extern NTSTATUS FASTCALL CsrCloseHandle(HANDLE Handle);
 NTSTATUS
 STDCALL

Modified: trunk/reactos/subsys/win32k/include/desktop.h
--- trunk/reactos/subsys/win32k/include/desktop.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/desktop.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -67,6 +67,9 @@
 HWND FASTCALL
 IntGetDesktopWindow (VOID);
 
+PWINDOW_OBJECT FASTCALL 
+UserGetDesktopWindow(VOID);
+
 HWND FASTCALL
 IntGetCurrentThreadDesktopWindow(VOID);
 
@@ -80,7 +83,7 @@
 IntGetActiveDesktop(VOID);
 
 NTSTATUS FASTCALL
-IntShowDesktop(PDESKTOP_OBJECT Desktop, ULONG Width, ULONG Height);
+co_IntShowDesktop(PDESKTOP_OBJECT Desktop, ULONG Width, ULONG Height);
 
 NTSTATUS FASTCALL
 IntHideDesktop(PDESKTOP_OBJECT Desktop);
@@ -107,7 +110,7 @@
 BOOL IntRegisterShellHookWindow(HWND hWnd);
 BOOL IntDeRegisterShellHookWindow(HWND hWnd);
 
-VOID IntShellHookNotify(WPARAM Message, LPARAM lParam);
+VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam);
 
 #define IntIsActiveDesktop(Desktop) \
   ((Desktop)->WindowStation->ActiveDesktop == (Desktop))

Modified: trunk/reactos/subsys/win32k/include/focus.h
--- trunk/reactos/subsys/win32k/include/focus.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/focus.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -16,10 +16,10 @@
 IntGetThreadFocusWindow();
 
 BOOL FASTCALL
-IntMouseActivateWindow(PWINDOW_OBJECT Window);
+co_IntMouseActivateWindow(PWINDOW_OBJECT Window);
 BOOL FASTCALL
-IntSetForegroundWindow(PWINDOW_OBJECT Window);
+co_IntSetForegroundWindow(PWINDOW_OBJECT Window);
 HWND FASTCALL
-IntSetActiveWindow(PWINDOW_OBJECT Window);
+co_IntSetActiveWindow(PWINDOW_OBJECT Window);
 
 #endif /* _WIN32K_FOCUS_H */

Modified: trunk/reactos/subsys/win32k/include/guicheck.h
--- trunk/reactos/subsys/win32k/include/guicheck.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/guicheck.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -1,7 +1,7 @@
 #ifndef _WIN32K_GUICHECK_H
 #define _WIN32K_GUICHECK_H
 
-BOOL FASTCALL IntGraphicsCheck(BOOL Create);
+BOOL FASTCALL co_IntGraphicsCheck(BOOL Create);
 BOOL FASTCALL IntCreatePrimarySurface();
 VOID FASTCALL IntDestroyPrimarySurface();
 

Modified: trunk/reactos/subsys/win32k/include/hook.h
--- trunk/reactos/subsys/win32k/include/hook.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/hook.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -24,7 +24,7 @@
   UINT       Counts[NB_HOOKS]; /* use counts for each hook chain */
 } HOOKTABLE, *PHOOKTABLE;
 
-LRESULT FASTCALL HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam);
+LRESULT FASTCALL co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam);
 VOID FASTCALL HOOK_DestroyThreadHooks(PETHREAD Thread);
 
 #define IntLockHookTable(HookTable) \

Modified: trunk/reactos/subsys/win32k/include/msgqueue.h
--- trunk/reactos/subsys/win32k/include/msgqueue.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/msgqueue.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -1,7 +1,6 @@
 #ifndef _WIN32K_MSGQUEUE_H
 #define _WIN32K_MSGQUEUE_H
 
-#include "caret.h"
 #include "hook.h"
 
 #define MSQ_HUNG        5000
@@ -124,7 +123,7 @@
 BOOL FASTCALL
 MsqIsHung(PUSER_MESSAGE_QUEUE MessageQueue);
 NTSTATUS FASTCALL
-MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
+co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
 	       HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam,
                UINT uTimeout, BOOL Block, BOOL HookMessage,
                ULONG_PTR *uResult);
@@ -138,7 +137,7 @@
 VOID FASTCALL
 MsqPostQuitMessage(PUSER_MESSAGE_QUEUE MessageQueue, ULONG ExitCode);
 BOOLEAN STDCALL
-MsqFindMessage(IN PUSER_MESSAGE_QUEUE MessageQueue,
+co_MsqFindMessage(IN PUSER_MESSAGE_QUEUE MessageQueue,
 	       IN BOOLEAN Hardware,
 	       IN BOOLEAN Remove,
 	       IN HWND Wnd,
@@ -158,9 +157,9 @@
 NTSTATUS FASTCALL
 MsqInitializeImpl(VOID);
 BOOLEAN FASTCALL
-MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue);
+co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue);
 NTSTATUS FASTCALL
-MsqWaitForNewMessages(PUSER_MESSAGE_QUEUE MessageQueue, HWND WndFilter,
+co_MsqWaitForNewMessages(PUSER_MESSAGE_QUEUE MessageQueue, HWND WndFilter,
                       UINT MsgFilterMin, UINT MsgFilterMax);
 VOID FASTCALL
 MsqSendNotifyMessage(PUSER_MESSAGE_QUEUE MessageQueue,
@@ -170,17 +169,17 @@
 VOID FASTCALL
 MsqDecPaintCountQueue(PUSER_MESSAGE_QUEUE Queue);
 LRESULT FASTCALL
-IntSendMessage(HWND hWnd,
+co_IntSendMessage(HWND hWnd,
 		UINT Msg,
 		WPARAM wParam,
 		LPARAM lParam);
 LRESULT FASTCALL
-IntPostOrSendMessage(HWND hWnd,
+co_IntPostOrSendMessage(HWND hWnd,
 		     UINT Msg,
 		     WPARAM wParam,
 		     LPARAM lParam);
 LRESULT FASTCALL
-IntSendMessageTimeout(HWND hWnd,
+co_IntSendMessageTimeout(HWND hWnd,
                       UINT Msg,
                       WPARAM wParam,
                       LPARAM lParam,
@@ -193,7 +192,7 @@
 IntTranslateKbdMessage(LPMSG lpMsg, HKL dwhkl);
 
 VOID FASTCALL
-MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 VOID FASTCALL
 MsqPostHotKeyMessage(PVOID Thread, HWND hWnd, WPARAM wParam, LPARAM lParam);
 VOID FASTCALL

Modified: trunk/reactos/subsys/win32k/include/painting.h
--- trunk/reactos/subsys/win32k/include/painting.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/painting.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -8,12 +8,12 @@
 VOID FASTCALL
 IntValidateParent(PWINDOW_OBJECT Child, HRGN ValidRegion);
 BOOL FASTCALL
-IntRedrawWindow(PWINDOW_OBJECT Wnd, const RECT* UpdateRect, HRGN UpdateRgn, ULONG Flags);
+co_UserRedrawWindow(PWINDOW_OBJECT Wnd, const RECT* UpdateRect, HRGN UpdateRgn, ULONG Flags);
 BOOL FASTCALL
 IntGetPaintMessage(HWND hWnd, UINT MsgFilterMin, UINT MsgFilterMax, PW32THREAD Thread,
                    MSG *Message, BOOL Remove);
-BOOL STDCALL
-NtUserValidateRgn(HWND hWnd, HRGN hRgn);
+//BOOL STDCALL
+//NtUserValidateRgn(HWND hWnd, HRGN hRgn);
 
 #define IntLockWindowUpdate(Window) \
   ExAcquireFastMutex(&Window->UpdateLock)

Modified: trunk/reactos/subsys/win32k/include/scroll.h
--- trunk/reactos/subsys/win32k/include/scroll.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/scroll.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -16,7 +16,7 @@
 #define SBOBJ_TO_SBID(Obj)	((Obj) - OBJID_HSCROLL)
 #define SBID_IS_VALID(id)	(id == SB_HORZ || id == SB_VERT || id == SB_CTL)
 
-BOOL FASTCALL IntCreateScrollBars(PWINDOW_OBJECT Window);
+BOOL FASTCALL co_IntCreateScrollBars(PWINDOW_OBJECT Window);
 BOOL FASTCALL IntDestroyScrollBars(PWINDOW_OBJECT Window);
 
 #endif /* _WIN32K_SCROLL_H */

Added: trunk/reactos/subsys/win32k/include/userfuncs.h
--- trunk/reactos/subsys/win32k/include/userfuncs.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/userfuncs.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -0,0 +1,130 @@
+#ifndef _WIN32K_USERFUNCS_H
+#define _WIN32K_USERFUNCS_H
+
+/*************** WINSTA.C ***************/
+
+HWINSTA FASTCALL UserGetProcessWindowStation(VOID);
+
+/*************** INPUT.C ***************/
+
+NTSTATUS FASTCALL
+UserAcquireOrReleaseInputOwnership(BOOLEAN Release);
+
+/*************** WINPOS.C ***************/
+
+BOOL FASTCALL
+UserGetClientOrigin(HWND hWnd, LPPOINT Point);
+
+/*************** FOCUS.C ***************/
+
+HWND FASTCALL UserGetActiveWindow();
+
+HWND FASTCALL UserGetForegroundWindow(VOID);
+
+HWND FASTCALL UserSetFocus(HWND hWnd);
+
+/*************** WINDC.C ***************/
+
+INT FASTCALL
+UserReleaseDC(PWINDOW_OBJECT Window, HDC hDc);
+
+HDC FASTCALL
+UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags);
+
+DWORD FASTCALL
+UserGetWindowDC(PWINDOW_OBJECT Wnd);
+
+/*************** METRIC.C ***************/
+
+ULONG FASTCALL
+UserGetSystemMetrics(ULONG Index);
+
+/*************** KEYBOARD.C ***************/
+
+DWORD FASTCALL UserGetKeyState(DWORD key);
+
+DWORD FASTCALL UserGetKeyboardType(DWORD TypeFlag);
+
+HKL FASTCALL UserGetKeyboardLayout(DWORD dwThreadId);
+
+
+/*************** MISC.C ***************/
+
+BOOL FASTCALL
+UserSystemParametersInfo(
+  UINT uiAction,
+  UINT uiParam,
+  PVOID pvParam,
+  UINT fWinIni);
+  
+/*************** MESSAGE.C ***************/
+  
+BOOL FASTCALL
+UserPostMessage(HWND Wnd,
+        UINT Msg,
+        WPARAM wParam,
+        LPARAM lParam); 
+
+
+
+/*************** PAINTING.C ***************/
+
+BOOL FASTCALL UserValidateRgn(HWND hWnd, HRGN hRgn);
+
+
+/*************** WINDOW.C ***************/
+
+VOID FASTCALL
+co_DestroyThreadWindows(struct _ETHREAD *Thread);
+
+HWND FASTCALL UserGetShellWindow();
+
+HWND FASTCALL UserSetParent(HWND hWndChild, HWND hWndNewParent);
+
+HWND FASTCALL UserGetWindow(HWND hWnd, UINT Relationship);
+
+HDC FASTCALL
+UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags);
+
+BOOLEAN FASTCALL co_UserDestroyWindow(PWINDOW_OBJECT Wnd);
+
+LONG FASTCALL UserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi);
+
+HWND FASTCALL UserGetAncestor(HWND hWnd, UINT Type);
+
+/*************** MENU.C ***************/
+
+HMENU FASTCALL UserCreateMenu(BOOL PopupMenu);
+
+BOOL FASTCALL
+UserSetMenuDefaultItem(
+  HMENU hMenu,
+  UINT uItem,
+  UINT fByPos);
+
+BOOL FASTCALL UserDestroyMenu(HMENU hMenu);
+
+BOOL FASTCALL
+UserMenuItemInfo(
+ HMENU Menu,
+ UINT Item,
+ BOOL ByPosition,
+ PROSMENUITEMINFO UnsafeItemInfo,
+ BOOL SetOrGet);
+
+BOOL FASTCALL
+UserMenuInfo(
+ HMENU Menu,
+ PROSMENUINFO UnsafeMenuInfo,
+ BOOL SetOrGet);
+ 
+ 
+/*************** SCROLLBAR.C ***************/
+ 
+DWORD FASTCALL
+co_UserShowScrollBar(HWND hWnd, int wBar, DWORD bShow);
+
+ 
+#endif /* _WIN32K_USERFUNCS_H */
+
+/* EOF */

Modified: trunk/reactos/subsys/win32k/include/vis.h
--- trunk/reactos/subsys/win32k/include/vis.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/vis.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -18,7 +18,7 @@
    BOOLEAN ClipChildren, BOOLEAN ClipSiblings);
 
 VOID FASTCALL
-VIS_WindowLayoutChanged(PWINDOW_OBJECT Window, HRGN UncoveredRgn);
+co_VIS_WindowLayoutChanged(PWINDOW_OBJECT Window, HRGN UncoveredRgn);
 
 #endif /* ! defined(_WIN32K_VIS_H) */
 

Modified: trunk/reactos/subsys/win32k/include/win32k.h
--- trunk/reactos/subsys/win32k/include/win32k.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/win32k.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -9,11 +9,11 @@
 /* INCLUDES ******************************************************************/
 
 /* Internal Win32k Headers */
+#include <include/ntuser.h>
 #include <include/win32.h>
 #include <include/ssec.h>
 #include <include/accelerator.h>
 #include <include/callback.h>
-#include <include/caret.h>
 #include <include/class.h>
 #include <include/cleanup.h>
 #include <include/clipboard.h>
@@ -53,6 +53,8 @@
 #include <include/useratom.h>
 #include <include/vis.h>
 #include <include/window.h>
+#include <include/caret.h>
+#include <include/userfuncs.h>
 #include <include/winpos.h>
 #include <include/winsta.h>
 #include <include/mmcopy.h>

Modified: trunk/reactos/subsys/win32k/include/winpos.h
--- trunk/reactos/subsys/win32k/include/winpos.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/winpos.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -15,25 +15,25 @@
                     (INT)((y) - (WndObject)->WindowRect.top))))
 
 UINT
-FASTCALL WinPosArrangeIconicWindows(PWINDOW_OBJECT parent);
+FASTCALL co_WinPosArrangeIconicWindows(PWINDOW_OBJECT parent);
 BOOL FASTCALL
 IntGetClientOrigin(HWND hWnd, LPPOINT Point);
 LRESULT FASTCALL
-WinPosGetNonClientSize(HWND Wnd, RECT* WindowRect, RECT* ClientRect);
+co_WinPosGetNonClientSize(HWND Wnd, RECT* WindowRect, RECT* ClientRect);
 UINT FASTCALL
-WinPosGetMinMaxInfo(PWINDOW_OBJECT Window, POINT* MaxSize, POINT* MaxPos,
+co_WinPosGetMinMaxInfo(PWINDOW_OBJECT Window, POINT* MaxSize, POINT* MaxPos,
 		    POINT* MinTrack, POINT* MaxTrack);
 UINT FASTCALL
-WinPosMinMaximize(PWINDOW_OBJECT WindowObject, UINT ShowFlag, RECT* NewPos);
+co_WinPosMinMaximize(PWINDOW_OBJECT WindowObject, UINT ShowFlag, RECT* NewPos);
 BOOLEAN FASTCALL
-WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
+co_WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
 		   INT cy, UINT flags);
 BOOLEAN FASTCALL
-WinPosShowWindow(HWND Wnd, INT Cmd);
+co_WinPosShowWindow(HWND Wnd, INT Cmd);
 USHORT FASTCALL
-WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests, POINT *WinPoint,
+co_WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests, POINT *WinPoint,
 		      PWINDOW_OBJECT* Window);
-VOID FASTCALL WinPosActivateOtherWindow(PWINDOW_OBJECT Window);
+VOID FASTCALL co_WinPosActivateOtherWindow(PWINDOW_OBJECT Window);
 
 PINTERNALPOS FASTCALL WinPosInitInternalPos(PWINDOW_OBJECT WindowObject,
                                             POINT *pt, PRECT RestoreRect);

Modified: trunk/reactos/subsys/win32k/include/winsta.h
--- trunk/reactos/subsys/win32k/include/winsta.h	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/include/winsta.h	2005-09-05 21:19:23 UTC (rev 17671)
@@ -90,7 +90,7 @@
 IntGetWindowStationObject(PWINSTATION_OBJECT Object);
 
 BOOL FASTCALL
-IntInitializeDesktopGraphics(VOID);
+co_IntInitializeDesktopGraphics(VOID);
 
 VOID FASTCALL
 IntEndDesktopGraphics(VOID);

Modified: trunk/reactos/subsys/win32k/main/dllmain.c
--- trunk/reactos/subsys/win32k/main/dllmain.c	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/main/dllmain.c	2005-09-05 21:19:23 UTC (rev 17671)
@@ -42,7 +42,11 @@
                       BOOLEAN Create)
 {
     PW32PROCESS Win32Process;
+    DECLARE_RETURN(NTSTATUS);
     
+    DPRINT("Enter Win32kProcessCallback\n");
+    UserEnterExclusive();
+    
     /* Get the Win32 Process */
     Win32Process = PsGetProcessWin32Process(Process);
     
@@ -54,7 +58,7 @@
                                              sizeof(W32PROCESS),
                                              TAG('W', '3', '2', 'p'));
 
-        if (Win32Process == NULL) return STATUS_NO_MEMORY;
+        if (Win32Process == NULL) RETURN( STATUS_NO_MEMORY);
 
         RtlZeroMemory(Win32Process, sizeof(W32PROCESS));
         
@@ -101,7 +105,7 @@
 
       GDI_CleanupForProcess(Process);
 
-      IntGraphicsCheck(FALSE);
+      co_IntGraphicsCheck(FALSE);
 
       /*
        * Deregister logon application automatically
@@ -112,7 +116,12 @@
       }
     }
 
-  return STATUS_SUCCESS;
+  RETURN( STATUS_SUCCESS);
+  
+CLEANUP:
+  UserLeave();
+  DPRINT("Leave Win32kProcessCallback, ret=%i\n",_ret_);
+  END_CLEANUP;
 }
 
 
@@ -123,6 +132,10 @@
 {
     struct _EPROCESS *Process;
     PW32THREAD Win32Thread;
+    DECLARE_RETURN(NTSTATUS);
+    
+    DPRINT("Enter Win32kThreadCallback\n");
+    UserEnterExclusive();
 
     Process = Thread->ThreadsProcess;
     
@@ -137,7 +150,7 @@
                                             sizeof(W32THREAD),
                                             TAG('W', '3', '2', 't'));
 
-        if (Win32Thread == NULL) return STATUS_NO_MEMORY;
+        if (Win32Thread == NULL) RETURN( STATUS_NO_MEMORY);
 
         RtlZeroMemory(Win32Thread, sizeof(W32THREAD));
         
@@ -199,7 +212,7 @@
         }
       }
       Win32Thread->IsExiting = FALSE;
-      IntDestroyCaret(Win32Thread);
+      co_IntDestroyCaret(Win32Thread);
       Win32Thread->MessageQueue = MsqCreateMessageQueue(Thread);
       Win32Thread->KeyboardLayout = W32kGetDefaultKeyLayout();
       Win32Thread->MessagePumpHookValue = 0;
@@ -214,7 +227,7 @@
       Win32Thread->IsExiting = TRUE;
       HOOK_DestroyThreadHooks(Thread);
       UnregisterThreadHotKeys(Thread);
-      DestroyThreadWindows(Thread);
+      co_DestroyThreadWindows(Thread);
       IntBlockInput(Win32Thread, FALSE);
       MsqDestroyMessageQueue(Win32Thread->MessageQueue);
       IntCleanupThreadCallbacks(Win32Thread);
@@ -224,7 +237,12 @@
       }
     }
 
-  return STATUS_SUCCESS;
+  RETURN( STATUS_SUCCESS);
+  
+CLEANUP:
+  UserLeave();
+  DPRINT("Leave Win32kThreadCallback, ret=%i\n",_ret_);
+  END_CLEANUP;
 }
 
 /* Only used in ntuser/input.c KeyboardThreadMain(). If it's
@@ -316,6 +334,13 @@
     DPRINT1("Failed to initialize the shared section pool: Status 0x%x\n", Status);
   }
 
+  Status = InitUserImpl();
+  if (!NT_SUCCESS(Status))
+  {
+    DPRINT1("Failed to initialize user implementation!\n");
+    return STATUS_UNSUCCESSFUL;
+  }
+
   Status = InitWindowStationImpl();
   if (!NT_SUCCESS(Status))
   {

Modified: trunk/reactos/subsys/win32k/ntuser/accelerator.c
--- trunk/reactos/subsys/win32k/ntuser/accelerator.c	2005-09-05 21:17:26 UTC (rev 17670)
+++ trunk/reactos/subsys/win32k/ntuser/accelerator.c	2005-09-05 21:19:23 UTC (rev 17671)
@@ -79,15 +79,19 @@
   PACCELERATOR_TABLE AcceleratorTable;
   NTSTATUS Status;
   int Ret;
+  DECLARE_RETURN(int);
 
-  Status = IntValidateWindowStationHandle(NtUserGetProcessWindowStation(),
+  DPRINT("Enter NtUserCopyAcceleratorTable\n");
+  UserEnterShared();
+
+  Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(),
     UserMode,
 	0,
 	&WindowStation);
   if (!NT_SUCCESS(Status))
   {
     SetLastNtError(STATUS_ACCESS_DENIED);
-    return 0;
+    RETURN(0);
   }
 
   Status = ObmReferenceObjectByHandle(WindowStation->HandleTable,
@@ -98,7 +102,7 @@
   {
     SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE);
     ObDereferenceObject(WindowStation);
-    return 0;
+    RETURN(0);
   }
 
   if(Entries)
@@ -110,7 +114,7 @@
 	  ObmDereferenceObject(AcceleratorTable);
       ObDereferenceObject(WindowStation);
       SetLastNtError(Status);
-      return 0;
+      RETURN(0);
     }
   }
   else
@@ -121,7 +125,12 @@
   ObmDereferenceObject(AcceleratorTable);
   ObDereferenceObject(WindowStation);
 
-  return Ret;
+  RETURN(Ret);
+  
+CLEANUP:
+  DPRINT("Leave NtUserCopyAcceleratorTable, ret=%i\n",_ret_);
+  UserLeave();
+  END_CLEANUP;
 }
 
 HACCEL
@@ -134,11 +143,13 @@
   PACCELERATOR_TABLE AcceleratorTable;
   NTSTATUS Status;
   HACCEL Handle;
+  DECLARE_RETURN(HACCEL);
 
-  DPRINT("NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d)\n",
-    Entries, EntriesCount);
+  DPRINT("Enter NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d)\n",
+          Entries, EntriesCount);
+  UserEnterExclusive();
 
-  Status = IntValidateWindowStationHandle(NtUserGetProcessWindowStation(),
+  Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(),
     UserMode,
 	0,
 	&WindowStation);
@@ -146,7 +157,7 @@
   {
     SetLastNtError(STATUS_ACCESS_DENIED);
     DPRINT1("E1\n");
-    return FALSE;
+    RETURN( FALSE );
   }
 
   AcceleratorTable = ObmCreateObject(
@@ -159,7 +170,7 @@
     ObDereferenceObject(WindowStation);
     SetLastNtError(STATUS_NO_MEMORY);
     DPRINT1("E2\n");
-    return (HACCEL) 0;
+    RETURN( (HACCEL) 0 );
   }
 
   AcceleratorTable->Count = EntriesCount;
@@ -172,7 +183,7 @@
 		ObDereferenceObject(WindowStation);
 		SetLastNtError(Status);
 		DPRINT1("E3\n");
-		return (HACCEL) 0;
+      RETURN( (HACCEL) 0);
 	}
 
     Status = MmCopyFromCaller(AcceleratorTable->Table, Entries, EntriesCount * sizeof(ACCEL));
@@ -183,7 +194,7 @@
       ObDereferenceObject(WindowStation);
       SetLastNtError(Status);
       DPRINT1("E4\n");
-      return (HACCEL) 0;
+      RETURN((HACCEL) 0);
     }
   }
 
@@ -191,10 +202,13 @@
 
   /* FIXME: Save HandleTable in a list somewhere so we can clean it up again */
 
-  DPRINT("NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d) = %x end\n",
-    Entries, EntriesCount, Handle);
-
-  return (HACCEL) Handle;
+  RETURN((HACCEL) Handle);
+  
+CLEANUP:
+  DPRINT("Leave NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d) = %x\n",
+      Entries, EntriesCount,_ret_);
+  UserLeave();
+  END_CLEANUP;
 }
 
 BOOLEAN
@@ -205,16 +219,17 @@
   PWINSTATION_OBJECT WindowStation;
   PACCELERATOR_TABLE AcceleratorTable;
   NTSTATUS Status;
+  DECLARE_RETURN(BOOLEAN);
 
   /* FIXME: If the handle table is from a call to LoadAcceleratorTable, decrement it's
      usage count (and return TRUE).
 	 FIXME: Destroy only tables created using CreateAcceleratorTable.
    */
 
-  DPRINT("NtUserDestroyAcceleratorTable(Table %x)\n",
-    Table);
+  DPRINT("NtUserDestroyAcceleratorTable(Table %x)\n", Table);
+  UserEnterExclusive();
 
-  Status = IntValidateWindowStationHandle(NtUserGetProcessWindowStation(),
+  Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(),
     UserMode,
 	0,
 	&WindowStation);
@@ -222,7 +237,7 @@
   {
     SetLastNtError(STATUS_ACCESS_DENIED);
     DPRINT1("E1\n");
-    return FALSE;
+    RETURN( FALSE);
   }
 
   Status = ObmReferenceObjectByHandle(WindowStation->HandleTable,
@@ -234,7 +249,7 @@
     SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE);
     ObDereferenceObject(WindowStation);
     DPRINT1("E2\n");
-    return FALSE;
+    RETURN( FALSE);
   }
 
   ObmCloseHandle(WindowStation->HandleTable, Table);
@@ -249,11 +264,16 @@
   DPRINT("NtUserDestroyAcceleratorTable(Table %x)\n",
     Table);
 
-  return TRUE;
+  RETURN( TRUE);
+  
+CLEANUP:
+  DPRINT("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n", Table,_ret_);
+  UserLeave();
+  END_CLEANUP;
 }
 
 static BOOLEAN
-IntTranslateAccelerator(HWND hWnd,
+co_IntTranslateAccelerator(HWND hWnd,
   UINT message,
   WPARAM wParam,
   LPARAM lParam,
@@ -289,15 +309,15 @@
             wParam, 0xff & HIWORD(lParam));
 
 		  DPRINT("NtUserGetKeyState(VK_SHIFT) = 0x%x\n",
-            NtUserGetKeyState(VK_SHIFT));
+            UserGetKeyState(VK_SHIFT));
 		  DPRINT("NtUserGetKeyState(VK_CONTROL) = 0x%x\n",
-            NtUserGetKeyState(VK_CONTROL));
+            UserGetKeyState(VK_CONTROL));
 		  DPRINT("NtUserGetKeyState(VK_MENU) = 0x%x\n",
-            NtUserGetKeyState(VK_MENU));
+            UserGetKeyState(VK_MENU));
 
-		  if (NtUserGetKeyState(VK_SHIFT) & 0x8000) mask |= FSHIFT;
-          if (NtUserGetKeyState(VK_CONTROL) & 0x8000) mask |= FCONTROL;
-          if (NtUserGetKeyState(VK_MENU) & 0x8000) mask |= FALT;
+		  if (UserGetKeyState(VK_SHIFT) & 0x8000) mask |= FSHIFT;
+          if (UserGetKeyState(VK_CONTROL) & 0x8000) mask |= FCONTROL;
+          if (UserGetKeyState(VK_MENU) & 0x8000) mask |= FALT;
           if (mask == (fVirt & (FSHIFT | FCONTROL | FALT))) goto found;
           DPRINT("but incorrect SHIFT/CTRL/ALT-state\n");
         }
@@ -332,7 +352,7 @@
         HMENU hMenu, hSubMenu, hSysMenu;
         UINT uSysStat = (UINT)-1, uStat = (UINT)-1, nPos;
 
-        hMenu = (NtUserGetWindowLongW(hWnd, GWL_STYLE) & WS_CHILD) ? 0 : GetMenu(hWnd);
+        hMenu = (UserGetWindowLongW(hWnd, GWL_STYLE) & WS_CHILD) ? 0 : GetMenu(hWnd);
         hSysMenu = get_win_sys_menu(hWnd);
 
         /* find menu item and ask application to initialize it */
@@ -341,12 +361,12 @@
         nPos = cmd;
         if(MENU_FindItem(&hSubMenu, &nPos, MF_BYCOMMAND))
         {
-			IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hSysMenu, 0L);
+			co_IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hSysMenu, 0L);
             if(hSubMenu != hSysMenu)
             {
                 nPos = MENU_FindSubMenu(&hSysMenu, hSubMenu);
                 TRACE_(accel)("hSysMenu = %p, hSubMenu = %p, nPos = %d\n", hSysMenu, hSubMenu, nPos);
-                IntSendMessage(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE));
+                co_IntSendMessage(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE));
             }
             uSysStat = GetMenuState(GetSubMenu(hSysMenu, 0), cmd, MF_BYCOMMAND);
         }
@@ -356,12 +376,12 @@
             nPos = cmd;
             if(MENU_FindItem(&hSubMenu, &nPos, MF_BYCOMMAND))
             {
-                IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L);
+                co_IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L);
                 if(hSubMenu != hMenu)
                 {
                     nPos = MENU_FindSubMenu(&hMenu, hSubMenu);
                     TRACE_(accel)("hMenu = %p, hSubMenu = %p, nPos = %d\n", hMenu, hSubMenu, nPos);
-                    IntSendMessage(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, FALSE));
+                    co_IntSendMessage(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, FALSE));
                 }
                 uStat = GetMenuState(hMenu, cmd, MF_BYCOMMAND);
             }
@@ -402,12 +422,12 @@
   if (mesg == WM_COMMAND)
     {
       DPRINT(", sending WM_COMMAND, wParam=%0x\n", 0x10000 | cmd);
-      IntSendMessage(hWnd, mesg, 0x10000 | cmd, 0L);
+      co_IntSendMessage(hWnd, mesg, 0x10000 | cmd, 0L);
     }
   else if (mesg == WM_SYSCOMMAND)
     {
       DPRINT(", sending WM_SYSCOMMAND, wParam=%0x\n", cmd);
-      IntSendMessage(hWnd, mesg, cmd, 0x00010000L);
+      co_IntSendMessage(hWnd, mesg, cmd, 0x00010000L);
     }
   else
     {
@@ -444,23 +464,25 @@
   PACCELERATOR_TABLE AcceleratorTable;
   NTSTATUS Status;
   ULONG i;
+  DECLARE_RETURN(int);
 
   DPRINT("NtUserTranslateAccelerator(hWnd %x, Table %x, Message %p)\n",
     hWnd, Table, Message);
+  UserEnterShared();
 
   if (hWnd == NULL)
-	 return 0;
+    RETURN( 0);
 
   if (Message == NULL)
     {
 	  SetLastNtError(STATUS_INVALID_PARAMETER);
-      return 0;
+      RETURN( 0);
     }
 
   if (Table == NULL)
     {
       SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE);
-      return 0;
+      RETURN( 0);
     }
 
   if ((Message->message != WM_KEYDOWN) &&
@@ -468,17 +490,17 @@
 	  (Message->message != WM_SYSCHAR) &&
 	  (Message->message != WM_CHAR))
   {
-    return 0;
+    RETURN( 0);
   }
 
-  Status = IntValidateWindowStationHandle(NtUserGetProcessWindowStation(),
+  Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(),
     UserMode,
 	0,
 	&WindowStation);
   if (!NT_SUCCESS(Status))
[truncated at 1000 lines; 10081 more skipped]