mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
- Add call window proc hooks.
svn path=/trunk/; revision=34766
This commit is contained in:
parent
fc15d06386
commit
c688d08ea3
4 changed files with 58 additions and 2 deletions
|
@ -423,6 +423,8 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
|||
PMSLLHOOKSTRUCT MouseLlData;
|
||||
PMSG Msg;
|
||||
PMOUSEHOOKSTRUCT MHook;
|
||||
PCWPSTRUCT CWP;
|
||||
PCWPRETSTRUCT CWPR;
|
||||
|
||||
Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments;
|
||||
|
||||
|
@ -507,6 +509,14 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
|||
MHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) MHook);
|
||||
break;
|
||||
case WH_CALLWNDPROC:
|
||||
CWP = (PCWPSTRUCT)((PCHAR) Common + Common->lParam);
|
||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) CWP);
|
||||
break;
|
||||
case WH_CALLWNDPROCRET:
|
||||
CWPR = (PCWPRETSTRUCT)((PCHAR) Common + Common->lParam);
|
||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) CWPR);
|
||||
break;
|
||||
case WH_MSGFILTER:
|
||||
case WH_SYSMSGFILTER:
|
||||
case WH_GETMESSAGE:
|
||||
|
|
|
@ -1170,6 +1170,12 @@ extern "C" {
|
|||
#define SMTO_ABORTIFHUNG 2
|
||||
#define SMTO_BLOCK 1
|
||||
#define SMTO_NORMAL 0
|
||||
#if (WINVER >= 0x0500)
|
||||
#define SMTO_NOTIMEOUTIFNOTHUNG 8
|
||||
#endif
|
||||
#if (WINVER >= 0x0600)
|
||||
#define SMTO_ERRORONEXIT 32
|
||||
#endif
|
||||
#define SIF_ALL 23
|
||||
#define SIF_PAGE 2
|
||||
#define SIF_POS 4
|
||||
|
|
|
@ -382,6 +382,12 @@ co_IntCallHookProc(INT HookId,
|
|||
case WH_MOUSE:
|
||||
ArgumentLength += sizeof(MOUSEHOOKSTRUCT);
|
||||
break;
|
||||
case WH_CALLWNDPROC:
|
||||
ArgumentLength += sizeof(CWPSTRUCT);
|
||||
break;
|
||||
case WH_CALLWNDPROCRET:
|
||||
ArgumentLength += sizeof(CWPRETSTRUCT);
|
||||
break;
|
||||
case WH_MSGFILTER:
|
||||
case WH_SYSMSGFILTER:
|
||||
case WH_GETMESSAGE:
|
||||
|
@ -452,6 +458,14 @@ co_IntCallHookProc(INT HookId,
|
|||
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(MOUSEHOOKSTRUCT));
|
||||
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
|
||||
break;
|
||||
case WH_CALLWNDPROC:
|
||||
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(CWPSTRUCT));
|
||||
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
|
||||
break;
|
||||
case WH_CALLWNDPROCRET:
|
||||
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(CWPRETSTRUCT));
|
||||
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
|
||||
break;
|
||||
case WH_MSGFILTER:
|
||||
case WH_SYSMSGFILTER:
|
||||
case WH_GETMESSAGE:
|
||||
|
|
|
@ -1388,6 +1388,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
|||
PW32THREAD Win32Thread;
|
||||
DECLARE_RETURN(LRESULT);
|
||||
USER_REFERENCE_ENTRY Ref;
|
||||
BOOL SameThread = FALSE;
|
||||
|
||||
/* FIXME: Call hooks. */
|
||||
if (!(Window = UserGetWindowObject(hWnd)))
|
||||
|
@ -1398,7 +1399,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
|||
UserRefObjectCo(Window, &Ref);
|
||||
|
||||
Win32Thread = PsGetCurrentThreadWin32Thread();
|
||||
|
||||
|
||||
if (NULL != Win32Thread &&
|
||||
Window->MessageQueue == Win32Thread->MessageQueue)
|
||||
{
|
||||
|
@ -1425,6 +1426,20 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
|||
RETURN( FALSE);
|
||||
}
|
||||
|
||||
if (Window->ti == Win32Thread->ThreadInfo)
|
||||
SameThread = TRUE;
|
||||
|
||||
if ((!SameThread && (Window->ti->Hooks & 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 );
|
||||
}
|
||||
|
||||
Result = (ULONG_PTR)co_IntCallWindowProc(Window->Wnd->WndProc, !Window->Wnd->Unicode, hWnd, Msg, wParam,
|
||||
lParamPacked,lParamBufferSize);
|
||||
|
||||
|
@ -1432,6 +1447,18 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
|||
{
|
||||
*uResult = Result;
|
||||
}
|
||||
|
||||
if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) ||
|
||||
(SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) )
|
||||
{
|
||||
CWPRETSTRUCT CWPR;
|
||||
CWPR.hwnd = hWnd;
|
||||
CWPR.message = Msg;
|
||||
CWPR.wParam = wParam;
|
||||
CWPR.lParam = lParam;
|
||||
CWPR.lResult = Result;
|
||||
co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR );
|
||||
}
|
||||
|
||||
if (! NT_SUCCESS(UnpackParam(lParamPacked, Msg, wParam, lParam)))
|
||||
{
|
||||
|
@ -1957,7 +1984,6 @@ NtUserMessageCall(
|
|||
}
|
||||
else if (parm->flags & BSF_NOTIMEOUTIFNOTHUNG)
|
||||
{
|
||||
#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
|
||||
co_IntSendMessageTimeout( HWND_BROADCAST,
|
||||
Msg,
|
||||
wParam,
|
||||
|
|
Loading…
Reference in a new issue