[WIN32K, USER32]
[reactos.git] / reactos / subsystems / win32 / win32k / ntuser / simplecall.c
index bab3915..bf26bc2 100644 (file)
@@ -8,7 +8,7 @@
  *       2008/03/20  Split from misc.c
  */
 
-#include <w32k.h>
+#include <win32k.h>
 
 #define NDEBUG
 #include <debug.h>
@@ -110,14 +110,6 @@ NtUserCallNoParam(DWORD Routine)
          Result = (DWORD_PTR)MsqGetMessageExtraInfo();
          break;
 
-      case NOPARAM_ROUTINE_ANYPOPUP:
-         Result = (DWORD_PTR)IntAnyPopup();
-         break;
-
-      case NOPARAM_ROUTINE_CSRSS_INITIALIZED:
-         Result = (DWORD_PTR)CsrInit();
-         break;
-
       case NOPARAM_ROUTINE_MSQCLEARWAKEMASK:
          RETURN( (DWORD_PTR)IntMsqClearWakeMask());
 
@@ -200,57 +192,40 @@ NtUserCallOneParam(
       case ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO:
          RETURN( (DWORD_PTR)MsqSetMessageExtraInfo((LPARAM)Param));
 
-      case ONEPARAM_ROUTINE_CREATECURICONHANDLE:
+      case ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT:
          {
             PCURICON_OBJECT CurIcon;
-            PWINSTATION_OBJECT WinSta;
+                       DWORD_PTR Result ;
 
-            WinSta = IntGetWinStaObj();
-            if(WinSta == NULL)
-            {
-               RETURN(0);
-            }
-
-            if (!(CurIcon = IntCreateCurIconHandle(WinSta)))
+            if (!(CurIcon = IntCreateCurIconHandle()))
             {
                SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
-               ObDereferenceObject(WinSta);
                RETURN(0);
             }
 
-            ObDereferenceObject(WinSta);
-            RETURN((DWORD_PTR)CurIcon->Self);
+            Result = (DWORD_PTR)CurIcon->Self;
+                       UserDereferenceObject(CurIcon);
+                       RETURN(Result);
          }
 
       case ONEPARAM_ROUTINE_GETCURSORPOSITION:
          {
-            PWINSTATION_OBJECT WinSta;
-            NTSTATUS Status;
-            POINT Pos;
-
-            if(!Param)
-               RETURN( (DWORD_PTR)FALSE);
-            Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
-                                                    KernelMode,
-                                                    0,
-                                                    &WinSta);
-            if (!NT_SUCCESS(Status))
-               RETURN( (DWORD_PTR)FALSE);
-
-            /* FIXME - check if process has WINSTA_READATTRIBUTES */
-            IntGetCursorLocation(WinSta, &Pos);
-
-            Status = MmCopyToCaller((PPOINT)Param, &Pos, sizeof(POINT));
-            if(!NT_SUCCESS(Status))
+             BOOL ret = TRUE;
+
+
+            _SEH2_TRY
             {
-               ObDereferenceObject(WinSta);
-               SetLastNtError(Status);
-               RETURN( FALSE);
+               ProbeForWrite((POINT*)Param,sizeof(POINT),1);
+               RtlCopyMemory((POINT*)Param,&gpsi->ptCursor,sizeof(POINT));
             }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                SetLastNtError(_SEH2_GetExceptionCode());
+                ret = FALSE;
+            }
+            _SEH2_END;
 
-            ObDereferenceObject(WinSta);
-
-            RETURN( (DWORD_PTR)TRUE);
+            RETURN (ret);
          }
 
       case ONEPARAM_ROUTINE_ISWINDOWINDESTROY:
