[ros-diffs] [hpoussin] 28244: Replace a call to undocumented function CreateUserProfile by its documented equivalent (LogonUser + LoadUserProfile) In all cases, this code should be removed once NtUnloadKey is implemented Add a message to remind when to remove this hack

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Wed Aug 8 15:44:03 CEST 2007


Author: hpoussin
Date: Wed Aug  8 17:44:03 2007
New Revision: 28244

URL: http://svn.reactos.org/svn/reactos?rev=28244&view=rev
Log:
Replace a call to undocumented function CreateUserProfile by its documented equivalent (LogonUser + LoadUserProfile)
In all cases, this code should be removed once NtUnloadKey is implemented
Add a message to remind when to remove this hack

Modified:
    trunk/reactos/dll/win32/syssetup/install.c

Modified: trunk/reactos/dll/win32/syssetup/install.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/install.c?rev=28244&r1=28243&r2=28244&view=diff
==============================================================================
--- trunk/reactos/dll/win32/syssetup/install.c (original)
+++ trunk/reactos/dll/win32/syssetup/install.c Wed Aug  8 17:44:03 2007
@@ -722,17 +722,38 @@
         }
     }
 
-    /* Create the Administrator profile */
-    if (!CreateUserProfileW(AdminSid, L"Administrator"))
-    {
-        DebugPrint("CreateUserProfileW() failed!");
-        RtlFreeSid(AdminSid);
-        RtlFreeSid(DomainSid);
-        return 0;
-    }
-
     RtlFreeSid(AdminSid);
     RtlFreeSid(DomainSid);
+
+    /* ROS HACK, as long as NtUnloadKey is not implemented */
+    {
+        NTSTATUS Status = NtUnloadKey(NULL);
+        if (Status == STATUS_NOT_IMPLEMENTED)
+        {
+            /* Create the Administrator profile */
+            PROFILEINFOW ProfileInfo;
+            HANDLE hToken;
+            BOOL ret;
+#define LOGON32_LOGON_NETWORK 3
+            ret = LogonUserW(L"Administrator", L"", L"", LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken);
+            if (!ret)
+            {
+                DebugPrint("LogonUserW() failed!");
+                return 0;
+            }
+            ZeroMemory(&ProfileInfo, sizeof(PROFILEINFOW));
+            ProfileInfo.dwSize = sizeof(PROFILEINFOW);
+            ProfileInfo.lpUserName = L"Administrator";
+            ProfileInfo.dwFlags = PI_NOUI;
+            LoadUserProfileW(hToken, &ProfileInfo);
+            CloseHandle(hToken);
+        }
+        else
+        {
+            DPRINT1("ROS HACK not needed anymore. Please remove it\n");
+        }
+    }
+    /* END OF ROS HACK */
 
     CreateTempDir(L"TEMP");
     CreateTempDir(L"TMP");




More information about the Ros-diffs mailing list