mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 12:17:30 +00:00
- Fixed event code. Remove junk too.
svn path=/trunk/; revision=42230
This commit is contained in:
parent
1632e8b1db
commit
b163f7f34a
3 changed files with 48 additions and 77 deletions
|
@ -185,6 +185,21 @@ typedef struct _CLSMENUNAME
|
||||||
PUNICODE_STRING pusMenuName;
|
PUNICODE_STRING pusMenuName;
|
||||||
} CLSMENUNAME, *PCLSMENUNAME;
|
} CLSMENUNAME, *PCLSMENUNAME;
|
||||||
|
|
||||||
|
typedef struct tagSBDATA
|
||||||
|
{
|
||||||
|
INT posMin;
|
||||||
|
INT posMax;
|
||||||
|
INT page;
|
||||||
|
INT pos;
|
||||||
|
} SBDATA, *PSBDATA;
|
||||||
|
|
||||||
|
typedef struct tagSBINFO
|
||||||
|
{
|
||||||
|
INT WSBflags;
|
||||||
|
SBDATA Horz;
|
||||||
|
SBDATA Vert;
|
||||||
|
} SBINFO, *PSBINFO;
|
||||||
|
|
||||||
typedef enum _GETCPD
|
typedef enum _GETCPD
|
||||||
{
|
{
|
||||||
UserGetCPDU2A = 0x01,
|
UserGetCPDU2A = 0x01,
|
||||||
|
@ -221,7 +236,7 @@ typedef struct _CLS
|
||||||
struct _CLS *pclsNext;
|
struct _CLS *pclsNext;
|
||||||
RTL_ATOM atomClassName;
|
RTL_ATOM atomClassName;
|
||||||
ATOM atomNVClassName;
|
ATOM atomNVClassName;
|
||||||
DWORD fnid; // New ClassId
|
DWORD fnid;
|
||||||
struct _DESKTOP *rpdeskParent;
|
struct _DESKTOP *rpdeskParent;
|
||||||
PVOID pdce;
|
PVOID pdce;
|
||||||
DWORD CSF_flags;
|
DWORD CSF_flags;
|
||||||
|
@ -242,14 +257,17 @@ typedef struct _CLS
|
||||||
INT cbwndExtra;
|
INT cbwndExtra;
|
||||||
HINSTANCE hModule;
|
HINSTANCE hModule;
|
||||||
HANDLE hIcon; /* FIXME - Use pointer! */
|
HANDLE hIcon; /* FIXME - Use pointer! */
|
||||||
|
//PCURSOR spicn;
|
||||||
HANDLE hCursor; /* FIXME - Use pointer! */
|
HANDLE hCursor; /* FIXME - Use pointer! */
|
||||||
|
//PCURSOR spcur;
|
||||||
HBRUSH hbrBackground;
|
HBRUSH hbrBackground;
|
||||||
PWSTR lpszMenuName; // kernel use
|
PWSTR lpszMenuName; // kernel use
|
||||||
PSTR lpszAnsiClassName; // "
|
PSTR lpszAnsiClassName; // "
|
||||||
HANDLE hIconSm; /* FIXME - Use pointer! */
|
HANDLE hIconSm; /* FIXME - Use pointer! */
|
||||||
|
//PCURSOR spicnSm;
|
||||||
|
|
||||||
UINT Destroying : 1; // CSF_WOWDEFERDESTROY
|
UINT Destroying : 1; // CSF_WOWDEFERDESTROY
|
||||||
UINT Unicode : 1;
|
UINT Unicode : 1; // !CSF_ANSIPROC
|
||||||
UINT System : 1; // CSF_SYSTEMCLASS
|
UINT System : 1; // CSF_SYSTEMCLASS
|
||||||
UINT Global : 1; // CS_GLOBALCLASS
|
UINT Global : 1; // CS_GLOBALCLASS
|
||||||
UINT MenuNameIsString : 1;
|
UINT MenuNameIsString : 1;
|
||||||
|
@ -382,11 +400,16 @@ typedef struct _WND
|
||||||
/* Property list head.*/
|
/* Property list head.*/
|
||||||
LIST_ENTRY PropListHead;
|
LIST_ENTRY PropListHead;
|
||||||
ULONG PropListItems;
|
ULONG PropListItems;
|
||||||
|
/* Scrollbar info */
|
||||||
|
PSBINFO pSBInfo;
|
||||||
|
/* system menu handle. */
|
||||||
|
HMENU SystemMenu;
|
||||||
|
//PMENU spmenuSys;
|
||||||
/* Window menu handle or window id */
|
/* Window menu handle or window id */
|
||||||
UINT IDMenu; // Use spmenu
|
UINT IDMenu; // Use spmenu
|
||||||
//PMENU spmenuSys;
|
|
||||||
//PMENU spmenu;
|
//PMENU spmenu;
|
||||||
HRGN hrgnClip;
|
HRGN hrgnClip;
|
||||||
|
HRGN hrgnNewFrame;
|
||||||
/* Window name. */
|
/* Window name. */
|
||||||
UNICODE_STRING strName;
|
UNICODE_STRING strName;
|
||||||
/* Size of the extra data associated with the window. */
|
/* Size of the extra data associated with the window. */
|
||||||
|
|
|
@ -15,6 +15,7 @@ typedef struct tagHOOKTABLE
|
||||||
|
|
||||||
typedef struct tagEVENTHOOK
|
typedef struct tagEVENTHOOK
|
||||||
{
|
{
|
||||||
|
THRDESKHEAD head;
|
||||||
LIST_ENTRY Chain; /* Event chain entry */
|
LIST_ENTRY Chain; /* Event chain entry */
|
||||||
PETHREAD Thread; /* Thread owning the event */
|
PETHREAD Thread; /* Thread owning the event */
|
||||||
UINT eventMin;
|
UINT eventMin;
|
||||||
|
@ -25,8 +26,6 @@ typedef struct tagEVENTHOOK
|
||||||
ULONG Flags; /* Some internal flags */
|
ULONG Flags; /* Some internal flags */
|
||||||
ULONG_PTR offPfn;
|
ULONG_PTR offPfn;
|
||||||
INT ihmod;
|
INT ihmod;
|
||||||
THRDESKHEAD head; // FIXME When on top it creates problems
|
|
||||||
UNICODE_STRING ModuleName; /* Module name for global events */
|
|
||||||
} EVENTHOOK, *PEVENTHOOK;
|
} EVENTHOOK, *PEVENTHOOK;
|
||||||
|
|
||||||
typedef struct tagEVENTTABLE
|
typedef struct tagEVENTTABLE
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
#define WINEVENT_INIT 0x40000000
|
|
||||||
#define WINEVENT_DESTROYED 0x80000000
|
|
||||||
|
|
||||||
typedef struct _EVENTPACK
|
typedef struct _EVENTPACK
|
||||||
{
|
{
|
||||||
PEVENTHOOK pEH;
|
PEVENTHOOK pEH;
|
||||||
|
@ -176,6 +173,7 @@ IntNotifyWinEvent(
|
||||||
LONG idChild)
|
LONG idChild)
|
||||||
{
|
{
|
||||||
PEVENTHOOK pEH;
|
PEVENTHOOK pEH;
|
||||||
|
PLIST_ENTRY pLE;
|
||||||
LRESULT Result;
|
LRESULT Result;
|
||||||
|
|
||||||
DPRINT("IntNotifyWinEvent GlobalEvents = 0x%x pWnd 0x%x\n",GlobalEvents, pWnd);
|
DPRINT("IntNotifyWinEvent GlobalEvents = 0x%x pWnd 0x%x\n",GlobalEvents, pWnd);
|
||||||
|
@ -186,17 +184,10 @@ IntNotifyWinEvent(
|
||||||
|
|
||||||
if (!GlobalEvents || !GlobalEvents->Counts) return;
|
if (!GlobalEvents || !GlobalEvents->Counts) return;
|
||||||
|
|
||||||
if (!UserIsEntered()) return;
|
pLE = GlobalEvents->Events.Flink;
|
||||||
|
pEH = CONTAINING_RECORD(pLE, EVENTHOOK, Chain);
|
||||||
pEH = (PEVENTHOOK)GlobalEvents->Events.Flink;
|
|
||||||
DPRINT("IntNotifyWinEvent pEH 0x%x\n",pEH);
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (pEH->Flags & WINEVENT_INIT)
|
|
||||||
{
|
|
||||||
DPRINT("IntNotifyWinEvent is still in INIT MODE!! pEH 0x%x\n",pEH);
|
|
||||||
}
|
|
||||||
|
|
||||||
UserReferenceObject(pEH);
|
UserReferenceObject(pEH);
|
||||||
// Must be inside the event window.
|
// Must be inside the event window.
|
||||||
if ( (pEH->eventMin <= Event) && (pEH->eventMax >= Event))
|
if ( (pEH->eventMin <= Event) && (pEH->eventMax >= Event))
|
||||||
|
@ -206,7 +197,11 @@ IntNotifyWinEvent(
|
||||||
if (!(pEH->idProcess) || !(pEH->idThread) ||
|
if (!(pEH->idProcess) || !(pEH->idThread) ||
|
||||||
(NtCurrentTeb()->ClientId.UniqueProcess == (PVOID)pEH->idProcess))
|
(NtCurrentTeb()->ClientId.UniqueProcess == (PVOID)pEH->idProcess))
|
||||||
{
|
{
|
||||||
Result = IntCallLowLevelEvent(pEH, Event, UserHMGetHandle(pWnd), idObject, idChild);
|
Result = IntCallLowLevelEvent( pEH,
|
||||||
|
Event,
|
||||||
|
UserHMGetHandle(pWnd),
|
||||||
|
idObject,
|
||||||
|
idChild);
|
||||||
}
|
}
|
||||||
}// if ^skip own thread && ((Pid && CPid == Pid && ^skip own process) || all process)
|
}// if ^skip own thread && ((Pid && CPid == Pid && ^skip own process) || all process)
|
||||||
else if ( !(pEH->Flags & WINEVENT_SKIPOWNTHREAD) &&
|
else if ( !(pEH->Flags & WINEVENT_SKIPOWNTHREAD) &&
|
||||||
|
@ -215,22 +210,20 @@ IntNotifyWinEvent(
|
||||||
!(pEH->Flags & WINEVENT_SKIPOWNPROCESS)) ||
|
!(pEH->Flags & WINEVENT_SKIPOWNPROCESS)) ||
|
||||||
!pEH->idProcess ) )
|
!pEH->idProcess ) )
|
||||||
{
|
{
|
||||||
|
Result = co_IntCallEventProc( UserHMGetHandle(pEH),
|
||||||
Result = co_IntCallEventProc( pEH->head.h,
|
Event,
|
||||||
Event,
|
UserHMGetHandle(pWnd),
|
||||||
UserHMGetHandle(pWnd),
|
idObject,
|
||||||
idObject,
|
idChild,
|
||||||
idChild,
|
|
||||||
PtrToUint(NtCurrentTeb()->ClientId.UniqueThread),
|
PtrToUint(NtCurrentTeb()->ClientId.UniqueThread),
|
||||||
(DWORD)EngGetTickCount(),
|
(DWORD)EngGetTickCount(),
|
||||||
pEH->Proc);
|
pEH->Proc);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UserDereferenceObject(pEH);
|
UserDereferenceObject(pEH);
|
||||||
|
pLE = pEH->Chain.Flink;
|
||||||
pEH = (PEVENTHOOK)pEH->Chain.Flink;
|
pEH = CONTAINING_RECORD(pLE, EVENTHOOK, Chain);
|
||||||
} while (pEH != (PEVENTHOOK)&GlobalEvents->Events.Flink);
|
} while (pLE != &GlobalEvents->Events);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -275,7 +268,6 @@ NtUserSetWinEventHook(
|
||||||
{
|
{
|
||||||
PEVENTHOOK pEH;
|
PEVENTHOOK pEH;
|
||||||
HWINEVENTHOOK Ret = NULL;
|
HWINEVENTHOOK Ret = NULL;
|
||||||
UNICODE_STRING ModuleName;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
PETHREAD Thread = NULL;
|
PETHREAD Thread = NULL;
|
||||||
|
@ -330,8 +322,7 @@ NtUserSetWinEventHook(
|
||||||
InsertTailList(&GlobalEvents->Events, &pEH->Chain);
|
InsertTailList(&GlobalEvents->Events, &pEH->Chain);
|
||||||
GlobalEvents->Counts++;
|
GlobalEvents->Counts++;
|
||||||
|
|
||||||
pEH->Flags = dwflags|WINEVENT_INIT;
|
UserHMGetHandle(pEH) = Handle;
|
||||||
pEH->head.h = Handle;
|
|
||||||
// pEH->head.pti =?
|
// pEH->head.pti =?
|
||||||
// pEH->head.rpdesk
|
// pEH->head.rpdesk
|
||||||
if (Thread)
|
if (Thread)
|
||||||
|
@ -342,50 +333,10 @@ NtUserSetWinEventHook(
|
||||||
pEH->eventMax = eventMax;
|
pEH->eventMax = eventMax;
|
||||||
pEH->idProcess = idProcess;
|
pEH->idProcess = idProcess;
|
||||||
pEH->idThread = idThread;
|
pEH->idThread = idThread;
|
||||||
|
pEH->Flags = dwflags;
|
||||||
|
|
||||||
if (NULL != hmodWinEventProc)
|
if (NULL != hmodWinEventProc)
|
||||||
{
|
{
|
||||||
Status = MmCopyFromCaller(&ModuleName,
|
|
||||||
puString,
|
|
||||||
sizeof(UNICODE_STRING));
|
|
||||||
|
|
||||||
if (! NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
UserDereferenceObject(pEH);
|
|
||||||
IntRemoveEvent(pEH);
|
|
||||||
SetLastNtError(Status);
|
|
||||||
goto SetEventExit;
|
|
||||||
}
|
|
||||||
|
|
||||||
pEH->ModuleName.Buffer = ExAllocatePoolWithTag(PagedPool,
|
|
||||||
ModuleName.MaximumLength,
|
|
||||||
TAG_HOOK);
|
|
||||||
|
|
||||||
if (NULL == pEH->ModuleName.Buffer)
|
|
||||||
{
|
|
||||||
UserDereferenceObject(pEH);
|
|
||||||
IntRemoveEvent(pEH);
|
|
||||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
|
||||||
goto SetEventExit;
|
|
||||||
}
|
|
||||||
|
|
||||||
pEH->ModuleName.MaximumLength = ModuleName.MaximumLength;
|
|
||||||
|
|
||||||
Status = MmCopyFromCaller(pEH->ModuleName.Buffer,
|
|
||||||
ModuleName.Buffer,
|
|
||||||
ModuleName.MaximumLength);
|
|
||||||
|
|
||||||
if (! NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
ExFreePoolWithTag(pEH->ModuleName.Buffer, TAG_HOOK);
|
|
||||||
UserDereferenceObject(pEH);
|
|
||||||
IntRemoveEvent(pEH);
|
|
||||||
SetLastNtError(Status);
|
|
||||||
goto SetEventExit;
|
|
||||||
}
|
|
||||||
|
|
||||||
pEH->ModuleName.Length = ModuleName.Length;
|
|
||||||
|
|
||||||
pEH->offPfn = (ULONG_PTR)((char *)lpfnWinEventProc - (char *)hmodWinEventProc);
|
pEH->offPfn = (ULONG_PTR)((char *)lpfnWinEventProc - (char *)hmodWinEventProc);
|
||||||
pEH->ihmod = (INT)hmodWinEventProc;
|
pEH->ihmod = (INT)hmodWinEventProc;
|
||||||
pEH->Proc = lpfnWinEventProc;
|
pEH->Proc = lpfnWinEventProc;
|
||||||
|
@ -393,8 +344,6 @@ NtUserSetWinEventHook(
|
||||||
else
|
else
|
||||||
pEH->Proc = lpfnWinEventProc;
|
pEH->Proc = lpfnWinEventProc;
|
||||||
|
|
||||||
pEH->Flags &= ~WINEVENT_INIT;
|
|
||||||
|
|
||||||
UserDereferenceObject(pEH);
|
UserDereferenceObject(pEH);
|
||||||
|
|
||||||
Ret = Handle;
|
Ret = Handle;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue