- Fix disconnecting from a desktop when IntSetThreadDesktop gets NULL parameter

svn path=/trunk/; revision=51101
This commit is contained in:
Giannis Adamopoulos 2011-03-20 14:28:12 +00:00
parent 5177b0a967
commit 508ce4d9f8

View file

@ -1798,7 +1798,7 @@ BOOL
IntSetThreadDesktop(IN HDESK hDesktop, IntSetThreadDesktop(IN HDESK hDesktop,
IN BOOL FreeOnFailure) IN BOOL FreeOnFailure)
{ {
PDESKTOP DesktopObject, OldDesktop; PDESKTOP DesktopObject = NULL, OldDesktop;
HDESK hOldDesktop; HDESK hOldDesktop;
PTHREADINFO W32Thread; PTHREADINFO W32Thread;
NTSTATUS Status; NTSTATUS Status;
@ -1809,24 +1809,28 @@ IntSetThreadDesktop(IN HDESK hDesktop,
MapHeap = (PsGetCurrentProcess() != PsInitialSystemProcess); MapHeap = (PsGetCurrentProcess() != PsInitialSystemProcess);
W32Thread = PsGetCurrentThreadWin32Thread(); W32Thread = PsGetCurrentThreadWin32Thread();
/* Validate the new desktop. */ if(hDesktop != NULL)
Status = IntValidateDesktopHandle(
hDesktop,
UserMode,
0,
&DesktopObject);
if (!NT_SUCCESS(Status))
{ {
DPRINT("Validation of desktop handle (0x%X) failed\n", hDesktop); /* Validate the new desktop. */
return FALSE; 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 (W32Thread->rpdesk == DesktopObject)
{
/* Nothing to do */
ObDereferenceObject(DesktopObject);
return TRUE;
} }
if (!IsListEmpty(&W32Thread->WindowListHead)) if (!IsListEmpty(&W32Thread->WindowListHead))