mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 04:43:51 +00:00
[win32k]
-Move checks for active hooks in co_HOOK_CallHooks svn path=/trunk/; revision=49114
This commit is contained in:
parent
71e0a64605
commit
f87e0a7d9e
4 changed files with 46 additions and 64 deletions
|
@ -117,7 +117,6 @@ IntDefWindowProc(
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
{
|
{
|
||||||
DPRINT1("hwnd %p WM_SYSCOMMAND %lx %lx\n", Wnd->head.h, wParam, lParam );
|
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);
|
lResult = co_HOOK_CallHooks(WH_CBT, HCBT_SYSCOMMAND, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -145,8 +144,6 @@ IntDefWindowProc(
|
||||||
|
|
||||||
case WM_CBT:
|
case WM_CBT:
|
||||||
{
|
{
|
||||||
if (!ISITHOOKED(WH_CBT)) break;
|
|
||||||
|
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
case HCBT_MOVESIZE:
|
case HCBT_MOVESIZE:
|
||||||
|
|
|
@ -332,6 +332,12 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
ASSERT(WH_MINHOOK <= HookId && HookId <= WH_MAXHOOK);
|
ASSERT(WH_MINHOOK <= HookId && HookId <= WH_MAXHOOK);
|
||||||
|
|
||||||
|
/* FIXME! Check pDeskInfo->fsHooks for global hooks! */
|
||||||
|
if (!ISITHOOKED(HookId))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
if (!pti)
|
if (!pti)
|
||||||
{
|
{
|
||||||
|
|
|
@ -330,20 +330,16 @@ IntCallWndProc
|
||||||
( PWND Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
( PWND Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
BOOL SameThread = FALSE;
|
BOOL SameThread = FALSE;
|
||||||
|
CWPSTRUCT CWP;
|
||||||
|
|
||||||
if (Window->head.pti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread()))
|
if (Window->head.pti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread()))
|
||||||
SameThread = TRUE;
|
SameThread = TRUE;
|
||||||
|
|
||||||
if ((!SameThread && (Window->head.pti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) ||
|
CWP.hwnd = hWnd;
|
||||||
(SameThread && ISITHOOKED(WH_CALLWNDPROC)) )
|
CWP.message = Msg;
|
||||||
{
|
CWP.wParam = wParam;
|
||||||
CWPSTRUCT CWP;
|
CWP.lParam = lParam;
|
||||||
CWP.hwnd = hWnd;
|
co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP );
|
||||||
CWP.message = Msg;
|
|
||||||
CWP.wParam = wParam;
|
|
||||||
CWP.lParam = lParam;
|
|
||||||
co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -353,21 +349,17 @@ IntCallWndProcRet
|
||||||
( PWND Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *uResult)
|
( PWND Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *uResult)
|
||||||
{
|
{
|
||||||
BOOL SameThread = FALSE;
|
BOOL SameThread = FALSE;
|
||||||
|
CWPRETSTRUCT CWPR;
|
||||||
|
|
||||||
if (Window->head.pti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread()))
|
if (Window->head.pti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread()))
|
||||||
SameThread = TRUE;
|
SameThread = TRUE;
|
||||||
|
|
||||||
if ((!SameThread && (Window->head.pti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) ||
|
CWPR.hwnd = hWnd;
|
||||||
(SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) )
|
CWPR.message = Msg;
|
||||||
{
|
CWPR.wParam = wParam;
|
||||||
CWPRETSTRUCT CWPR;
|
CWPR.lParam = lParam;
|
||||||
CWPR.hwnd = hWnd;
|
CWPR.lResult = *uResult;
|
||||||
CWPR.message = Msg;
|
co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR );
|
||||||
CWPR.wParam = wParam;
|
|
||||||
CWPR.lParam = lParam;
|
|
||||||
CWPR.lResult = *uResult;
|
|
||||||
co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT
|
LRESULT
|
||||||
|
@ -709,17 +701,14 @@ BOOL ProcessMouseMessage(MSG* Msg, USHORT HitTest, UINT RemoveMsg)
|
||||||
Msg->message,
|
Msg->message,
|
||||||
(LPARAM)&MHook ))
|
(LPARAM)&MHook ))
|
||||||
{
|
{
|
||||||
if (ISITHOOKED(WH_CBT))
|
MHook.pt = Msg->pt;
|
||||||
{
|
MHook.hwnd = Msg->hwnd;
|
||||||
MHook.pt = Msg->pt;
|
MHook.wHitTestCode = HitTest;
|
||||||
MHook.hwnd = Msg->hwnd;
|
MHook.dwExtraInfo = 0;
|
||||||
MHook.wHitTestCode = HitTest;
|
co_HOOK_CallHooks( WH_CBT,
|
||||||
MHook.dwExtraInfo = 0;
|
HCBT_CLICKSKIPPED,
|
||||||
co_HOOK_CallHooks( WH_CBT,
|
Msg->message,
|
||||||
HCBT_CLICKSKIPPED,
|
(LPARAM)&MHook);
|
||||||
Msg->message,
|
|
||||||
(LPARAM)&MHook);
|
|
||||||
}
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -743,14 +732,11 @@ BOOL ProcessKeyboardMessage(MSG* Msg, UINT RemoveMsg)
|
||||||
LOWORD(Msg->wParam),
|
LOWORD(Msg->wParam),
|
||||||
Msg->lParam))
|
Msg->lParam))
|
||||||
{
|
{
|
||||||
if (ISITHOOKED(WH_CBT))
|
/* skip this message */
|
||||||
{
|
co_HOOK_CallHooks( WH_CBT,
|
||||||
/* skip this message */
|
HCBT_KEYSKIPPED,
|
||||||
co_HOOK_CallHooks( WH_CBT,
|
LOWORD(Msg->wParam),
|
||||||
HCBT_KEYSKIPPED,
|
Msg->lParam );
|
||||||
LOWORD(Msg->wParam),
|
|
||||||
Msg->lParam );
|
|
||||||
}
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -965,7 +951,7 @@ MessageFound:
|
||||||
MsgExit:
|
MsgExit:
|
||||||
pti->rpdesk->htEx = HitTest; /* Now set the capture hit. */
|
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))
|
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))
|
if(!ProcessKeyboardMessage(&Msg->Msg, RemoveMsg))
|
||||||
{
|
{
|
||||||
|
@ -982,11 +968,8 @@ MsgExit:
|
||||||
}
|
}
|
||||||
// The WH_GETMESSAGE hook enables an application to monitor messages about to
|
// The WH_GETMESSAGE hook enables an application to monitor messages about to
|
||||||
// be returned by the GetMessage or PeekMessage function.
|
// be returned by the GetMessage or PeekMessage function.
|
||||||
if (ISITHOOKED(WH_GETMESSAGE))
|
|
||||||
{
|
co_HOOK_CallHooks( WH_GETMESSAGE, HC_ACTION, RemoveMsg & PM_REMOVE, (LPARAM)&Msg->Msg);
|
||||||
//DPRINT1("Peek WH_GETMESSAGE -> %x\n",&Msg);
|
|
||||||
co_HOOK_CallHooks( WH_GETMESSAGE, HC_ACTION, RemoveMsg & PM_REMOVE, (LPARAM)&Msg->Msg);
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2419,17 +2402,13 @@ NtUserCallMsgFilter(
|
||||||
|
|
||||||
if (BadChk) RETURN( FALSE);
|
if (BadChk) RETURN( FALSE);
|
||||||
|
|
||||||
if ( ISITHOOKED(WH_SYSMSGFILTER) &&
|
if ( co_HOOK_CallHooks( WH_SYSMSGFILTER, code, 0, (LPARAM)&Msg))
|
||||||
co_HOOK_CallHooks( WH_SYSMSGFILTER, code, 0, (LPARAM)&Msg))
|
|
||||||
{
|
{
|
||||||
Ret = TRUE;
|
Ret = TRUE;
|
||||||
}
|
}
|
||||||
else
|
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
|
_SEH2_TRY
|
||||||
|
@ -2620,12 +2599,13 @@ NtUserMessageCall(
|
||||||
case FNID_SENDMESSAGECALLBACK:
|
case FNID_SENDMESSAGECALLBACK:
|
||||||
{
|
{
|
||||||
PCALL_BACK_INFO CallBackInfo = (PCALL_BACK_INFO)ResultInfo;
|
PCALL_BACK_INFO CallBackInfo = (PCALL_BACK_INFO)ResultInfo;
|
||||||
|
ULONG_PTR uResult;
|
||||||
|
|
||||||
if (!CallBackInfo)
|
if (!CallBackInfo)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!co_IntSendMessageWithCallBack(hWnd, Msg, wParam, lParam,
|
if (!co_IntSendMessageWithCallBack(hWnd, Msg, wParam, lParam,
|
||||||
CallBackInfo->CallBack, CallBackInfo->Context, NULL))
|
CallBackInfo->CallBack, CallBackInfo->Context, &uResult))
|
||||||
{
|
{
|
||||||
DPRINT1("Callback failure!\n");
|
DPRINT1("Callback failure!\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1966,14 +1966,13 @@ co_UserCreateWindowEx(CREATESTRUCTW* Cs,
|
||||||
Cs->style = Window->style; /* HCBT_CREATEWND needs the real window style */
|
Cs->style = Window->style; /* HCBT_CREATEWND needs the real window style */
|
||||||
CbtCreate.lpcs = Cs;
|
CbtCreate.lpcs = Cs;
|
||||||
CbtCreate.hwndInsertAfter = HWND_TOP;
|
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*/
|
Cs->style = dwStyle; /* NCCREATE and WM_NCCALCSIZE need the original values*/
|
||||||
|
|
||||||
/* Send the WM_GETMINMAXINFO message*/
|
/* 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 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;
|
if (co_HOOK_CallHooks(WH_CBT, HCBT_DESTROYWND, (WPARAM) hWnd, 0)) return FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue