Author: gadamopoulos Date: Sun Mar 20 14:28:12 2011 New Revision: 51101
URL: http://svn.reactos.org/svn/reactos?rev=51101&view=rev Log: [win32k] - Fix disconnecting from a desktop when IntSetThreadDesktop gets NULL parameter
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c [iso-8859-1] Sun Mar 20 14:28:12 2011 @@ -1798,7 +1798,7 @@ IntSetThreadDesktop(IN HDESK hDesktop, IN BOOL FreeOnFailure) { - PDESKTOP DesktopObject, OldDesktop; + PDESKTOP DesktopObject = NULL, OldDesktop; HDESK hOldDesktop; PTHREADINFO W32Thread; NTSTATUS Status; @@ -1809,24 +1809,28 @@ MapHeap = (PsGetCurrentProcess() != PsInitialSystemProcess); W32Thread = PsGetCurrentThreadWin32Thread();
- /* Validate the new desktop. */ - Status = IntValidateDesktopHandle( - hDesktop, - UserMode, - 0, - &DesktopObject); - - if (!NT_SUCCESS(Status)) + if(hDesktop != NULL) { - DPRINT("Validation of desktop handle (0x%X) failed\n", hDesktop); - return FALSE; - } - - if (W32Thread->rpdesk == DesktopObject) - { - /* Nothing to do */ - ObDereferenceObject(DesktopObject); - return TRUE; + /* Validate the new desktop. */ + Status = IntValidateDesktopHandle( + hDesktop, + UserMode, + 0, + &DesktopObject); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("Validation of desktop handle (0x%X) failed\n", hDesktop); + return FALSE; + } + + if (W32Thread->rpdesk == DesktopObject) + { + /* Nothing to do */ + ObDereferenceObject(DesktopObject); + return TRUE; + } + }
if (!IsListEmpty(&W32Thread->WindowListHead))