mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 20:50:29 +00:00
[USER32][UXTHEME]
- Make API hooks type-safe. Fixes stack pointer corruption when calling ThemeGetScrollInfo. Powered by /RTC1 svn path=/trunk/; revision=73862
This commit is contained in:
parent
2475975c7d
commit
ea43e3d3dc
3 changed files with 52 additions and 40 deletions
|
@ -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;
|
PWND_CONTEXT pwndContext;
|
||||||
DWORD style;
|
DWORD style;
|
||||||
|
@ -341,7 +341,7 @@ ThemeInitApiHook(UAPIHK State, PUSERAPIHOOK puah)
|
||||||
puah->DlgProcArray.Size = UAHOWP_MAX_SIZE;
|
puah->DlgProcArray.Size = UAHOWP_MAX_SIZE;
|
||||||
|
|
||||||
puah->SetWindowRgn = ThemeSetWindowRgn;
|
puah->SetWindowRgn = ThemeSetWindowRgn;
|
||||||
puah->GetScrollInfo = (FARPROC)ThemeGetScrollInfo;
|
puah->GetScrollInfo = ThemeGetScrollInfo;
|
||||||
|
|
||||||
UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCPAINT);
|
UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCPAINT);
|
||||||
UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCACTIVATE);
|
UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCACTIVATE);
|
||||||
|
|
|
@ -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 LRESULT(CALLBACK *WNDPROC_OWP)(HWND,UINT,WPARAM,LPARAM,ULONG_PTR,PDWORD);
|
||||||
typedef int (WINAPI *SETWINDOWRGN)(HWND hWnd, HRGN hRgn, BOOL bRedraw);
|
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 DefWindowProcA;
|
||||||
WNDPROC DefWindowProcW;
|
WNDPROC DefWindowProcW;
|
||||||
UAHOWP DefWndProcArray;
|
UAHOWP DefWndProcArray;
|
||||||
FARPROC GetScrollInfo;
|
GETSCROLLINFO GetScrollInfo;
|
||||||
FARPROC SetScrollInfo;
|
SETSCROLLINFO SetScrollInfo;
|
||||||
FARPROC EnableScrollBar;
|
ENABLESCROLLBAR EnableScrollBar;
|
||||||
FARPROC AdjustWindowRectEx;
|
ADJUSTWINDOWRECTEX AdjustWindowRectEx;
|
||||||
SETWINDOWRGN SetWindowRgn;
|
SETWINDOWRGN SetWindowRgn;
|
||||||
WNDPROC_OWP PreWndProc;
|
WNDPROC_OWP PreWndProc;
|
||||||
WNDPROC_OWP PostWndProc;
|
WNDPROC_OWP PostWndProc;
|
||||||
|
@ -232,14 +244,14 @@ typedef struct tagUSERAPIHOOK
|
||||||
WNDPROC_OWP PreDefDlgProc;
|
WNDPROC_OWP PreDefDlgProc;
|
||||||
WNDPROC_OWP PostDefDlgProc;
|
WNDPROC_OWP PostDefDlgProc;
|
||||||
UAHOWP DlgProcArray;
|
UAHOWP DlgProcArray;
|
||||||
FARPROC GetSystemMetrics;
|
GETSYSTEMMETRICS GetSystemMetrics;
|
||||||
FARPROC SystemParametersInfoA;
|
SYSTEMPARAMETERSINFOA SystemParametersInfoA;
|
||||||
FARPROC SystemParametersInfoW;
|
SYSTEMPARAMETERSINFOW SystemParametersInfoW;
|
||||||
FARPROC ForceResetUserApiHook;
|
FORCERESETUSERAPIHOOK ForceResetUserApiHook;
|
||||||
FARPROC DrawFrameControl;
|
DRAWFRAMECONTROL DrawFrameControl;
|
||||||
FARPROC DrawCaption;
|
DRAWCAPTION DrawCaption;
|
||||||
FARPROC MDIRedrawFrame;
|
MDIREDRAWFRAME MDIRedrawFrame;
|
||||||
FARPROC GetRealWindowOwner;
|
GETREALWINDOWOWNER GetRealWindowOwner;
|
||||||
} USERAPIHOOK, *PUSERAPIHOOK;
|
} USERAPIHOOK, *PUSERAPIHOOK;
|
||||||
|
|
||||||
typedef enum _UAPIHK
|
typedef enum _UAPIHK
|
||||||
|
|
|
@ -28,7 +28,7 @@ INT WINAPI RealSetScrollInfo(HWND,int,LPCSCROLLINFO,BOOL);
|
||||||
BOOL WINAPI RealSystemParametersInfoA(UINT,UINT,PVOID,UINT);
|
BOOL WINAPI RealSystemParametersInfoA(UINT,UINT,PVOID,UINT);
|
||||||
BOOL WINAPI RealSystemParametersInfoW(UINT,UINT,PVOID,UINT);
|
BOOL WINAPI RealSystemParametersInfoW(UINT,UINT,PVOID,UINT);
|
||||||
DWORD WINAPI GetRealWindowOwner(HWND);
|
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->DefWindowProcW = RealDefWindowProcW;
|
||||||
puah->DefWndProcArray.MsgBitArray = NULL;
|
puah->DefWndProcArray.MsgBitArray = NULL;
|
||||||
puah->DefWndProcArray.Size = 0;
|
puah->DefWndProcArray.Size = 0;
|
||||||
puah->GetScrollInfo = (FARPROC)RealGetScrollInfo;
|
puah->GetScrollInfo = RealGetScrollInfo;
|
||||||
puah->SetScrollInfo = (FARPROC)RealSetScrollInfo;
|
puah->SetScrollInfo = RealSetScrollInfo;
|
||||||
puah->EnableScrollBar = (FARPROC)NtUserEnableScrollBar;
|
puah->EnableScrollBar = NtUserEnableScrollBar;
|
||||||
puah->AdjustWindowRectEx = (FARPROC)RealAdjustWindowRectEx;
|
puah->AdjustWindowRectEx = RealAdjustWindowRectEx;
|
||||||
puah->SetWindowRgn = NtUserSetWindowRgn;
|
puah->SetWindowRgn = NtUserSetWindowRgn;
|
||||||
puah->PreWndProc = DefaultOWP;
|
puah->PreWndProc = DefaultOWP;
|
||||||
puah->PostWndProc = DefaultOWP;
|
puah->PostWndProc = DefaultOWP;
|
||||||
|
@ -150,14 +150,14 @@ ResetUserApiHook(PUSERAPIHOOK puah)
|
||||||
puah->PostDefDlgProc = DefaultOWP;
|
puah->PostDefDlgProc = DefaultOWP;
|
||||||
puah->DlgProcArray.MsgBitArray = NULL;
|
puah->DlgProcArray.MsgBitArray = NULL;
|
||||||
puah->DlgProcArray.Size = 0;
|
puah->DlgProcArray.Size = 0;
|
||||||
puah->GetSystemMetrics = (FARPROC)RealGetSystemMetrics;
|
puah->GetSystemMetrics = RealGetSystemMetrics;
|
||||||
puah->SystemParametersInfoA = (FARPROC)RealSystemParametersInfoA;
|
puah->SystemParametersInfoA = RealSystemParametersInfoA;
|
||||||
puah->SystemParametersInfoW = (FARPROC)RealSystemParametersInfoW;
|
puah->SystemParametersInfoW = RealSystemParametersInfoW;
|
||||||
puah->ForceResetUserApiHook = (FARPROC)ForceResetUserApiHook;
|
puah->ForceResetUserApiHook = ForceResetUserApiHook;
|
||||||
puah->DrawFrameControl = (FARPROC)RealDrawFrameControl;
|
puah->DrawFrameControl = RealDrawFrameControl;
|
||||||
puah->DrawCaption = (FARPROC)RealUserDrawCaption;
|
puah->DrawCaption = RealUserDrawCaption;
|
||||||
puah->MDIRedrawFrame = (FARPROC)RealMDIRedrawFrame;
|
puah->MDIRedrawFrame = RealMDIRedrawFrame;
|
||||||
puah->GetRealWindowOwner = (FARPROC)GetRealWindowOwner;
|
puah->GetRealWindowOwner = GetRealWindowOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
|
@ -262,7 +262,7 @@ InitUserApiHook(HINSTANCE hInstance, USERAPIHOOKPROC pfn)
|
||||||
RtlEnterCriticalSection(&gcsUserApiHook);
|
RtlEnterCriticalSection(&gcsUserApiHook);
|
||||||
|
|
||||||
if (!pfn(uahLoadInit,&uah) || // Swap data, User32 to and Uxtheme from!
|
if (!pfn(uahLoadInit,&uah) || // Swap data, User32 to and Uxtheme from!
|
||||||
uah.ForceResetUserApiHook != (FARPROC)ForceResetUserApiHook ||
|
uah.ForceResetUserApiHook != ForceResetUserApiHook ||
|
||||||
uah.size <= 0 )
|
uah.size <= 0 )
|
||||||
{
|
{
|
||||||
RtlLeaveCriticalSection(&gcsUserApiHook);
|
RtlLeaveCriticalSection(&gcsUserApiHook);
|
||||||
|
@ -347,10 +347,10 @@ USERAPIHOOK guah =
|
||||||
RealDefWindowProcA,
|
RealDefWindowProcA,
|
||||||
RealDefWindowProcW,
|
RealDefWindowProcW,
|
||||||
{NULL, 0},
|
{NULL, 0},
|
||||||
(FARPROC)RealGetScrollInfo,
|
RealGetScrollInfo,
|
||||||
(FARPROC)RealSetScrollInfo,
|
RealSetScrollInfo,
|
||||||
(FARPROC)NtUserEnableScrollBar,
|
NtUserEnableScrollBar,
|
||||||
(FARPROC)RealAdjustWindowRectEx,
|
RealAdjustWindowRectEx,
|
||||||
NtUserSetWindowRgn,
|
NtUserSetWindowRgn,
|
||||||
DefaultOWP,
|
DefaultOWP,
|
||||||
DefaultOWP,
|
DefaultOWP,
|
||||||
|
@ -358,14 +358,14 @@ USERAPIHOOK guah =
|
||||||
DefaultOWP,
|
DefaultOWP,
|
||||||
DefaultOWP,
|
DefaultOWP,
|
||||||
{NULL, 0},
|
{NULL, 0},
|
||||||
(FARPROC)RealGetSystemMetrics,
|
RealGetSystemMetrics,
|
||||||
(FARPROC)RealSystemParametersInfoA,
|
RealSystemParametersInfoA,
|
||||||
(FARPROC)RealSystemParametersInfoW,
|
RealSystemParametersInfoW,
|
||||||
(FARPROC)ForceResetUserApiHook,
|
ForceResetUserApiHook,
|
||||||
(FARPROC)RealDrawFrameControl,
|
RealDrawFrameControl,
|
||||||
(FARPROC)NtUserDrawCaption,
|
NtUserDrawCaption,
|
||||||
(FARPROC)RealMDIRedrawFrame,
|
RealMDIRedrawFrame,
|
||||||
(FARPROC)GetRealWindowOwner,
|
GetRealWindowOwner,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
Loading…
Reference in a new issue