Author: hpoussin Date: Fri Aug 3 13:28:01 2007 New Revision: 28116
URL: http://svn.reactos.org/svn/reactos?rev=28116&view=rev Log: Create the invisible SAS window even in setup mode Explicitly reboot at the end of 2nd stage See issue #2431 for more details.
Modified: trunk/reactos/base/system/winlogon/sas.c trunk/reactos/base/system/winlogon/setup.c trunk/reactos/base/system/winlogon/winlogon.c trunk/reactos/dll/win32/syssetup/install.c
Modified: trunk/reactos/base/system/winlogon/sas.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/winlogon/sas.c?... ============================================================================== --- trunk/reactos/base/system/winlogon/sas.c (original) +++ trunk/reactos/base/system/winlogon/sas.c Fri Aug 3 13:28:01 2007 @@ -794,8 +794,13 @@ WNDCLASSEXW swc; BOOL ret = FALSE;
- /* register SAS window class. - * WARNING! MAKE SURE WE ARE IN THE WINLOGON DESKTOP! */ + if (!SwitchDesktop(Session->WinlogonDesktop)) + { + ERR("WL: Failed to switch to winlogon desktop\n"); + goto cleanup; + } + + /* Register SAS window class */ swc.cbSize = sizeof(WNDCLASSEXW); swc.style = CS_SAVEBITS; swc.lpfnWndProc = SASWindowProc; @@ -814,7 +819,7 @@ goto cleanup; }
- /* create invisible SAS window */ + /* Create invisible SAS window */ Session->SASWindow = CreateWindowExW( 0, WINLOGON_SAS_CLASS,
Modified: trunk/reactos/base/system/winlogon/setup.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/winlogon/setup.... ============================================================================== --- trunk/reactos/base/system/winlogon/setup.c (original) +++ trunk/reactos/base/system/winlogon/setup.c Fri Aug 3 13:28:01 2007 @@ -85,8 +85,8 @@ }
-BOOL -RunSetup (VOID) +static DWORD WINAPI +RunSetupThreadProc (IN LPVOID lpParameter) { PROCESS_INFORMATION ProcessInformation; STARTUPINFOW StartupInfo; @@ -184,4 +184,13 @@ }
+BOOL +RunSetup (VOID) +{ + HANDLE hThread; + + hThread = CreateThread(NULL, 0, RunSetupThreadProc, NULL, 0, NULL); + return hThread != NULL; +} + /* EOF */
Modified: trunk/reactos/base/system/winlogon/winlogon.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/winlogon/winlog... ============================================================================== --- trunk/reactos/base/system/winlogon/winlogon.c (original) +++ trunk/reactos/base/system/winlogon/winlogon.c Fri Aug 3 13:28:01 2007 @@ -155,130 +155,6 @@
return TRUE; } - -#if 0 -static BOOL -OpenRegistryKey( - OUT HKEY *WinLogonKey) -{ - return ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, - L"SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon", - 0, - KEY_QUERY_VALUE, - WinLogonKey); -} -#endif - -#if 0 -static BOOL -StartProcess( - IN PWCHAR ValueName) -{ - BOOL StartIt; - HKEY WinLogonKey; - DWORD Type; - DWORD Size; - DWORD StartValue; - - StartIt = TRUE; - if (OpenRegistryKey(&WinLogonKey)) - { - Size = sizeof(DWORD); - if (ERROR_SUCCESS == RegQueryValueEx(WinLogonKey, - ValueName, - NULL, - &Type, - (LPBYTE) &StartValue, - &Size)) - { - if (REG_DWORD == Type) - { - StartIt = (0 != StartValue); - } - } - RegCloseKey(WinLogonKey); - } - - return StartIt; -} -#endif - -/* -static BOOL RestartShell( - IN OUT PWLSESSION Session) -{ - HKEY WinLogonKey; - DWORD Type, Size, Value; - - if(OpenRegistryKey(&WinLogonKey)) - { - Size = sizeof(DWORD); - if(ERROR_SUCCESS == RegQueryValueEx(WinLogonKey, - L"AutoRestartShell", - NULL, - &Type, - (LPBYTE)&Value, - &Size)) - { - if(Type == REG_DWORD) - { - RegCloseKey(WinLogonKey); - return (Value != 0); - } - } - RegCloseKey(WinLogonKey); - } - return FALSE; -} -*/ - -#if 0 -static PWCHAR -GetUserInit( - OUT WCHAR *CommandLine, - IN DWORD BufferLength) -{ - HKEY WinLogonKey; - BOOL GotCommandLine; - DWORD Type; - DWORD Size; - WCHAR Shell[_MAX_PATH]; - - GotCommandLine = FALSE; - if (OpenRegistryKey(&WinLogonKey)) - { - Size = MAX_PATH; - if (ERROR_SUCCESS == RegQueryValueEx(WinLogonKey, - L"UserInit", - NULL, - &Type, - (LPBYTE) Shell, - &Size)) - { - if (REG_EXPAND_SZ == Type) - { - ExpandEnvironmentStrings(Shell, CommandLine, _MAX_PATH); - GotCommandLine = TRUE; - } - else if (REG_SZ == Type) - { - wcscpy(CommandLine, Shell); - GotCommandLine = TRUE; - } - } - RegCloseKey(WinLogonKey); - } - - if (! GotCommandLine) - { - GetSystemDirectory(CommandLine, MAX_PATH - 15); - wcscat(CommandLine, L"\userinit.exe"); - } - - return CommandLine; -} - -#endif
BOOL DisplayStatusMessage( @@ -410,22 +286,6 @@ ExitProcess(1); }
- /* Check for pending setup */ - if (GetSetupType() != 0) - { - TRACE("WL: Setup mode detected\n"); - - /* Set locale */ - SetDefaultLanguage(FALSE); - - /* Run setup and reboot when done */ - SwitchDesktop(WLSession->ApplicationDesktop); - RunSetup(); - - HandleShutdown(WLSession, WLX_SAS_ACTION_SHUTDOWN_REBOOT); - ExitProcess(0); - } - if (!StartLsass()) { ERR("WL: Failed to start lsass.exe service (error %lu)\n", GetLastError()); @@ -489,7 +349,18 @@ /* Display logged out screen */ WLSession->LogonStatus = WKSTA_IS_LOGGED_OFF; RemoveStatusMessage(WLSession); - PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_TIMEOUT, 0); + + /* Check for pending setup */ + if (GetSetupType() != 0) + { + TRACE("WL: Setup mode detected\n"); + + /* Run setup and reboot when done */ + SwitchDesktop(WLSession->ApplicationDesktop); + RunSetup(); + } + else + PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_TIMEOUT, 0);
/* Message loop for the SAS window */ while (GetMessageW(&Msg, WLSession->SASWindow, 0, 0))
Modified: trunk/reactos/dll/win32/syssetup/install.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/install.... ============================================================================== --- trunk/reactos/dll/win32/syssetup/install.c (original) +++ trunk/reactos/dll/win32/syssetup/install.c Fri Aug 3 13:28:01 2007 @@ -570,8 +570,7 @@ if (!res) goto cleanup;
- /* Wait for process termination */ - WaitForSingleObject(ProcessInformation.hProcess, INFINITE); + return 0;
cleanup: MessageBoxA( @@ -728,6 +727,7 @@ /// DO NOT REMOVE!!! DbgPrint("SYSREG_CHECKPOINT:SYSSETUP_COMPLETE\n");
+ ExitWindowsEx(EWX_REBOOT, 0); return 0; }