From: Thomas Faber Date: Mon, 20 Feb 2017 17:31:50 +0000 (+0000) Subject: [USER32][UXTHEME] X-Git-Tag: ReactOS-0.4.4-CLT2017~228 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=ea43e3d3dc2eaa1bcc5050355531ea8f88f4d58e [USER32][UXTHEME] - Make API hooks type-safe. Fixes stack pointer corruption when calling ThemeGetScrollInfo. Powered by /RTC1 svn path=/trunk/; revision=73862 --- diff --git a/reactos/dll/win32/uxtheme/themehooks.c b/reactos/dll/win32/uxtheme/themehooks.c index 5d937a547a8..ab10bf51c46 100644 --- a/reactos/dll/win32/uxtheme/themehooks.c +++ b/reactos/dll/win32/uxtheme/themehooks.c @@ -269,7 +269,7 @@ int WINAPI ThemeSetWindowRgn(HWND hWnd, HRGN hRgn, BOOL 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; @@ -341,7 +341,7 @@ ThemeInitApiHook(UAPIHK State, PUSERAPIHOOK puah) 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); diff --git a/reactos/sdk/include/reactos/undocuser.h b/reactos/sdk/include/reactos/undocuser.h index 76bc938de78..bf9a6c63224 100644 --- a/reactos/sdk/include/reactos/undocuser.h +++ b/reactos/sdk/include/reactos/undocuser.h @@ -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 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 { @@ -221,10 +233,10 @@ typedef struct tagUSERAPIHOOK 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; @@ -232,14 +244,14 @@ typedef struct tagUSERAPIHOOK 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 diff --git a/reactos/win32ss/user/user32/misc/usrapihk.c b/reactos/win32ss/user/user32/misc/usrapihk.c index 969543c7b7c..30cefd81f74 100644 --- a/reactos/win32ss/user/user32/misc/usrapihk.c +++ b/reactos/win32ss/user/user32/misc/usrapihk.c @@ -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); -LRESULT WINAPI RealUserDrawCaption(HWND hWnd, HDC hDC, LPCRECT lpRc, UINT uFlags); +BOOL WINAPI RealUserDrawCaption(HWND hWnd, HDC hDC, LPCRECT lpRc, UINT uFlags); /* GLOBALS *******************************************************************/ @@ -137,10 +137,10 @@ ResetUserApiHook(PUSERAPIHOOK puah) 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; @@ -150,14 +150,14 @@ ResetUserApiHook(PUSERAPIHOOK puah) 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 @@ -262,7 +262,7 @@ InitUserApiHook(HINSTANCE hInstance, USERAPIHOOKPROC pfn) 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); @@ -347,10 +347,10 @@ USERAPIHOOK guah = RealDefWindowProcA, RealDefWindowProcW, {NULL, 0}, - (FARPROC)RealGetScrollInfo, - (FARPROC)RealSetScrollInfo, - (FARPROC)NtUserEnableScrollBar, - (FARPROC)RealAdjustWindowRectEx, + RealGetScrollInfo, + RealSetScrollInfo, + NtUserEnableScrollBar, + RealAdjustWindowRectEx, NtUserSetWindowRgn, DefaultOWP, DefaultOWP, @@ -358,14 +358,14 @@ USERAPIHOOK guah = 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 *****************************************************************/