31 if (
Event > EVENT_OBJECT_STATECHANGE )
45 if (
Event <= EVENT_SYSTEM_MENUPOPUPEND )
64 TRACE(
"SetSrvEventMask 1\n");
65 for (
event = EventMin;
event <= EventMax;
event++)
67 if ((
event >= EVENT_SYSTEM_SOUND &&
event <= EVENT_SYSTEM_MINIMIZEEND) ||
68 (
event >= EVENT_CONSOLE_CARET &&
event <= EVENT_CONSOLE_END_APPLICATION) ||
69 (
event >= EVENT_OBJECT_CREATE &&
event <= EVENT_OBJECT_ACCELERATORCHANGE))
73 if (
event > EVENT_SYSTEM_MINIMIZEEND &&
event < EVENT_CONSOLE_CARET)
75 event = EVENT_CONSOLE_CARET-1;
78 if (
event > EVENT_CONSOLE_END_APPLICATION &&
event < EVENT_OBJECT_CREATE )
80 event = EVENT_OBJECT_CREATE-1;
83 if (
event > EVENT_OBJECT_ACCELERATORCHANGE &&
event < EVENT_MAX)
132 TRACE(
"IntRemoveEvent pEH %p\n", pEH);
161 TRACE(
"Dispatch Event 0x%lx, idObject %uI hwnd %p\n",
event, idObject,
hwnd);
200 pti = pWnd->
head.pti;
209 ListEntry = ListEntry->
Flink;
303 TRACE(
"NtUserSetWinEventHook hmod %p, pfn %p\n", hmodWinEventProc, lpfnWinEventProc);
319 if (eventMin > eventMax)
325 if (!lpfnWinEventProc)
333 if (!hmodWinEventProc)
335 ERR(
"Hook needs a module\n");
339 if (puString ==
NULL)
341 ERR(
"Dll not found\n");
348 TRACE(
"Out of Context\n");
349 hmodWinEventProc = 0;
388 if (hmodWinEventProc !=
NULL)
390 pEH->
offPfn = (
ULONG_PTR)((
char *)lpfnWinEventProc - (
char *)hmodWinEventProc);
392 pEH->
Proc = lpfnWinEventProc;
396 pEH->
Proc = lpfnWinEventProc;
PVOID NTAPI PsGetThreadWin32Thread(IN PETHREAD Thread)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
#define WINEVENT_SKIPOWNPROCESS
BOOL APIENTRY NtUserUnhookWinEvent(HWINEVENTHOOK hWinEventHook)
HWINEVENTHOOK APIENTRY NtUserSetWinEventHook(UINT eventMin, UINT eventMax, HMODULE hmodWinEventProc, PUNICODE_STRING puString, WINEVENTPROC lpfnWinEventProc, DWORD idProcess, DWORD idThread, UINT dwflags)
#define EngGetTickCount32()
NTSTATUS NTAPI PsLookupThreadByThreadId(IN HANDLE ThreadId, OUT PETHREAD *Thread)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
#define ERROR_INVALID_THREAD_ID
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
static DWORD FASTCALL GetMaskFromEvent(DWORD Event)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
#define ERROR_DLL_NOT_FOUND
#define SRV_EVENT_STATECHANGE
#define InsertTailList(ListHead, Entry)
LRESULT APIENTRY co_EVENT_CallEvents(DWORD event, HWND hwnd, UINT_PTR idObject, LONG_PTR idChild)
static HWINEVENTHOOK(WINAPI *pSetWinEventHook)(DWORD
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
static LRESULT FASTCALL IntCallLowLevelEvent(PEVENTHOOK pEH, DWORD event, HWND hwnd, LONG idObject, LONG idChild, LONG idThread)
static VOID FASTCALL IntSetSrvEventMask(UINT EventMin, UINT EventMax)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
DBG_DEFAULT_CHANNEL(UserEvent)
#define SRV_EVENT_NAMECHANGE
struct _EVENTPACK EVENTPACK
static __inline VOID UserDerefObjectCo(PVOID obj)
#define SRV_EVENT_END_APPLICATION
LRESULT APIENTRY co_IntCallEventProc(HWINEVENTHOOK hook, DWORD event, HWND hWnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime, WINEVENTPROC Proc, INT Mod, ULONG_PTR offPfn)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
PWND FASTCALL UserGetWindowObject(HWND hWnd)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
struct tagEVENTHOOK * PEVENTHOOK
VOID FASTCALL UserEnterExclusive(VOID)
#define UserHMGetHandle(obj)
struct _LIST_ENTRY * Flink
#define ERROR_INVALID_FILTER_PROC
BOOLEAN IntRemoveEvent(PVOID Object)
VOID(CALLBACK * WINEVENTPROC)(HWINEVENTHOOK, DWORD, HWND, LONG, LONG, DWORD, DWORD)
_Out_ PCLIENT_ID ClientId
#define NT_SUCCESS(StatCode)
#define SRV_EVENT_RUNNING
#define ObDereferenceObject
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
VOID FASTCALL MsqPostMessage(PTHREADINFO pti, MSG *Msg, BOOLEAN HardwareMessage, DWORD MessageBits, DWORD dwQEvent, LONG_PTR ExtraInfo)
unsigned __int3264 UINT_PTR
#define ExAllocatePoolWithTag(hernya, size, tag)
#define WINEVENT_INCONTEXT
#define KeEnterCriticalRegion()
static _In_ DWORD dwflags
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
static PEVENTTABLE GlobalEvents
VOID FASTCALL UserLeave(VOID)
#define KeLeaveCriticalRegion()
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
#define WINEVENT_SKIPOWNTHREAD
#define InitializeListHead(ListHead)
#define SRV_EVENT_LOCATIONCHANGE
#define ERROR_HOOK_NEEDS_HMOD
#define SRV_EVENT_VALUECHANGE
struct _EVENTPACK * PEVENTPACK
PUSER_HANDLE_TABLE gHandleTable
#define ExFreePoolWithTag(_P, _T)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define ERROR_INVALID_HOOK_FILTER
VOID APIENTRY NtUserNotifyWinEvent(DWORD Event, HWND hWnd, LONG idObject, LONG idChild)