Fix code assuming that the Reg* functions set the last error code
[reactos.git] / reactos / lib / userenv / misc.c
index 188a383..c520954 100644 (file)
  * PROGRAMMER:      Eric Kohl
  */
 
-#include "precomp.h"
+#include <precomp.h>
+
+#define NDEBUG
+#include <debug.h>
 
 
 /* FUNCTIONS ***************************************************************/
@@ -51,12 +54,12 @@ BOOL
 GetUserSidFromToken (HANDLE hToken,
                     PUNICODE_STRING SidString)
 {
-  PSID_AND_ATTRIBUTES SidBuffer;
+  PSID_AND_ATTRIBUTES SidBuffer, nsb;
   ULONG Length;
   NTSTATUS Status;
 
   Length = 256;
-  SidBuffer = LocalAlloc (0,
+  SidBuffer = LocalAlloc (LMEM_FIXED,
                          Length);
   if (SidBuffer == NULL)
     return FALSE;
@@ -68,12 +71,16 @@ GetUserSidFromToken (HANDLE hToken,
                                    &Length);
   if (Status == STATUS_BUFFER_TOO_SMALL)
     {
-      SidBuffer = LocalReAlloc (SidBuffer,
-                               Length,
-                               0);
-      if (SidBuffer == NULL)
-       return FALSE;
+      nsb = LocalReAlloc (SidBuffer,
+                          Length,
+                          LMEM_MOVEABLE);
+      if (nsb == NULL)
+        {
+          LocalFree((HLOCAL)SidBuffer);
+          return FALSE;
+        }
 
+      SidBuffer = nsb;
       Status = NtQueryInformationToken (hToken,
                                        TokenUser,
                                        (PVOID)SidBuffer,
@@ -83,7 +90,8 @@ GetUserSidFromToken (HANDLE hToken,
 
   if (!NT_SUCCESS (Status))
     {
-      LocalFree (SidBuffer);
+      LocalFree ((HLOCAL)SidBuffer);
+      SetLastError (RtlNtStatusToDosError (Status));
       return FALSE;
     }
 
@@ -93,10 +101,13 @@ GetUserSidFromToken (HANDLE hToken,
                                         SidBuffer[0].Sid,
                                         TRUE);
 
-  LocalFree (SidBuffer);
+  LocalFree ((HLOCAL)SidBuffer);
 
   if (!NT_SUCCESS (Status))
-    return FALSE;
+    {
+      SetLastError (RtlNtStatusToDosError (Status));
+      return FALSE;
+    }
 
   DPRINT ("SidString.Length: %lu\n", SidString->Length);
   DPRINT ("SidString.MaximumLength: %lu\n", SidString->MaximumLength);
@@ -105,10 +116,17 @@ GetUserSidFromToken (HANDLE hToken,
   return TRUE;
 }
 
+PVOID
+CreateDefaultSD(VOID)
+{
+    /* FIXME - create a default security descriptor */
+    return NULL;
+}
+
 /* Dynamic DLL loading interface **********************************************/
 
 /* OLE32.DLL import table */
-DYN_MODULE DynOle32 = 
+DYN_MODULE DynOle32 =
 {
   L"ole32.dll",
   {