mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 23:12:56 +00:00
More hook implementations.
svn path=/trunk/; revision=32931
This commit is contained in:
parent
eda37fd967
commit
d0884129e5
3 changed files with 109 additions and 16 deletions
|
@ -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,6 +270,10 @@ NotifyWinEvent(
|
||||||
LONG idChild
|
LONG 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);
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue