[USER32][UXTHEME]
authorThomas Faber <thomas.faber@reactos.org>
Mon, 20 Feb 2017 17:31:50 +0000 (17:31 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Mon, 20 Feb 2017 17:31:50 +0000 (17:31 +0000)
- Make API hooks type-safe. Fixes stack pointer corruption when calling ThemeGetScrollInfo. Powered by /RTC1

svn path=/trunk/; revision=73862

reactos/dll/win32/uxtheme/themehooks.c
reactos/sdk/include/reactos/undocuser.h
reactos/win32ss/user/user32/misc/usrapihk.c

index 5d937a5..ab10bf5 100644 (file)
@@ -269,7 +269,7 @@ int WINAPI ThemeSetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw)
     return user32ApiHook.SetWindowRgn(hWnd, hRgn, bRedraw);
 }
 
     return user32ApiHook.SetWindowRgn(hWnd, hRgn, bRedraw);
 }
 
-BOOL ThemeGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
+BOOL WINAPI ThemeGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
 {
     PWND_CONTEXT pwndContext;
     DWORD style;
 {
     PWND_CONTEXT pwndContext;
     DWORD style;
@@ -341,7 +341,7 @@ ThemeInitApiHook(UAPIHK State, PUSERAPIHOOK puah)
     puah->DlgProcArray.Size = UAHOWP_MAX_SIZE;
 
     puah->SetWindowRgn = ThemeSetWindowRgn;
     puah->DlgProcArray.Size = UAHOWP_MAX_SIZE;
 
     puah->SetWindowRgn = ThemeSetWindowRgn;
-    puah->GetScrollInfo = (FARPROC)ThemeGetScrollInfo;
+    puah->GetScrollInfo = ThemeGetScrollInfo;
 
     UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCPAINT);
     UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCACTIVATE);
 
     UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCPAINT);
     UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCACTIVATE);
index 76bc938..bf9a6c6 100644 (file)
@@ -204,6 +204,18 @@ BOOL WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT);
 
 typedef LRESULT(CALLBACK *WNDPROC_OWP)(HWND,UINT,WPARAM,LPARAM,ULONG_PTR,PDWORD);
 typedef int (WINAPI *SETWINDOWRGN)(HWND hWnd, HRGN hRgn, BOOL bRedraw);
 
 typedef LRESULT(CALLBACK *WNDPROC_OWP)(HWND,UINT,WPARAM,LPARAM,ULONG_PTR,PDWORD);
 typedef int (WINAPI *SETWINDOWRGN)(HWND hWnd, HRGN hRgn, BOOL bRedraw);
