https://git.reactos.org/?p=reactos.git;a=commitdiff;h=bcec1fd6c37677d46d689…
commit bcec1fd6c37677d46d6890d270bb1e27d17f8f34
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Tue Jul 17 01:49:07 2018 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)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");