From f87e0a7d9e6c5f865a53393a4535118140cd3cbb Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 11 Oct 2010 10:58:33 +0000 Subject: [PATCH] [win32k] -Move checks for active hooks in co_HOOK_CallHooks svn path=/trunk/; revision=49114 --- .../subsystems/win32/win32k/ntuser/defwnd.c | 3 - reactos/subsystems/win32/win32k/ntuser/hook.c | 6 ++ .../subsystems/win32/win32k/ntuser/message.c | 88 +++++++------------ .../subsystems/win32/win32k/ntuser/window.c | 13 ++- 4 files changed, 46 insertions(+), 64 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/defwnd.c b/reactos/subsystems/win32/win32k/ntuser/defwnd.c index e888d4a493d..88d82802f8f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/defwnd.c +++ b/reactos/subsystems/win32/win32k/ntuser/defwnd.c @@ -117,7 +117,6 @@ IntDefWindowProc( case WM_SYSCOMMAND: { DPRINT1("hwnd %p WM_SYSCOMMAND %lx %lx\n", Wnd->head.h, wParam, lParam ); - if (!ISITHOOKED(WH_CBT)) break; lResult = co_HOOK_CallHooks(WH_CBT, HCBT_SYSCOMMAND, wParam, lParam); break; } @@ -145,8 +144,6 @@ IntDefWindowProc( case WM_CBT: { - if (!ISITHOOKED(WH_CBT)) break; - switch (wParam) { case HCBT_MOVESIZE: diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index a71ea9bebf2..625bd3abbcb 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -332,6 +332,12 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam) ASSERT(WH_MINHOOK <= HookId && HookId <= WH_MAXHOOK); + /* FIXME! Check pDeskInfo->fsHooks for global hooks! */ + if (!ISITHOOKED(HookId)) + { + return 0; + } + pti = PsGetCurrentThreadWin32Thread(); if (!pti) { diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 78378b29066..ea356a5e251 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -330,20 +330,16 @@ IntCallWndProc ( PWND Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { BOOL SameThread = FALSE; + CWPSTRUCT CWP; if (Window->head.pti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread())) SameThread = TRUE; - if ((!SameThread && (Window->head.pti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROC)) ) - { - CWPSTRUCT CWP; - CWP.hwnd = hWnd; - CWP.message = Msg; - CWP.wParam = wParam; - CWP.lParam = lParam; - co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP ); - } + CWP.hwnd = hWnd; + CWP.message = Msg; + CWP.wParam = wParam; + CWP.lParam = lParam; + co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP ); } static @@ -353,21 +349,17 @@ IntCallWndProcRet ( PWND Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *uResult) { BOOL SameThread = FALSE; + CWPRETSTRUCT CWPR; if (Window->head.pti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread())) SameThread = TRUE; - if ((!SameThread && (Window->head.pti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) - { - CWPRETSTRUCT CWPR; - CWPR.hwnd = hWnd; - CWPR.message = Msg; - CWPR.wParam = wParam; - CWPR.lParam = lParam; - CWPR.lResult = *uResult; - co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); - } + CWPR.hwnd = hWnd; + CWPR.message = Msg; + CWPR.wParam = wParam; + CWPR.lParam = lParam; + CWPR.lResult = *uResult; + co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); } LRESULT @@ -709,17 +701,14 @@ BOOL ProcessMouseMessage(MSG* Msg, USHORT HitTest, UINT RemoveMsg) Msg->message, (LPARAM)&MHook )) { - if (ISITHOOKED(WH_CBT)) - { - MHook.pt = Msg->pt; - MHook.hwnd = Msg->hwnd; - MHook.wHitTestCode = HitTest; - MHook.dwExtraInfo = 0; - co_HOOK_CallHooks( WH_CBT, - HCBT_CLICKSKIPPED, - Msg->message, - (LPARAM)&MHook); - } + MHook.pt = Msg->pt; + MHook.hwnd = Msg->hwnd; + MHook.wHitTestCode = HitTest; + MHook.dwExtraInfo = 0; + co_HOOK_CallHooks( WH_CBT, + HCBT_CLICKSKIPPED, + Msg->message, + (LPARAM)&MHook); return FALSE; } @@ -743,14 +732,11 @@ BOOL ProcessKeyboardMessage(MSG* Msg, UINT RemoveMsg) LOWORD(Msg->wParam), Msg->lParam)) { - if (ISITHOOKED(WH_CBT)) - { - /* skip this message */ - co_HOOK_CallHooks( WH_CBT, - HCBT_KEYSKIPPED, - LOWORD(Msg->wParam), - Msg->lParam ); - } + /* skip this message */ + co_HOOK_CallHooks( WH_CBT, + HCBT_KEYSKIPPED, + LOWORD(Msg->wParam), + Msg->lParam ); return FALSE; } return TRUE; @@ -965,7 +951,7 @@ MessageFound: MsgExit: pti->rpdesk->htEx = HitTest; /* Now set the capture hit. */ - if ( ISITHOOKED(WH_MOUSE) && IS_MOUSE_MESSAGE(Msg->Msg.message)) + if ( IS_MOUSE_MESSAGE(Msg->Msg.message)) { if (!ProcessMouseMessage(&Msg->Msg, HitTest, RemoveMsg)) { @@ -973,7 +959,7 @@ MsgExit: } } - if ( ISITHOOKED(WH_KEYBOARD) && IS_KBD_MESSAGE(Msg->Msg.message)) + if ( IS_KBD_MESSAGE(Msg->Msg.message)) { if(!ProcessKeyboardMessage(&Msg->Msg, RemoveMsg)) { @@ -982,11 +968,8 @@ MsgExit: } // The WH_GETMESSAGE hook enables an application to monitor messages about to // be returned by the GetMessage or PeekMessage function. - if (ISITHOOKED(WH_GETMESSAGE)) - { - //DPRINT1("Peek WH_GETMESSAGE -> %x\n",&Msg); - co_HOOK_CallHooks( WH_GETMESSAGE, HC_ACTION, RemoveMsg & PM_REMOVE, (LPARAM)&Msg->Msg); - } + + co_HOOK_CallHooks( WH_GETMESSAGE, HC_ACTION, RemoveMsg & PM_REMOVE, (LPARAM)&Msg->Msg); return TRUE; } @@ -2419,17 +2402,13 @@ NtUserCallMsgFilter( if (BadChk) RETURN( FALSE); - if ( ISITHOOKED(WH_SYSMSGFILTER) && - co_HOOK_CallHooks( WH_SYSMSGFILTER, code, 0, (LPARAM)&Msg)) + if ( co_HOOK_CallHooks( WH_SYSMSGFILTER, code, 0, (LPARAM)&Msg)) { Ret = TRUE; } else { - if ( ISITHOOKED(WH_MSGFILTER) ) - { - Ret = co_HOOK_CallHooks( WH_MSGFILTER, code, 0, (LPARAM)&Msg); - } + Ret = co_HOOK_CallHooks( WH_MSGFILTER, code, 0, (LPARAM)&Msg); } _SEH2_TRY @@ -2620,12 +2599,13 @@ NtUserMessageCall( case FNID_SENDMESSAGECALLBACK: { PCALL_BACK_INFO CallBackInfo = (PCALL_BACK_INFO)ResultInfo; + ULONG_PTR uResult; if (!CallBackInfo) break; if (!co_IntSendMessageWithCallBack(hWnd, Msg, wParam, lParam, - CallBackInfo->CallBack, CallBackInfo->Context, NULL)) + CallBackInfo->CallBack, CallBackInfo->Context, &uResult)) { DPRINT1("Callback failure!\n"); } diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 0812cf8c2c4..0b270cf8c0b 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -1966,14 +1966,13 @@ co_UserCreateWindowEx(CREATESTRUCTW* Cs, Cs->style = Window->style; /* HCBT_CREATEWND needs the real window style */ CbtCreate.lpcs = Cs; CbtCreate.hwndInsertAfter = HWND_TOP; - if (ISITHOOKED(WH_CBT)) + + if (co_HOOK_CallHooks(WH_CBT, HCBT_CREATEWND, (WPARAM) hWnd, (LPARAM) &CbtCreate)) { - if (co_HOOK_CallHooks(WH_CBT, HCBT_CREATEWND, (WPARAM) hWnd, (LPARAM) &CbtCreate)) - { - DPRINT1("HCBT_CREATEWND hook failed!\n"); - RETURN( (PWND) NULL); - } + DPRINT1("HCBT_CREATEWND hook failed!\n"); + RETURN( (PWND) NULL); } + Cs->style = dwStyle; /* NCCREATE and WM_NCCALCSIZE need the original values*/ /* Send the WM_GETMINMAXINFO message*/ @@ -2342,7 +2341,7 @@ BOOLEAN FASTCALL co_UserDestroyWindow(PWND Window) } /* If window was created successfully and it is hooked */ - if ((Window->state2 & WNDS2_WMCREATEMSGPROCESSED) && (ISITHOOKED(WH_CBT))) + if ((Window->state2 & WNDS2_WMCREATEMSGPROCESSED)) { if (co_HOOK_CallHooks(WH_CBT, HCBT_DESTROYWND, (WPARAM) hWnd, 0)) return FALSE; }