+typedef BOOL (WINAPI *GETSCROLLINFO)(HWND,INT,LPSCROLLINFO);
+typedef INT (WINAPI *SETSCROLLINFO)(HWND,int,LPCSCROLLINFO,BOOL);
+typedef BOOL (WINAPI *ENABLESCROLLBAR)(HWND,UINT,UINT);
+typedef BOOL (WINAPI *ADJUSTWINDOWRECTEX)(LPRECT,DWORD,BOOL,DWORD);
+typedef int (WINAPI *GETSYSTEMMETRICS)(int);
+typedef BOOL (WINAPI *SYSTEMPARAMETERSINFOA)(UINT,UINT,PVOID,UINT);
+typedef BOOL (WINAPI *SYSTEMPARAMETERSINFOW)(UINT,UINT,PVOID,UINT);
+typedef BOOL (__fastcall *FORCERESETUSERAPIHOOK)(HINSTANCE);
+typedef BOOL (WINAPI *DRAWFRAMECONTROL)(HDC,LPRECT,UINT,UINT);
+typedef BOOL (WINAPI *DRAWCAPTION)(HWND,HDC,LPCRECT,UINT);
+typedef BOOL (WINAPI *MDIREDRAWFRAME)(HWND,DWORD);
+typedef DWORD (WINAPI *GETREALWINDOWOWNER)(HWND);
 
 typedef struct _UAHOWP
 {
 
 typedef struct _UAHOWP
 {
@@ -221,10 +233,10 @@ typedef struct tagUSERAPIHOOK
     WNDPROC     DefWindowProcA;
     WNDPROC     DefWindowProcW;
     UAHOWP      DefWndProcArray;
     WNDPROC     DefWindowProcA;
     WNDPROC     DefWindowProcW;
     UAHOWP      DefWndProcArray;
-    FARPROC     GetScrollInfo;
-    FARPROC     SetScrollInfo;
-    FARPROC     EnableScrollBar;
-    FARPROC     AdjustWindowRectEx;
+    GETSCROLLINFO GetScrollInfo;
+    SETSCROLLINFO SetScrollInfo;
+    ENABLESCROLLBAR EnableScrollBar;
+    ADJUSTWINDOWRECTEX AdjustWindowRectEx;
     SETWINDOWRGN SetWindowRgn;
     WNDPROC_OWP PreWndProc;
     WNDPROC_OWP PostWndProc;
     SETWINDOWRGN SetWindowRgn;
     WNDPROC_OWP PreWndProc;
     WNDPROC_OWP PostWndProc;
@@ -232,14 +244,14 @@ typedef struct tagUSERAPIHOOK
     WNDPROC_OWP PreDefDlgProc;
     WNDPROC_OWP PostDefDlgProc;
     UAHOWP      DlgProcArray;
     WNDPROC_OWP PreDefDlgProc;
     WNDPROC_OWP PostDefDlgProc;
     UAHOWP      DlgProcArray;
-    FARPROC     GetSystemMetrics;
-    FARPROC     SystemParametersInfoA;
-    FARPROC     SystemParametersInfoW;
-    FARPROC     ForceResetUserApiHook;
-    FARPROC     DrawFrameControl;
-    FARPROC     DrawCaption;
-    FARPROC     MDIRedrawFrame;
-    FARPROC     GetRealWindowOwner;
+    GETSYSTEMMETRICS GetSystemMetrics;
+    SYSTEMPARAMETERSINFOA SystemParametersInfoA;
+    SYSTEMPARAMETERSINFOW SystemParametersInfoW;
+    FORCERESETUSERAPIHOOK ForceResetUserApiHook;
+    DRAWFRAMECONTROL DrawFrameControl;
+    DRAWCAPTION DrawCaption;
+    MDIREDRAWFRAME MDIRedrawFrame;
+    GETREALWINDOWOWNER GetRealWindowOwner;
 } USERAPIHOOK, *PUSERAPIHOOK;
 
 typedef enum _UAPIHK
 } USERAPIHOOK, *PUSERAPIHOOK;
 
 typedef enum _UAPIHK
index 969543c..30cefd8 100644 (file)
@@ -28,7 +28,7 @@ INT WINAPI RealSetScrollInfo(HWND,int,LPCSCROLLINFO,BOOL);
 BOOL WINAPI RealSystemParametersInfoA(UINT,UINT,PVOID,UINT);
 BOOL WINAPI RealSystemParametersInfoW(UINT,UINT,PVOID,UINT);
 DWORD WINAPI GetRealWindowOwner(HWND);
 BOOL WINAPI RealSystemParametersInfoA(UINT,UINT,PVOID,UINT);
 BOOL WINAPI RealSystemParametersInfoW(UINT,UINT,PVOID,UINT);
 DWORD WINAPI GetRealWindowOwner(HWND);
-LRESULT WINAPI RealUserDrawCaption(HWND hWnd, HDC hDC, LPCRECT lpRc, UINT uFlags);
+BOOL WINAPI RealUserDrawCaption(HWND hWnd, HDC hDC, LPCRECT lpRc, UINT uFlags);
 
 /* GLOBALS *******************************************************************/
 
 
 /* GLOBALS *******************************************************************/
 
@@ -137,10 +137,10 @@ ResetUserApiHook(PUSERAPIHOOK puah)
   puah->DefWindowProcW = RealDefWindowProcW;
   puah->DefWndProcArray.MsgBitArray = NULL;
   puah->DefWndProcArray.Size = 0;
   puah->DefWindowProcW = RealDefWindowProcW;
   puah->DefWndProcArray.MsgBitArray = NULL;
   puah->DefWndProcArray.Size = 0;
-  puah->GetScrollInfo = (FARPROC)RealGetScrollInfo;
-  puah->SetScrollInfo = (FARPROC)RealSetScrollInfo;
-  puah->EnableScrollBar = (FARPROC)NtUserEnableScrollBar;
-  puah->AdjustWindowRectEx = (FARPROC)RealAdjustWindowRectEx;
+  puah->GetScrollInfo = RealGetScrollInfo;
+  puah->SetScrollInfo = RealSetScrollInfo;
+  puah->EnableScrollBar = NtUserEnableScrollBar;
+  puah->AdjustWindowRectEx = RealAdjustWindowRectEx;
   puah->SetWindowRgn = NtUserSetWindowRgn;
   puah->PreWndProc = DefaultOWP;
   puah->PostWndProc = DefaultOWP;
   puah->SetWindowRgn = NtUserSetWindowRgn;
   puah->PreWndProc = DefaultOWP;
   puah->PostWndProc = DefaultOWP;