@@ -329,7 +304,7 @@ NtUserCallOneParam(
           BOOL Ret = TRUE;
           PPOINTL pptl;
           PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
-          if (pti->hDesktop != InputDesktopHandle) RETURN(FALSE);
+          if (pti->hdesk != InputDesktopHandle) RETURN(FALSE);
           _SEH2_TRY
           {
              pptl = (PPOINTL)Param;
@@ -458,6 +433,10 @@ NtUserCallTwoParam(
 
       case TWOPARAM_ROUTINE_REGISTERLOGONPROC:
          RETURN( (DWORD_PTR)co_IntRegisterLogonProcess((HANDLE)Param1, (BOOL)Param2));
+
+      case TWOPARAM_ROUTINE_SETCURSORPOS:
+         RETURN( (DWORD_PTR)UserSetCursorPos((int)Param1, (int)Param2, FALSE));
+
    }
    DPRINT1("Calling invalid routine number 0x%x in NtUserCallTwoParam(), Param1=0x%x Parm2=0x%x\n",
            Routine, Param1, Param2);
@@ -506,28 +485,17 @@ NtUserCallHwndLock(
 
       case HWNDLOCK_ROUTINE_DRAWMENUBAR:
          {
-            PMENU_OBJECT Menu;
             DPRINT("HWNDLOCK_ROUTINE_DRAWMENUBAR\n");
-            Ret = FALSE;
-            if (!((Wnd->style & (WS_CHILD | WS_POPUP)) != WS_CHILD))
-               break;
-
-            if(!(Menu = UserGetMenuObject((HMENU)(DWORD_PTR) Wnd->IDMenu)))
-               break;
-
-            Menu->MenuInfo.WndOwner = hWnd;
-            Menu->MenuInfo.Height = 0;
-
-            co_WinPosSetWindowPos( Window,
-                                   HWND_DESKTOP,
-                                   0,0,0,0,
-                                   SWP_NOSIZE|
-                                   SWP_NOMOVE|
-                                   SWP_NOZORDER|
-                                   SWP_NOACTIVATE|
-                                   SWP_FRAMECHANGED );
-
             Ret = TRUE;
+            if ((Wnd->style & (WS_CHILD | WS_POPUP)) != WS_CHILD)
+               co_WinPosSetWindowPos( Window,
+                                      HWND_DESKTOP,
+                                      0,0,0,0,
+                                      SWP_NOSIZE|
+                                      SWP_NOMOVE|
+                                      SWP_NOZORDER|
+                                      SWP_NOACTIVATE|
+                                      SWP_FRAMECHANGED );
             break;
          }
 
@@ -552,7 +520,7 @@ NtUserCallHwndLock(
                                 SWP_NOZORDER|
                                 SWP_NOACTIVATE|
                                 SWP_FRAMECHANGED );
-         if (!IntGetOwner(Window) && !IntGetParent(Window))
+         if (!Window->spwndOwner && !IntGetParent(Window))
          {
             co_IntShellHookNotify(HSHELL_REDRAW, (LPARAM) hWnd);
          }
@@ -728,9 +696,39 @@ NtUserCallHwndParamLock(
    DWORD Param,
    DWORD Routine)
 {
-   UNIMPLEMENTED;
+   DWORD Ret = 0;
+   PWINDOW_OBJECT Window;
+   PWND Wnd;
+   USER_REFERENCE_ENTRY Ref;
+   DECLARE_RETURN(DWORD);
+
+   DPRINT1("Enter NtUserCallHwndParamLock\n");
+   UserEnterExclusive();
+
+   if (!(Window = UserGetWindowObject(hWnd)) || !Window->Wnd)
+   {
+      RETURN( FALSE);
+   }
+   UserRefObjectCo(Window, &Ref);
+
+   Wnd = Window->Wnd;
+
+   switch (Routine)
+   {
+      case TWOPARAM_ROUTINE_VALIDATERGN:
+         Ret = (DWORD)co_UserRedrawWindow( Window, NULL, (HRGN)Param, RDW_VALIDATE);
+         break;
+   }
+
+   UserDerefObjectCo(Window);
+
+   RETURN( Ret);
+
+CLEANUP:
+   DPRINT1("Leave NtUserCallHwndParamLock, ret=%i\n",_ret_);
+   UserLeave();
+   END_CLEANUP;
 
-   return 0;
 }
 
 /* EOF */