[WIN32K]
[reactos.git] / reactos / win32ss / user / ntuser / ntuser.c
index 754b97a..d86e563 100644 (file)
@@ -1,4 +1,4 @@
-ATOM AtomQOS;/*
+/*
  *  COPYRIGHT:        See COPYING in the top level directory
  *  PROJECT:          ReactOS kernel
  *  PURPOSE:          ntuser init. and main funcs.
@@ -14,6 +14,7 @@ BOOL FASTCALL RegisterControlAtoms(VOID);
 
 PTHREADINFO gptiCurrent = NULL;
 PPROCESSINFO gppiInputProvider = NULL;
+BOOL g_AlwaysDisplayVersion = FALSE;
 ERESOURCE UserLock;
 ATOM AtomMessage;       // Window Message atom.
 ATOM AtomWndObj;        // Window Object atom.
@@ -76,6 +77,7 @@ NTAPI
 InitUserImpl(VOID)
 {
     NTSTATUS Status;
+    HKEY hKey;
 
     ExInitializeResourceLite(&UserLock);
 
@@ -94,6 +96,16 @@ InitUserImpl(VOID)
 
     InitUserAtoms();
 
+    Status = RegOpenKey(L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows",
+                        &hKey);
+    if (NT_SUCCESS(Status))
+    {
+        DWORD dwValue = 0;
+        RegReadDWORD(hKey, L"DisplayVersion", &dwValue);
+        g_AlwaysDisplayVersion = !!dwValue;
+        ZwClose(hKey);
+    }
+
     InitSysParams();
 
     return STATUS_SUCCESS;
@@ -113,8 +125,9 @@ UserInitialize(VOID)
     HBITMAP hPattern55AABitmap = NULL;
     NTSTATUS Status;
 
-// Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
-// Create Event for Diconnect Desktop.
+    NT_ASSERT(PsGetCurrentThreadWin32Thread() != NULL);
+
+// Create Event for Disconnect Desktop.
 
     Status = UserCreateWinstaDirectory();
     if (!NT_SUCCESS(Status)) return Status;
@@ -129,14 +142,7 @@ UserInitialize(VOID)
 //     Update Shared Device Caps.
 //     Initialize User Screen.
 // }
-// Create ThreadInfo for this Thread!
-// {
 
-    /* Initialize the current thread */
-    Status = InitThreadCallback(PsGetCurrentThread());
-    if (!NT_SUCCESS(Status)) return Status;
-
-// }
 // Set Global SERVERINFO Error flags.
 // Load Resources.
 
@@ -145,9 +151,13 @@ UserInitialize(VOID)
     if (gpsi->hbrGray == NULL)
     {
         hPattern55AABitmap = GreCreateBitmap(8, 8, 1, 1, (LPBYTE)wPattern55AA);
+        if (hPattern55AABitmap == NULL)
+            return STATUS_INSUFFICIENT_RESOURCES;
+
         gpsi->hbrGray = IntGdiCreatePatternBrush(hPattern55AABitmap);
-        GreDeleteObject(hPattern55AABitmap);
-        GreSetBrushOwner(gpsi->hbrGray, GDI_OBJ_HMGR_PUBLIC);
+
+        if (gpsi->hbrGray == NULL)
+            return STATUS_INSUFFICIENT_RESOURCES;
     }
 
     return STATUS_SUCCESS;