struct _DESKTOP *rpdesk;
/* ReactOS */
LIST_ENTRY Chain; /* Hook chain entry */
- struct _ETHREAD* Thread; /* Thread owning the hook */
HOOKPROC Proc; /* Hook function */
BOOLEAN Ansi; /* Is it an Ansi hook? */
UNICODE_STRING ModuleName; /* Module name for global hooks */
BOOL Block = FALSE;
ULONG_PTR uResult = 0;
- if (Hook->Thread)
- pti = Hook->Thread->Tcb.Win32Thread;
+ if (Hook->ptiHooked)
+ pti = Hook->ptiHooked;
else
pti = Hook->head.pti;
PLIST_ENTRY pLastHead, pElem;
PTHREADINFO pti;
- if (Hook->Thread)
+ if (Hook->ptiHooked)
{
- pti = ((PTHREADINFO)Hook->Thread->Tcb.Win32Thread);
+ pti = Hook->ptiHooked;
pLastHead = &pti->aphkStart[HOOKID_TO_INDEX(HookId)];
}
else
HookId = Hook->HookId;
- if (Hook->Thread) // Local
+ if (Hook->ptiHooked) // Local
{
- pti = ((PTHREADINFO)Hook->Thread->Tcb.Win32Thread);
+ pti = Hook->ptiHooked;
IntFreeHook( Hook);
ptiHook = Thread->Tcb.Win32Thread;
- ObDereferenceObject(Thread);
-
if ( ptiHook->rpdesk != pti->rpdesk) // gptiCurrent->rpdesk)
{
ERR("Local hook wrong desktop HookId: %d\n",HookId);
}
Hook->ihmod = (INT)Mod; // Module Index from atom table, Do this for now.
- Hook->Thread = Thread; /* Set Thread, Null is Global. */
Hook->HookId = HookId;
Hook->rpdesk = ptiHook->rpdesk;
Hook->phkNext = NULL; /* Dont use as a chain! Use link lists for chaining. */
CLEANUP:
TRACE("Leave NtUserSetWindowsHookEx, ret=%i\n",_ret_);
+ if (Thread) ObDereferenceObject(Thread);
UserLeave();
END_CLEANUP;
}