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