From 764ba25e1848bb0647d364944e14daabfca0bcee Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 12 Apr 2008 19:19:30 +0000 Subject: [PATCH] More work on hooks. svn path=/trunk/; revision=32928 --- reactos/dll/win32/user32/user32.def | 2 +- reactos/dll/win32/user32/windows/hook.c | 49 ++++++++++++------- reactos/include/reactos/win32k/ntuser.h | 4 +- reactos/subsystems/win32/win32k/ntuser/hook.c | 4 +- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/reactos/dll/win32/user32/user32.def b/reactos/dll/win32/user32/user32.def index 35782777ccc..7e209f0a742 100644 --- a/reactos/dll/win32/user32/user32.def +++ b/reactos/dll/win32/user32/user32.def @@ -691,7 +691,7 @@ TranslateAcceleratorW@12 TranslateMDISysAccel@8 TranslateMessage@4 TranslateMessageEx@8 -UnhookWinEvent@4 +UnhookWinEvent@4=NtUserUnhookWinEvent@4 UnhookWindowsHook@8 UnhookWindowsHookEx@4 UnionRect@12 diff --git a/reactos/dll/win32/user32/windows/hook.c b/reactos/dll/win32/user32/windows/hook.c index 0b8f8f99c6c..329c9ac8135 100644 --- a/reactos/dll/win32/user32/windows/hook.c +++ b/reactos/dll/win32/user32/windows/hook.c @@ -211,14 +211,13 @@ RegisterShellHookWindow(HWND hWnd) } /* - * @unimplemented + * @implemented */ BOOL STDCALL UnhookWindowsHook ( int nCode, HOOKPROC pfnFilterProc ) { - UNIMPLEMENTED; - return FALSE; + return NtUserCallTwoParam(nCode, (DWORD)pfnFilterProc, TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK); } /* @@ -233,11 +232,11 @@ NotifyWinEvent( LONG idChild ) { - UNIMPLEMENTED; + NtUserNotifyWinEvent(event, hwnd, idObject, idChild); } /* - * @unimplemented + * @implemented */ HWINEVENTHOOK STDCALL @@ -251,19 +250,30 @@ SetWinEventHook( UINT dwFlags ) { - UNIMPLEMENTED; - return FALSE; -} + WCHAR ModuleName[MAX_PATH]; + UNICODE_STRING USModuleName; -/* - * @unimplemented - */ -BOOL -STDCALL -UnhookWinEvent ( HWINEVENTHOOK hWinEventHook ) -{ - UNIMPLEMENTED; - return FALSE; + if ((hmodWinEventProc != NULL) && (dwFlags & WINEVENT_INCONTEXT)) + { + if (0 == GetModuleFileNameW(hmodWinEventProc, ModuleName, MAX_PATH)) + { + return NULL; + } + RtlInitUnicodeString(&USModuleName, ModuleName); + } + else + { + RtlInitUnicodeString(&USModuleName, NULL); + } + + return NtUserSetWinEventHook(eventMin, + eventMax, + hmodWinEventProc, + &USModuleName, + pfnWinEventProc, + idProcess, + idThread, + dwFlags); } /* @@ -274,11 +284,12 @@ STDCALL IsWinEventHookInstalled( DWORD event) { - UNIMPLEMENTED; + if ((PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo) + { + } return FALSE; } - /* * @unimplemented */ diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index ea5778e7173..cf9b1d366c6 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -2233,7 +2233,7 @@ NtUserSetWindowStationUser( WORD NTAPI NtUserSetWindowWord(HWND hWnd, INT Index, WORD NewVal); -DWORD +HWINEVENTHOOK NTAPI NtUserSetWinEventHook( UINT eventMin, @@ -2330,7 +2330,7 @@ NtUserUnhookWindowsHookEx( DWORD NTAPI NtUserUnhookWinEvent( - DWORD Unknown0); + HWINEVENTHOOK hWinEventHook); BOOL NTAPI diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 563875f1680..9be66f5ae27 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -697,7 +697,7 @@ CLEANUP: END_CLEANUP; } -DWORD +HWINEVENTHOOK STDCALL NtUserSetWinEventHook( UINT eventMin, @@ -765,7 +765,7 @@ CLEANUP: DWORD STDCALL NtUserUnhookWinEvent( - DWORD Unknown0) + HWINEVENTHOOK hWinEventHook) { UNIMPLEMENTED