diff --git a/reactos/win32ss/user/ntuser/desktop.c b/reactos/win32ss/user/ntuser/desktop.c index dfa993ea9f8..566af46425e 100644 --- a/reactos/win32ss/user/ntuser/desktop.c +++ b/reactos/win32ss/user/ntuser/desktop.c @@ -1632,6 +1632,12 @@ NtUserSwitchDesktop(HDESK hdesk) RETURN(FALSE); } + if (PsGetCurrentProcessSessionId() != pdesk->rpwinstaParent->dwSessionId) + { + ERR("NtUserSwitchDesktop called for a desktop of a different session\n"); + RETURN(FALSE); + } + if(pdesk == gpdeskInputDesktop) { WARN("NtUserSwitchDesktop called for active desktop\n"); diff --git a/reactos/win32ss/user/ntuser/winsta.c b/reactos/win32ss/user/ntuser/winsta.c index 3056fc3d5bf..315fdb5da54 100644 --- a/reactos/win32ss/user/ntuser/winsta.c +++ b/reactos/win32ss/user/ntuser/winsta.c @@ -432,6 +432,7 @@ NtUserCreateWindowStation( Status = RtlCreateAtomTable(37, &WindowStationObject->AtomTable); WindowStationObject->SystemMenuTemplate = (HANDLE)0; WindowStationObject->Name = WindowStationName; + WindowStationObject->dwSessionId = NtCurrentPeb()->SessionId; if (InputWindowStation == NULL) { diff --git a/reactos/win32ss/user/ntuser/winsta.h b/reactos/win32ss/user/ntuser/winsta.h index f2d0fba2ea6..4b20fc6f251 100644 --- a/reactos/win32ss/user/ntuser/winsta.h +++ b/reactos/win32ss/user/ntuser/winsta.h @@ -9,6 +9,8 @@ typedef struct _WINSTATION_OBJECT { + DWORD dwSessionId; + KSPIN_LOCK Lock; UNICODE_STRING Name; LIST_ENTRY DesktopListHead;