[WINLOGON] When starting Setup (which runs with SYSTEM credentials), explicitly speci...
[reactos.git] / base / system / winlogon / setup.c
index 7cec968..f5ef367 100644 (file)
@@ -96,7 +96,7 @@ RunSetupThreadProc(
 
     /* Expand string (if applicable) */
     if (dwType == REG_EXPAND_SZ)
 
     /* Expand string (if applicable) */
     if (dwType == REG_EXPAND_SZ)
-        ExpandEnvironmentStringsW(Shell, CommandLine, MAX_PATH);
+        ExpandEnvironmentStringsW(Shell, CommandLine, ARRAYSIZE(CommandLine));
     else if (dwType == REG_SZ)
         wcscpy(CommandLine, Shell);
     else
     else if (dwType == REG_SZ)
         wcscpy(CommandLine, Shell);
     else
@@ -104,10 +104,12 @@ RunSetupThreadProc(
 
     TRACE("Should run '%s' now\n", debugstr_w(CommandLine));
 
 
     TRACE("Should run '%s' now\n", debugstr_w(CommandLine));
 
+    SwitchDesktop(WLSession->ApplicationDesktop);
+
     /* Start process */
     StartupInfo.cb = sizeof(StartupInfo);
     StartupInfo.lpReserved = NULL;
     /* Start process */
     StartupInfo.cb = sizeof(StartupInfo);
     StartupInfo.lpReserved = NULL;
-    StartupInfo.lpDesktop = NULL;
+    StartupInfo.lpDesktop = L"WinSta0\\Default";
     StartupInfo.lpTitle = NULL;
     StartupInfo.dwFlags = 0;
     StartupInfo.cbReserved2 = 0;
     StartupInfo.lpTitle = NULL;
     StartupInfo.dwFlags = 0;
     StartupInfo.cbReserved2 = 0;
@@ -126,6 +128,7 @@ RunSetupThreadProc(
     if (!Result)
     {
         TRACE("Failed to run setup process\n");
     if (!Result)
     {
         TRACE("Failed to run setup process\n");
+        SwitchDesktop(WLSession->WinlogonDesktop);
         return FALSE;
     }
 
         return FALSE;
     }
 
@@ -138,6 +141,8 @@ RunSetupThreadProc(
     CloseHandle(ProcessInformation.hThread);
     CloseHandle(ProcessInformation.hProcess);
 
     CloseHandle(ProcessInformation.hThread);
     CloseHandle(ProcessInformation.hProcess);
 
+    SwitchDesktop(WLSession->WinlogonDesktop);
+
     TRACE ("RunSetup() done\n");
 
     return TRUE;
     TRACE ("RunSetup() done\n");
 
     return TRUE;