https://git.reactos.org/?p=reactos.git;a=commitdiff;h=bcec1fd6c37677d46d6890...
commit bcec1fd6c37677d46d6890d270bb1e27d17f8f34 Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Tue Jul 17 01:49:07 2018 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Tue Jul 17 01:59:51 2018 +0200
[WINLOGON] When starting Setup (which runs with SYSTEM credentials), explicitly specify on which window station and desktop we start it, so as to avoid the default choice of the non-interactive Service-0x0-3e7$ window station. Also, switch to the WinSta0\Default desktop just only before starting Setup, and restore Winlogon setup when it finishes. --- base/system/winlogon/setup.c | 9 +++++++-- base/system/winlogon/winlogon.c | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/base/system/winlogon/setup.c b/base/system/winlogon/setup.c index 7cec968e0e..f5ef367318 100644 --- a/base/system/winlogon/setup.c +++ b/base/system/winlogon/setup.c @@ -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; diff --git a/base/system/winlogon/winlogon.c b/base/system/winlogon/winlogon.c index 2b2e5303f6..eeba3a2334 100644 --- a/base/system/winlogon/winlogon.c +++ b/base/system/winlogon/winlogon.c @@ -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");