[ros-diffs] [jimtabor] 33922: Retool SetSysColors and use SEH.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Tue Jun 10 23:57:16 CEST 2008


Author: jimtabor
Date: Tue Jun 10 16:57:16 2008
New Revision: 33922

URL: http://svn.reactos.org/svn/reactos?rev=33922&view=rev
Log:
Retool SetSysColors and use SEH.

Modified:
    trunk/reactos/dll/win32/user32/include/user32p.h
    trunk/reactos/dll/win32/user32/windows/defwnd.c
    trunk/reactos/include/reactos/win32k/ntuser.h
    trunk/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
    trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c

Modified: trunk/reactos/dll/win32/user32/include/user32p.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/include/user32p.h?rev=33922&r1=33921&r2=33922&view=diff
==============================================================================
--- trunk/reactos/dll/win32/user32/include/user32p.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/include/user32p.h [iso-8859-1] Tue Jun 10 16:57:16 2008
@@ -69,9 +69,6 @@
 #define NtUserGetSysColors(ColorRefs, count) \
   (BOOL)NtUserCallTwoParam((DWORD)(ColorRefs), (DWORD)(count), TWOPARAM_ROUTINE_GETSYSCOLORS)
 
-#define NtUserSetSysColors(ColorRefs, count) \
-  (BOOL)NtUserCallTwoParam((DWORD)(ColorRefs), (DWORD)(count), TWOPARAM_ROUTINE_SETSYSCOLORS)
-
 #define NtUserSetCaretBlinkTime(uMSeconds) \
   (BOOL)NtUserCallOneParam((DWORD)uMSeconds, ONEPARAM_ROUTINE_SETCARETBLINKTIME)
 

Modified: trunk/reactos/dll/win32/user32/windows/defwnd.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/defwnd.c?rev=33922&r1=33921&r2=33922&view=diff
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/defwnd.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/defwnd.c [iso-8859-1] Tue Jun 10 16:57:16 2008
@@ -110,27 +110,7 @@
   CONST INT *lpaElements,
   CONST COLORREF *lpaRgbValues)
 {
-  BOOL Ret;
-  struct
-  {
-    INT *Elements;
-    COLORREF *Colors;
-  } ChangeSysColors;
-
-  ChangeSysColors.Elements = (INT*)lpaElements;
-  ChangeSysColors.Colors = (COLORREF*)lpaRgbValues;
-
-  if(cElements > 0)
-  {
-    Ret = NtUserSetSysColors(&ChangeSysColors, cElements);
-  }
-  else
-  {
-    SetLastError(ERROR_INVALID_PARAMETER);
-    Ret = FALSE;
-  }
-
-  return Ret;
+  return NtUserSetSysColors(cElements, lpaElements, lpaRgbValues, 0);
 }
 
 void

Modified: trunk/reactos/include/reactos/win32k/ntuser.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/win32k/ntuser.h?rev=33922&r1=33921&r2=33922&view=diff
==============================================================================
--- trunk/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] (original)
+++ trunk/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] Tue Jun 10 16:57:16 2008
@@ -2230,12 +2230,12 @@
   HWND hwndShell,
   HWND hwndShellListView);
 
-DWORD
+BOOL
 NTAPI
 NtUserSetSysColors(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
+  int cElements,
+  IN INT *lpaElements,
+  IN COLORREF *lpaRgbValues,
   DWORD Unknown3);
 
 BOOL
@@ -2639,7 +2639,6 @@
 #define TWOPARAM_ROUTINE_GETSYSCOLORBRUSHES 0xfffd0063
 #define TWOPARAM_ROUTINE_GETSYSCOLORPENS    0xfffd0064
 #define TWOPARAM_ROUTINE_GETSYSCOLORS       0xfffd0065
