[win32k]
authorGiannis Adamopoulos <gadamopoulos@reactos.org>
Sat, 16 Mar 2013 10:12:16 +0000 (10:12 +0000)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Sat, 16 Mar 2013 10:12:16 +0000 (10:12 +0000)
- Store the session id in WINSTATION_OBJECT when we create a window station.
- Don't allow switching to a desktop that belongs to a different session
This is a modified version of the patch from CORE-5531

svn path=/trunk/; revision=58514

reactos/win32ss/user/ntuser/desktop.c
reactos/win32ss/user/ntuser/winsta.c
reactos/win32ss/user/ntuser/winsta.h

index dfa993e..566af46 100644 (file)
@@ -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");
index 3056fc3..315fdb5 100644 (file)
@@ -432,6 +432,7 @@ NtUserCreateWindowStation(
    Status = RtlCreateAtomTable(37, &WindowStationObject->AtomTable);
    WindowStationObject->SystemMenuTemplate = (HANDLE)0;
    WindowStationObject->Name = WindowStationName;
+   WindowStationObject->dwSessionId = NtCurrentPeb()->SessionId;
 
    if (InputWindowStation == NULL)
    {
index f2d0fba..4b20fc6 100644 (file)
@@ -9,6 +9,8 @@
 
 typedef struct _WINSTATION_OBJECT
 {
+    DWORD dwSessionId;
+
     KSPIN_LOCK Lock;
     UNICODE_STRING Name;
     LIST_ENTRY DesktopListHead;