Close the desktop handle after getting the object pointer.
Modified: trunk/reactos/subsys/win32k/main/dllmain.c

Modified: trunk/reactos/subsys/win32k/main/dllmain.c
--- trunk/reactos/subsys/win32k/main/dllmain.c	2005-04-09 13:48:31 UTC (rev 14562)
+++ trunk/reactos/subsys/win32k/main/dllmain.c	2005-04-09 17:10:25 UTC (rev 14563)
@@ -195,23 +195,22 @@
           }
         }
 
-        Win32Thread->hDesktop = hDesk;
-
-        Status = ObReferenceObjectByHandle(hDesk,
-                 0,
-                 ExDesktopObjectType,
-                 KernelMode,
-                 (PVOID*)&Win32Thread->Desktop,
-                 NULL);
-
-        if(!NT_SUCCESS(Status))
+        if (hDesk != NULL)
         {
-          DPRINT1("Unable to reference thread desktop handle 0x%x\n", hDesk);
-          Win32Thread->Desktop = NULL;
+          Status = ObReferenceObjectByHandle(hDesk,
+                                             0,
+                                             ExDesktopObjectType,
+                                             KernelMode,
+                                             (PVOID*)&Win32Thread->Desktop,
+                                             NULL);
           NtClose(hDesk);
+          if(!NT_SUCCESS(Status))
+          {
+            DPRINT1("Unable to reference thread desktop handle 0x%x\n", hDesk);
+            Win32Thread->Desktop = NULL;
+          }
         }
       }
-
       Win32Thread->IsExiting = FALSE;
       IntDestroyCaret(Win32Thread);
       Win32Thread->MessageQueue = MsqCreateMessageQueue(Thread);