More hook implementations.

svn path=/trunk/; revision=32931
This commit is contained in:
James Tabor 2008-04-12 20:53:08 +00:00
parent eda37fd967
commit d0884129e5
3 changed files with 109 additions and 16 deletions

View file

@ -34,6 +34,44 @@
WINE_DEFAULT_DEBUG_CHANNEL(user32); WINE_DEFAULT_DEBUG_CHANNEL(user32);
DWORD Bogus_SrvEventActivity = 0; // Fixme, need to ref to share data.
/* PRIVATE FUNCTIONS *********************************************************/
static
DWORD
FASTCALL
GetMaskFromEvent(DWORD Event)
{
DWORD Ret = 0;
if ( Event > EVENT_OBJECT_STATECHANGE )
{
if ( Event == EVENT_OBJECT_LOCATIONCHANGE ) return SRV_EVENT_LOCATIONCHANGE;
if ( Event == EVENT_OBJECT_NAMECHANGE ) return SRV_EVENT_NAMECHANGE;
if ( Event == EVENT_OBJECT_VALUECHANGE ) return SRV_EVENT_VALUECHANGE;
return SRV_EVENT_CREATE;
}
if ( Event == EVENT_OBJECT_STATECHANGE ) return SRV_EVENT_STATECHANGE;
Ret = SRV_EVENT_RUNNING;
if ( Event < EVENT_SYSTEM_MENUSTART ) return SRV_EVENT_CREATE;
if ( Event <= EVENT_SYSTEM_MENUPOPUPEND )
{
Ret = SRV_EVENT_MENU;
}
else
{
if ( Event <= EVENT_CONSOLE_CARET-1 ) return SRV_EVENT_CREATE;
if ( Event <= EVENT_CONSOLE_END_APPLICATION ) return SRV_EVENT_END_APPLICATION;
if ( Event != EVENT_OBJECT_FOCUS ) return SRV_EVENT_CREATE;
}
return Ret;
}
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
/* /*
@ -221,7 +259,7 @@ UnhookWindowsHook ( int nCode, HOOKPROC pfnFilterProc )
} }
/* /*
* @unimplemented * @implemented
*/ */
VOID VOID
STDCALL STDCALL
@ -232,7 +270,11 @@ NotifyWinEvent(
LONG idChild LONG idChild
) )
{ {
NtUserNotifyWinEvent(event, hwnd, idObject, idChild); // "Servers call NotifyWinEvent to announce the event to the system after the
// event has occurred; they must never notify the system of an event before
// the event has occurred." msdn on NotifyWinEvent.
if (Bogus_SrvEventActivity & GetMaskFromEvent(event)) // Check to see.
NtUserNotifyWinEvent(event, hwnd, idObject, idChild);
} }
/* /*
@ -277,7 +319,7 @@ SetWinEventHook(
} }
/* /*
* @unimplemented * @implemented
*/ */
BOOL BOOL
STDCALL STDCALL
@ -286,6 +328,7 @@ IsWinEventHookInstalled(
{ {
if ((PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo) if ((PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo)
{ {
return (Bogus_SrvEventActivity & GetMaskFromEvent(event)) != 0;
} }
return FALSE; return FALSE;
} }

View file

@ -242,6 +242,16 @@ typedef struct _W32CLIENTINFO
#define GetWin32ClientInfo() (PW32CLIENTINFO)(NtCurrentTeb()->Win32ClientInfo) #define GetWin32ClientInfo() (PW32CLIENTINFO)(NtCurrentTeb()->Win32ClientInfo)
// Server event activity bits.
#define SRV_EVENT_MENU 0x0001
#define SRV_EVENT_END_APPLICATION 0x0002
#define SRV_EVENT_RUNNING 0x0004
#define SRV_EVENT_NAMECHANGE 0x0008
#define SRV_EVENT_VALUECHANGE 0x0010
#define SRV_EVENT_STATECHANGE 0x0020
#define SRV_EVENT_LOCATIONCHANGE 0x0040
#define SRV_EVENT_CREATE 0x8000
PW32THREADINFO GetW32ThreadInfo(VOID); PW32THREADINFO GetW32ThreadInfo(VOID);
PW32PROCESSINFO GetW32ProcessInfo(VOID); PW32PROCESSINFO GetW32ProcessInfo(VOID);
@ -2205,12 +2215,12 @@ NtUserSetWindowRgn(
HRGN hRgn, HRGN hRgn,
BOOL bRedraw); BOOL bRedraw);
DWORD HHOOK
NTAPI NTAPI
NtUserSetWindowsHookAW( NtUserSetWindowsHookAW(
DWORD Unknown0, int idHook,
DWORD Unknown1, HOOKPROC lpfn,
DWORD Unknown2); BOOL Ansi);
HHOOK HHOOK
NTAPI NTAPI

View file

@ -16,8 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id$ /*
*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* PURPOSE: Window hooks * PURPOSE: Window hooks
@ -38,6 +37,44 @@
#define HOOKID_TO_FLAG(HookId) (1 << ((HookId) + 1)) #define HOOKID_TO_FLAG(HookId) (1 << ((HookId) + 1))
static PHOOKTABLE GlobalHooks; static PHOOKTABLE GlobalHooks;
DWORD Bogus_SrvEventActivity = 0;
/* PRIVATE FUNCTIONS *********************************************************/
static
DWORD
FASTCALL
GetMaskFromEvent(DWORD Event)
{
DWORD Ret = 0;
if ( Event > EVENT_OBJECT_STATECHANGE )
{
if ( Event == EVENT_OBJECT_LOCATIONCHANGE ) return SRV_EVENT_LOCATIONCHANGE;
if ( Event == EVENT_OBJECT_NAMECHANGE ) return SRV_EVENT_NAMECHANGE;
if ( Event == EVENT_OBJECT_VALUECHANGE ) return SRV_EVENT_VALUECHANGE;
return SRV_EVENT_CREATE;
}
if ( Event == EVENT_OBJECT_STATECHANGE ) return SRV_EVENT_STATECHANGE;
Ret = SRV_EVENT_RUNNING;
if ( Event < EVENT_SYSTEM_MENUSTART ) return SRV_EVENT_CREATE;
if ( Event <= EVENT_SYSTEM_MENUPOPUPEND )
{
Ret = SRV_EVENT_MENU;
}
else
{
if ( Event <= EVENT_CONSOLE_CARET-1 ) return SRV_EVENT_CREATE;
if ( Event <= EVENT_CONSOLE_END_APPLICATION ) return SRV_EVENT_END_APPLICATION;
if ( Event != EVENT_OBJECT_FOCUS ) return SRV_EVENT_CREATE;
}
return Ret;
}
/* create a new hook table */ /* create a new hook table */
static PHOOKTABLE static PHOOKTABLE
@ -485,16 +522,16 @@ CLEANUP:
END_CLEANUP; END_CLEANUP;
} }
DWORD HHOOK
STDCALL STDCALL
NtUserSetWindowsHookAW( NtUserSetWindowsHookAW(
DWORD Unknown0, int idHook,
DWORD Unknown1, HOOKPROC lpfn,
DWORD Unknown2) BOOL Ansi)
{ {
UNIMPLEMENTED UNICODE_STRING USModuleName;
RtlInitUnicodeString(&USModuleName, NULL);
return 0; return NtUserSetWindowsHookEx(NULL, &USModuleName, 0, idHook, lpfn, Ansi);
} }
HHOOK HHOOK
@ -709,6 +746,9 @@ NtUserSetWinEventHook(
DWORD idThread, DWORD idThread,
UINT dwflags) UINT dwflags)
{ {
Bogus_SrvEventActivity |= GetMaskFromEvent(eventMin); // Fake it out for now.
Bogus_SrvEventActivity &= ~GetMaskFromEvent(eventMin);
UNIMPLEMENTED UNIMPLEMENTED
return 0; return 0;