@@ -150,14 +150,14 @@ ResetUserApiHook(PUSERAPIHOOK puah)
   puah->PostDefDlgProc = DefaultOWP;
   puah->DlgProcArray.MsgBitArray = NULL;
   puah->DlgProcArray.Size = 0;
   puah->PostDefDlgProc = DefaultOWP;
   puah->DlgProcArray.MsgBitArray = NULL;
   puah->DlgProcArray.Size = 0;
-  puah->GetSystemMetrics = (FARPROC)RealGetSystemMetrics;
-  puah->SystemParametersInfoA = (FARPROC)RealSystemParametersInfoA;
-  puah->SystemParametersInfoW = (FARPROC)RealSystemParametersInfoW;
-  puah->ForceResetUserApiHook = (FARPROC)ForceResetUserApiHook;
-  puah->DrawFrameControl = (FARPROC)RealDrawFrameControl;
-  puah->DrawCaption = (FARPROC)RealUserDrawCaption;
-  puah->MDIRedrawFrame = (FARPROC)RealMDIRedrawFrame;
-  puah->GetRealWindowOwner = (FARPROC)GetRealWindowOwner;
+  puah->GetSystemMetrics = RealGetSystemMetrics;
+  puah->SystemParametersInfoA = RealSystemParametersInfoA;
+  puah->SystemParametersInfoW = RealSystemParametersInfoW;
+  puah->ForceResetUserApiHook = ForceResetUserApiHook;
+  puah->DrawFrameControl = RealDrawFrameControl;
+  puah->DrawCaption = RealUserDrawCaption;
+  puah->MDIRedrawFrame = RealMDIRedrawFrame;
+  puah->GetRealWindowOwner = GetRealWindowOwner;
 }
 
 BOOL
 }
 
 BOOL
@@ -262,7 +262,7 @@ InitUserApiHook(HINSTANCE hInstance, USERAPIHOOKPROC pfn)
   RtlEnterCriticalSection(&gcsUserApiHook);
 
   if (!pfn(uahLoadInit,&uah) ||  // Swap data, User32 to and Uxtheme from!
   RtlEnterCriticalSection(&gcsUserApiHook);
 
   if (!pfn(uahLoadInit,&uah) ||  // Swap data, User32 to and Uxtheme from!
-       uah.ForceResetUserApiHook != (FARPROC)ForceResetUserApiHook ||
+       uah.ForceResetUserApiHook != ForceResetUserApiHook ||
        uah.size <= 0 )
   {
      RtlLeaveCriticalSection(&gcsUserApiHook);
        uah.size <= 0 )
   {
      RtlLeaveCriticalSection(&gcsUserApiHook);
@@ -347,10 +347,10 @@ USERAPIHOOK guah =
   RealDefWindowProcA,
   RealDefWindowProcW,
   {NULL, 0},
   RealDefWindowProcA,
   RealDefWindowProcW,
   {NULL, 0},
-  (FARPROC)RealGetScrollInfo,
-  (FARPROC)RealSetScrollInfo,
-  (FARPROC)NtUserEnableScrollBar,
-  (FARPROC)RealAdjustWindowRectEx,
+  RealGetScrollInfo,
+  RealSetScrollInfo,
+  NtUserEnableScrollBar,
+  RealAdjustWindowRectEx,
   NtUserSetWindowRgn,
   DefaultOWP,
   DefaultOWP,
   NtUserSetWindowRgn,
   DefaultOWP,
   DefaultOWP,
@@ -358,14 +358,14 @@ USERAPIHOOK guah =
   DefaultOWP,
   DefaultOWP,
   {NULL, 0},
   DefaultOWP,
   DefaultOWP,
   {NULL, 0},
-  (FARPROC)RealGetSystemMetrics,
-  (FARPROC)RealSystemParametersInfoA,
-  (FARPROC)RealSystemParametersInfoW,
-  (FARPROC)ForceResetUserApiHook,
-  (FARPROC)RealDrawFrameControl,
-  (FARPROC)NtUserDrawCaption,
-  (FARPROC)RealMDIRedrawFrame,
-  (FARPROC)GetRealWindowOwner,
+  RealGetSystemMetrics,
+  RealSystemParametersInfoA,
+  RealSystemParametersInfoW,
+  ForceResetUserApiHook,
+  RealDrawFrameControl,
+  NtUserDrawCaption,
+  RealMDIRedrawFrame,
+  GetRealWindowOwner,
 };
 
 /* FUNCTIONS *****************************************************************/
 };
 
 /* FUNCTIONS *****************************************************************/