-#define TWOPARAM_ROUTINE_SETSYSCOLORS       0xfffd0066 // use NtUserSetSysColors
 #define TWOPARAM_ROUTINE_ROS_SHOWWINDOW     0x1000
 #define TWOPARAM_ROUTINE_ROS_ISACTIVEICON   0x1001
 #define TWOPARAM_ROUTINE_ROS_NCDESTROY      0x1002

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/ntstubs.c?rev=33922&r1=33921&r2=33922&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/ntstubs.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/ntstubs.c [iso-8859-1] Tue Jun 10 16:57:16 2008
@@ -521,17 +521,39 @@
    return 0;
 }
 
-DWORD
+BOOL
 STDCALL
 NtUserSetSysColors(
-   DWORD Unknown0,
-   DWORD Unknown1,
-   DWORD Unknown2,
+   int cElements,
+   IN INT *lpaElements,
+   IN COLORREF *lpaRgbValues,
    DWORD Unknown3)
 {
-   UNIMPLEMENTED
-
-   return 0;
+  DWORD Ret = FALSE;
+  NTSTATUS Status = STATUS_SUCCESS;
+  UserEnterExclusive();
+  _SEH_TRY
+  {
+     ProbeForRead(lpaElements,
+                   sizeof(INT),
+                   1);
+     ProbeForRead(lpaRgbValues,
+                   sizeof(INT),
+                   1);
+     Ret = IntSetSysColors(cElements, lpaElements, lpaRgbValues);
+  }
+  _SEH_HANDLE
+  {
+      Status = _SEH_GetExceptionCode();
+  }
+  _SEH_END;
+  if (!NT_SUCCESS(Status))
+  {
+      SetLastNtError(Status);
+      Ret = FALSE;
+  }
+  UserLeave();
+  return Ret;
 }
 
 DWORD

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c?rev=33922&r1=33921&r2=33922&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c [iso-8859-1] Tue Jun 10 16:57:16 2008
@@ -611,53 +611,6 @@
 
       case TWOPARAM_ROUTINE_REGISTERLOGONPROC:
          RETURN( (DWORD)co_IntRegisterLogonProcess((HANDLE)Param1, (BOOL)Param2));
-
-      case TWOPARAM_ROUTINE_SETSYSCOLORS:
-         {
-            DWORD Ret = 0;
-            PVOID Buffer;
-            struct
-            {
-               INT *Elements;
-               COLORREF *Colors;
-            }
-            ChangeSysColors;
-
-            /* FIXME - we should make use of SEH here... */
-
-            Status = MmCopyFromCaller(&ChangeSysColors, (PVOID)Param1, sizeof(ChangeSysColors));
-            if(!NT_SUCCESS(Status))
-            {
-               SetLastNtError(Status);
-               RETURN( 0);
-            }
-
-            Buffer = ExAllocatePool(PagedPool, (Param2 * sizeof(INT)) + (Param2 * sizeof(COLORREF)));
-            if(Buffer != NULL)
-            {
-               INT *Elements = (INT*)Buffer;
-               COLORREF *Colors = (COLORREF*)Buffer + Param2;
-
-               Status = MmCopyFromCaller(Elements, ChangeSysColors.Elements, Param2 * sizeof(INT));
-               if(NT_SUCCESS(Status))
-               {
-                  Status = MmCopyFromCaller(Colors, ChangeSysColors.Colors, Param2 * sizeof(COLORREF));
-                  if(NT_SUCCESS(Status))
-                  {
-                     Ret = (DWORD)IntSetSysColors((UINT)Param2, Elements, Colors);
-                  }
-                  else
-                     SetLastNtError(Status);
-               }
-               else
-                  SetLastNtError(Status);
-
-               ExFreePool(Buffer);
-            }
-
-
-            RETURN( Ret);
-         }
 
       case TWOPARAM_ROUTINE_GETSYSCOLORBRUSHES:
       case TWOPARAM_ROUTINE_GETSYSCOLORPENS:



More information about the Ros-diffs mailing list