[WINLOGON] When starting Setup (which runs with SYSTEM credentials), explicitly speci...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 16 Jul 2018 23:49:07 +0000 (01:49 +0200)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 16 Jul 2018 23:59:51 +0000 (01:59 +0200)
Also, switch to the WinSta0\Default desktop just only before starting Setup, and restore Winlogon setup when it finishes.

base/system/winlogon/setup.c
base/system/winlogon/winlogon.c

index 7cec968..f5ef367 100644 (file)
@@ -96,7 +96,7 @@ RunSetupThreadProc(
 
     /* 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
@@ -104,10 +104,12 @@ RunSetupThreadProc(
 
     TRACE("Should run '%s' now\n", debugstr_w(CommandLine));
 
+    SwitchDesktop(WLSession->ApplicationDesktop);
+
     /* 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;
@@ -126,6 +128,7 @@ RunSetupThreadProc(
     if (!Result)
     {
         TRACE("Failed to run setup process\n");
+        SwitchDesktop(WLSession->WinlogonDesktop);
         return FALSE;
     }
 
@@ -138,6 +141,8 @@ RunSetupThreadProc(
     CloseHandle(ProcessInformation.hThread);
     CloseHandle(ProcessInformation.hProcess);
 
+    SwitchDesktop(WLSession->WinlogonDesktop);
+
     TRACE ("RunSetup() done\n");
 
     return TRUE;
index 2b2e530..eeba3a2 100644 (file)
@@ -453,14 +453,14 @@ WinMain(
     /* Check for pending setup */
     if (GetSetupType() != 0)
     {
-        TRACE("WL: Setup mode detected\n");
-
         /* Run setup and reboot when done */
-        SwitchDesktop(WLSession->ApplicationDesktop);
+        TRACE("WL: Setup mode detected\n");
         RunSetup();
     }
     else
+    {
         PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_CTRL_ALT_DEL, 0);
+    }
 
     (void)LoadLibraryW(L"sfc_os.dll");