55 RECTL rclAnd, rclMonitor, rclWindow;
135 if (WndPrev &&
Clear)
140 ERR(
"Application is keeping itself Active to prevent the change!\n");
162 pti = pWnd->
head.pti;
201 TRACE(
"IDAW E : Nothing to do, Active is NULL! pti 0x%p tid 0x%p\n",pti,
tid);
205 TRACE(
"IDAW : pti 0x%p tid 0x%p\n",pti,
tid);
207 if (ptiCurrent != pti)
245 ptiPrev = pwndPrev->
head.pti;
250 if (ptiCurrent != pti)
283 for (phWnd =
List; *phWnd; ++phWnd)
286 if ( cWindow && cWindow->
head.pti == ptiPrev )
308 if (ptiCurrent != pti)
345 if (ptiCurrent != pti)
439 ERR(
"MakeWindowActive Failed!\n");
495 HWND *phwndTopLevel, *phwndCurrent;
496 PWND pwndCurrent, pwndDesktop;
499 if (
Window->spwndParent == pwndDesktop )
502 phwndCurrent = phwndTopLevel;
521 ptiOld = WindowPrev ? WindowPrev->
head.pti :
NULL;
539 for (phWnd =
List; *phWnd; ++phWnd)
542 if (cWindow && cWindow->
head.pti == ptiOld)
558 for (phWnd =
List; *phWnd; ++phWnd)
561 if (cWindow && cWindow->
head.pti == ptiNew)
588 TRACE(
"Widow was minimized\n");
633 if (!pWnd || ThreadQueue == pWnd->
head.pti->MessageQueue)
692 if (
Message->dwQEvent == EventLast)
789 ptiChg = Wnd->head.pti;
813 pumq = pti ? pti->MessageQueue :
NULL;
818 if ( pumq != pumqPrev )
840 pumq = pti ? pti->MessageQueue :
NULL;
896 pumq = pti ? pti->MessageQueue :
NULL;
898 if ( pumqPrev && pumq == pumqPrev )
936 TRACE(
"SetForegroundAndFocusWindow(%x, %s)\n",
hWnd, (MouseActivate ?
"TRUE" :
"FALSE"));
941 if (Wnd && PrevForegroundQueue)
943 if (Wnd->head.pti->MessageQueue == PrevForegroundQueue)
951 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
987 if (!Wnd)
return FALSE;
997 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
999 TRACE(
"Same Active and Wnd.\n");
1032 PWND pWndChg, WndPrev;
1042 ASSERT(ThreadQueue != 0);
1061 if ( ThreadQueue != Wnd->head.pti->MessageQueue )
1073 if ( Wnd == pWndChg )
1086 ERR(
"SetActiveWindow: WH_CBT Call Hook return!\n");
1111 pWndChg != WndPrev ||
1115 ERR(
"SetActiveWindow: Summary ERROR, active state changed!\n");
1187 ASSERT(ThreadQueue != 0);
1191 BOOL Ret, DoFG, AllowFG;
1193 if (ThreadQueue == Wnd->head.pti->MessageQueue)
1252 TRACE(
"Mouse Active\n");
1283 TRACE(
"USAW: Previous active window\n");
1290 TRACE(
"USAW:PAW hwnd %p\n",Wnd?Wnd->head.h:
NULL);
1308 TRACE(
"USAW: Nothing\n");
1326 ASSERT(ThreadQueue != 0);
1336 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1339 if (
Window->head.pti->MessageQueue != ThreadQueue)
1341 ERR(
"SetFocus Must have the same Q!\n");
1356 ERR(
"SetFocus 1 WH_CBT Call Hook return!\n");
1373 ERR(
"SetFocus: Set Foreground and Focus Failed!\n");
1384 ERR(
"SetFocus: Set Active Failed!\n");
1394 ERR(
"SetFocus: Top window did not go active!\n");
1404 TRACE(
"Focus: %p -> %p\n", hWndPrev,
Window->head.h);
1410 ERR(
"SetFocus: 2 WH_CBT Call Hook return!\n");
1417 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1446 TRACE(
"Enter IntGetCapture\n");
1453 TRACE(
"Leave IntGetCapture, ret=%p\n", _ret_);
1473 if (
Window->head.pti->MessageQueue != ThreadQueue)
1475 ERR(
"Window Thread does not match Current!\n");
1609 if (dwProcessId != ASFW_ANY)
1630 if (dwProcessId == ASFW_ANY)
1637 ERR(
"ptiLastInput is SET!!\n");
1652 TRACE(
"Enter NtUserGetForegroundWindow\n");
1658 TRACE(
"Leave NtUserGetForegroundWindow, ret=%p\n",_ret_);
1671 TRACE(
"Enter NtUserSetActiveWindow(%p)\n",
hWnd);
1679 ERR(
"NtUserSetActiveWindow: Invalid handle 0x%p!\n",
hWnd);
1697 TRACE(
"Leave NtUserSetActiveWindow, ret=%p\n",_ret_);
1710 TRACE(
"Enter NtUserSetCapture(%p)\n",
hWnd);
1716 TRACE(
"Leave NtUserSetCapture, ret=%p\n", _ret_);
1732 TRACE(
"Enter NtUserSetFocus(%p)\n",
hWnd);
1739 ERR(
"NtUserSetFocus: Invalid handle 0x%p!\n",
hWnd);
1755 TRACE(
"Leave NtUserSetFocus, ret=%p\n",_ret_);
#define ERROR_INVALID_PARAMETER
PUSER_MESSAGE_QUEUE gpqForeground
#define MSQ_STATE_MOVESIZE
PTHREADINFO gptiForeground
PPROCESSINFO ppiScrnSaver
VOID FASTCALL co_MsqInsertMouseMessage(MSG *Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook)
HWND FASTCALL IntGetThreadFocusWindow(VOID)
BOOL FASTCALL co_IntSetActiveWindow(_In_ PWND Wnd, _In_ BOOL bMouse, _In_ BOOL bFocus, _In_ BOOL Async)
VOID IntFocusSetInputContext(PWND pWnd, BOOL bActivate, BOOL bCallback)
HWND FASTCALL co_UserSetFocus(PWND Window)
BOOL FASTCALL FindRemoveEventMsg(PTHREADINFO pti, DWORD Event, DWORD EventLast)
#define QF_FOCUSNULLSINCEACTIVE
#define QF_EVENTDEACTIVATEREMOVED
BOOL FASTCALL IntReleaseCapture(VOID)
VOID FASTCALL IntSendFocusMessages(PTHREADINFO pti, PWND pWnd)
BOOL FASTCALL IntUserSetActiveWindow(_In_ PWND Wnd, _In_ BOOL bMouse, _In_ BOOL bFocus, _In_ BOOL Async)
PDESKTOP gpdeskInputDesktop
HWND FASTCALL UserGetActiveWindow(VOID)
#define ASSERT_REFS_CO(_obj_)
BOOL FASTCALL IsFGLocked(VOID)
PVOID NTAPI PsGetProcessWin32Process(PEPROCESS Process)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
#define WM_CAPTURECHANGED
BOOL FASTCALL UserSendNotifyMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
BOOL FASTCALL UserSetActiveWindow(_In_opt_ PWND Wnd)
BOOL FASTCALL IntIsWindowFullscreen(PWND Window)
DBG_DEFAULT_CHANNEL(UserFocus)
HWND APIENTRY NtUserSetActiveWindow(HWND hWnd)
HWND FASTCALL IntGetCaptureWindow(VOID)
VOID FASTCALL co_WinPosActivateOtherWindow(PWND Wnd)
PUSER_MESSAGE_QUEUE FASTCALL IntGetFocusMessageQueue(VOID)
#define W32PF_SETFOREGROUNDALLOWED
#define WNDS_BEINGACTIVATED
VOID FASTCALL MsqDestroyMessage(PUSER_MESSAGE Message)
#define W32PF_ALLOWFOREGROUNDACTIVATE
#define IMS_IMEDEACTIVATE
#define ERROR_ACCESS_DENIED
static __inline VOID UserDerefObjectCo(PVOID obj)
BOOL FASTCALL co_IntMouseActivateWindow(PWND Wnd)
PPROCESSINFO gppiInputProvider
PWND FASTCALL co_GetDesktopWindow(PWND pWnd)
struct _WND * spwndDefaultIme
#define WM_PALETTEISCHANGING
VOID FASTCALL IntActivateWindow(PWND Wnd, PTHREADINFO pti, HANDLE tid, DWORD Type)
HWND APIENTRY NtUserSetFocus(HWND hWnd)
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)
HWND FASTCALL UserGetForegroundWindow(VOID)
HWND APIENTRY NtUserGetForegroundWindow(VOID)
#define TIF_ALLOWFOREGROUNDACTIVATE
BOOL FASTCALL IntCheckFullscreen(PWND Window)
#define IntReferenceThreadInfo(pti)
BOOL FASTCALL co_IntSendDeactivateMessages(HWND hWndPrev, HWND hWnd, BOOL Clear)
LONG NTAPI UserGetSystemMetrics(ULONG Index)
static BOOL FASTCALL co_IntSetForegroundAndFocusWindow(_In_opt_ PWND Wnd, _In_ BOOL MouseActivate, _In_ BOOL bFlash)
VOID FASTCALL UserEnterExclusive(VOID)
#define UserHMGetHandle(obj)
#define WM_QUERYNEWPALETTE
struct _LIST_ENTRY * Flink
HWND FASTCALL MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd)
HWND FASTCALL co_UserSetCapture(HWND hWnd)
VOID FASTCALL ClearMsgBitsMask(PTHREADINFO pti, UINT MessageBits)
BOOL FASTCALL co_IntMakeWindowActive(PWND Window)
NTSYSAPI ULONG NTAPI RtlEqualMemory(CONST VOID *Source1, CONST VOID *Source2, ULONG Length)
HWND APIENTRY NtUserSetCapture(HWND hWnd)
#define NT_SUCCESS(StatCode)
#define TIF_INACTIVATEAPPMSG
#define UlongToHandle(ul)
#define ValidateHwndNoErr(hwnd)
BOOL FASTCALL IntLockSetForegroundWindow(UINT uLockCode)
#define ObDereferenceObject
BOOL FASTCALL RECTL_bIntersectRect(_Out_ RECTL *prclDst, _In_ const RECTL *prcl1, _In_ const RECTL *prcl2)
#define DECLARE_RETURN(type)
VOID FASTCALL MsqPostMessage(PTHREADINFO pti, MSG *Msg, BOOLEAN HardwareMessage, DWORD MessageBits, DWORD dwQEvent, LONG_PTR ExtraInfo)
BOOL FASTCALL IntIsWindow(HWND hWnd)
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
BOOL FASTCALL co_IntSetForegroundMessageQueue(_In_opt_ PWND Wnd, _In_ PTHREADINFO pti, _In_ BOOL MouseActivate, _In_ DWORD Type)
PWND FASTCALL UserGetDesktopWindow(VOID)
NTSTATUS NTAPI PsLookupProcessByProcessId(IN HANDLE ProcessId, OUT PEPROCESS *Process)
BOOL FASTCALL IntIsWindowVisible(PWND Wnd)
BOOL FASTCALL co_IntSendActivateMessages(PWND WindowPrev, PWND Window, BOOL MouseActivate, BOOL Async)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
_In_ LPWSTR _Out_ PHANDLE _In_ struct _MONITOR * pMonitor
_Must_inspect_result_ _In_ WDFCMRESLIST List
HWND *FASTCALL IntWinListChildren(PWND Window)
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
HWND APIENTRY IntGetCapture(VOID)
BOOL FASTCALL ActivateOtherWindowMin(PWND Wnd)
struct _USER_MESSAGE_QUEUE * MessageQueue
VOID FASTCALL UserLeave(VOID)
FORCEINLINE VOID RECTL_vSetRect(_Out_ RECTL *prcl, _In_ LONG left, _In_ LONG top, _In_ LONG right, _In_ LONG bottom)
BOOL FASTCALL ToggleFGActivate(PTHREADINFO pti)
VOID FASTCALL IntSetFocusMessageQueue(PUSER_MESSAGE_QUEUE NewQueue)
#define MSQ_STATE_CAPTURE
LIST_ENTRY PostedMessagesListHead
struct _WND * spwndLastActive
#define IntGetWndThreadId(WndObj)
#define QF_ACTIVATIONCHANGE
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
VOID co_IntShellHookNotify(WPARAM Message, WPARAM wParam, LPARAM lParam)
#define HSHELL_RUDEAPPACTIVATED
PMONITOR NTAPI UserGetPrimaryMonitor(VOID)
PWND FASTCALL IntGetNonChildAncestor(PWND pWnd)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define IS_WND_IMELIKE(pWnd)
#define PUSIF_PALETTEDISPLAY
BOOL FASTCALL CanForceFG(PPROCESSINFO ppi)
PUSER_MESSAGE_QUEUE gpqForegroundPrev
struct _WND * spwndParent
BOOL FASTCALL IntAllowSetForegroundWindow(DWORD dwProcessId)
BOOL FASTCALL IntDeactivateWindow(PTHREADINFO pti, HANDLE tid)
BOOL FASTCALL co_IntSetForegroundWindowMouse(PWND Window)
void Clear(USHORT Window)
PWND FASTCALL VerifyWnd(PWND pWnd)
BOOL FASTCALL IsAllowedFGActive(PTHREADINFO pti, PWND Wnd)
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
#define MSQ_STATE_MENUOWNER
#define ExFreePoolWithTag(_P, _T)
#define IntDereferenceThreadInfo(pti)
VOID FASTCALL UpdateShellHook(PWND Window)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
base of all file and directory entries
LRESULT FASTCALL co_IntSendMessageWithCallBack(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, SENDASYNCPROC CompletionCallback, ULONG_PTR CompletionCallbackContext, ULONG_PTR *uResult)
BOOL FASTCALL IntGetWindowRect(PWND Wnd, RECTL *Rect)