Author: gadamopoulos
Date: Tue Oct 30 16:50:11 2012
New Revision: 57652
URL: 
http://svn.reactos.org/svn/reactos?rev=57652&view=rev
Log:
[win32k]
- Fix the remaining tests that failed in user32:winstation
Modified:
    trunk/reactos/win32ss/user/ntuser/winsta.c
    trunk/reactos/win32ss/user/user32/misc/object.c
Modified: trunk/reactos/win32ss/user/ntuser/winsta.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/winsta…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/winsta.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/winsta.c [iso-8859-1] Tue Oct 30 16:50:11 2012
@@ -526,7 +526,7 @@
        if (hWinSta == UserGetProcessWindowStation())
        {
-        ERR("Attempted to close process window station");
+        ERR("Attempted to close process window station\n");
                return FALSE;
        }
@@ -612,19 +612,13 @@
    /* try windowstation */
    TRACE("Trying to open window station 0x%x\n", hObject);
-   Status = IntValidateWindowStationHandle(
+   Status = ObReferenceObjectByHandle(
                hObject,
+               0,
+               ExWindowStationObjectType,
                UserMode,
-               0,
-               &WinStaObject);
-
-
-   if (!NT_SUCCESS(Status) && Status != STATUS_OBJECT_TYPE_MISMATCH)
-   {
-      TRACE("Failed: 0x%x\n", Status);
-      SetLastNtError(Status);
-      return FALSE;
-   }
+               (PVOID*)&WinStaObject,
+               NULL);
    if (Status == STATUS_OBJECT_TYPE_MISMATCH)
    {
@@ -635,13 +629,15 @@
                   UserMode,
                   0,
                   &DesktopObject);
-      if (!NT_SUCCESS(Status))
-      {
-         TRACE("Failed: 0x%x\n", Status);
-         SetLastNtError(Status);
-         return FALSE;
-      }
-   }
+   }
+
+   if (!NT_SUCCESS(Status))
+   {
+      ERR("Failed: 0x%x\n", Status);
+      SetLastNtError(Status);
+      return FALSE;
+   }
+
    TRACE("WinSta or Desktop opened!!\n");
    /* get data */
@@ -713,8 +709,13 @@
    if (DesktopObject != NULL)
       ObDereferenceObject(DesktopObject);
-   SetLastNtError(Status);
-   return NT_SUCCESS(Status);
+   if (!NT_SUCCESS(Status))
+   {
+      SetLastNtError(Status);
+      return FALSE;
+   }
+
+   return TRUE;
 }
 /*
Modified: trunk/reactos/win32ss/user/user32/misc/object.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/user32/misc/o…
==============================================================================
--- trunk/reactos/win32ss/user/user32/misc/object.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/user32/misc/object.c [iso-8859-1] Tue Oct 30 16:50:11 2012
@@ -48,7 +48,8 @@
   LPDWORD lpnLengthNeeded)
 {
   LPWSTR buffer;
-  BOOL ret = TRUE;
+  BOOL ret = FALSE;
+  DWORD LengthNeeded;
   TRACE("GetUserObjectInformationA(%x %d %x %d %x)\n", hObj, nIndex,
          pvInfo, nLength, lpnLengthNeeded);
@@ -65,17 +66,16 @@
   }
   /* get unicode string */
-  if (!GetUserObjectInformationW(hObj, nIndex, buffer, nLength*2, lpnLengthNeeded))
-    ret = FALSE;
-  *lpnLengthNeeded /= 2;
-
-  if (ret)
+  if (GetUserObjectInformationW(hObj, nIndex, buffer, nLength*2, lpnLengthNeeded))
   {
     /* convert string */
-    if (WideCharToMultiByte(CP_THREAD_ACP, 0, buffer, -1,
-                            pvInfo, nLength, NULL, NULL) == 0)
+    LengthNeeded = WideCharToMultiByte(CP_THREAD_ACP, 0, buffer, -1,
+                                       pvInfo, nLength, NULL, NULL);
+
+    if (LengthNeeded != 0)
     {
-      ret = FALSE;
+        *lpnLengthNeeded = LengthNeeded;
+        ret = TRUE;
     }
   }