mirror of
https://github.com/reactos/reactos.git
synced 2025-04-22 05:00:27 +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;
|
PMSLLHOOKSTRUCT MouseLlData;
|
||||||
PMSG Msg;
|
PMSG Msg;
|
||||||
PMOUSEHOOKSTRUCT MHook;
|
PMOUSEHOOKSTRUCT MHook;
|
||||||
|
PCWPSTRUCT CWP;
|
||||||
|
PCWPRETSTRUCT CWPR;
|
||||||
|
|
||||||
Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments;
|
Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments;
|
||||||
|
|
||||||
|
@ -507,6 +509,14 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
MHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
MHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
||||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) MHook);
|
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) MHook);
|
||||||
break;
|
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_MSGFILTER:
|
||||||
case WH_SYSMSGFILTER:
|
case WH_SYSMSGFILTER:
|
||||||
case WH_GETMESSAGE:
|
case WH_GETMESSAGE:
|
||||||
|
|
|
@ -1170,6 +1170,12 @@ extern "C" {
|
||||||
#define SMTO_ABORTIFHUNG 2
|
#define SMTO_ABORTIFHUNG 2
|
||||||
#define SMTO_BLOCK 1
|
#define SMTO_BLOCK 1
|
||||||
#define SMTO_NORMAL 0
|
#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_ALL 23
|
||||||
#define SIF_PAGE 2
|
#define SIF_PAGE 2
|
||||||
#define SIF_POS 4
|
#define SIF_POS 4
|
||||||
|
|
|
@ -382,6 +382,12 @@ co_IntCallHookProc(INT HookId,
|
||||||
case WH_MOUSE:
|
case WH_MOUSE:
|
||||||
ArgumentLength += sizeof(MOUSEHOOKSTRUCT);
|
ArgumentLength += sizeof(MOUSEHOOKSTRUCT);
|
||||||
break;
|
break;
|
||||||
|
case WH_CALLWNDPROC:
|
||||||
|
ArgumentLength += sizeof(CWPSTRUCT);
|
||||||
|
break;
|
||||||
|
case WH_CALLWNDPROCRET:
|
||||||
|
ArgumentLength += sizeof(CWPRETSTRUCT);
|
||||||
|
break;
|
||||||
case WH_MSGFILTER:
|
case WH_MSGFILTER:
|
||||||
case WH_SYSMSGFILTER:
|
case WH_SYSMSGFILTER:
|
||||||
case WH_GETMESSAGE:
|
case WH_GETMESSAGE:
|
||||||
|
@ -452,6 +458,14 @@ co_IntCallHookProc(INT HookId,
|
||||||
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(MOUSEHOOKSTRUCT));
|
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(MOUSEHOOKSTRUCT));
|
||||||
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
|
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
|
||||||
break;
|
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_MSGFILTER:
|
||||||
case WH_SYSMSGFILTER:
|
case WH_SYSMSGFILTER:
|
||||||
case WH_GETMESSAGE:
|
case WH_GETMESSAGE:
|
||||||
|
|
|
@ -1388,6 +1388,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
||||||
PW32THREAD Win32Thread;
|
PW32THREAD Win32Thread;
|
||||||
DECLARE_RETURN(LRESULT);
|
DECLARE_RETURN(LRESULT);
|
||||||
USER_REFERENCE_ENTRY Ref;
|
USER_REFERENCE_ENTRY Ref;
|
||||||
|
BOOL SameThread = FALSE;
|
||||||
|
|
||||||
/* FIXME: Call hooks. */
|
/* FIXME: Call hooks. */
|
||||||
if (!(Window = UserGetWindowObject(hWnd)))
|
if (!(Window = UserGetWindowObject(hWnd)))
|
||||||
|
@ -1425,6 +1426,20 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
||||||
RETURN( FALSE);
|
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,
|
Result = (ULONG_PTR)co_IntCallWindowProc(Window->Wnd->WndProc, !Window->Wnd->Unicode, hWnd, Msg, wParam,
|
||||||
lParamPacked,lParamBufferSize);
|
lParamPacked,lParamBufferSize);
|
||||||
|
|
||||||
|
@ -1433,6 +1448,18 @@ co_IntSendMessageTimeoutSingle(HWND hWnd,
|
||||||
*uResult = Result;
|
*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)))
|
if (! NT_SUCCESS(UnpackParam(lParamPacked, Msg, wParam, lParam)))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to unpack message parameters\n");
|
DPRINT1("Failed to unpack message parameters\n");
|
||||||
|
@ -1957,7 +1984,6 @@ NtUserMessageCall(
|
||||||
}
|
}
|
||||||
else if (parm->flags & BSF_NOTIMEOUTIFNOTHUNG)
|
else if (parm->flags & BSF_NOTIMEOUTIFNOTHUNG)
|
||||||
{
|
{
|
||||||
#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
|
|
||||||
co_IntSendMessageTimeout( HWND_BROADCAST,
|
co_IntSendMessageTimeout( HWND_BROADCAST,
|
||||||
Msg,
|
Msg,
|
||||||
wParam,
|
wParam,
|
||||||
|
|
Loading…
Reference in a new issue