From 345573150366446c5e16d05df51e7915024062dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Fri, 4 Aug 2006 15:39:44 +0000 Subject: [PATCH] Try to implement a working shutdown. Sorry, I had to disable some code to close user processes in subsystems/win32/csrss/win32csr/exitros.c svn path=/trunk/; revision=23445 --- reactos/base/system/winlogon/sas.c | 14 ++++++++++++++ reactos/dll/win32/shell32/dialogs.c | 2 +- reactos/subsystems/win32/csrss/win32csr/exitros.c | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/reactos/base/system/winlogon/sas.c b/reactos/base/system/winlogon/sas.c index 8b4662b129c..d4c977a04af 100644 --- a/reactos/base/system/winlogon/sas.c +++ b/reactos/base/system/winlogon/sas.c @@ -273,6 +273,20 @@ LogoffShutdownThread(LPVOID Parameter) } RevertToSelf(); + /* This is not right (see top of reactos/dll/win32/user32/misc/exit.c), + * but this should be enough atm */ + switch (LSData->Flags & EWX_ACTION_MASK) + { + case EWX_SHUTDOWN: + NtShutdownSystem(ShutdownNoReboot); + break; + case EWX_REBOOT: + NtShutdownSystem(ShutdownReboot); + break; + default: + UNIMPLEMENTED; + } + HeapFree(GetProcessHeap(), 0, LSData); return 1; diff --git a/reactos/dll/win32/shell32/dialogs.c b/reactos/dll/win32/shell32/dialogs.c index d9363b36e42..88c2e47cc73 100644 --- a/reactos/dll/win32/shell32/dialogs.c +++ b/reactos/dll/win32/shell32/dialogs.c @@ -418,7 +418,7 @@ int WINAPI RestartDialogEx(HWND hWndOwner, LPCWSTR lpwstrReason, DWORD uFlags, D int WINAPI LogoffWindowsDialog(DWORD uFlags) { ERR("LogoffWindowsDialog is UNIMPLEMENTED\n"); - ExitProcess(0); + ExitWindowsEx(EWX_LOGOFF, 0); return 0; } diff --git a/reactos/subsystems/win32/csrss/win32csr/exitros.c b/reactos/subsystems/win32/csrss/win32csr/exitros.c index cc6f08b64f4..07e419623a3 100644 --- a/reactos/subsystems/win32/csrss/win32csr/exitros.c +++ b/reactos/subsystems/win32/csrss/win32csr/exitros.c @@ -783,6 +783,9 @@ InternalExitReactos(DWORD ProcessId, DWORD ThreadId, UINT Flags) return STATUS_ACCESS_DENIED; } + DPRINT1("FIXME: Need to close all user processes!\n"); + return STATUS_SUCCESS; + CallerThread = OpenThread(THREAD_QUERY_INFORMATION, FALSE, ThreadId); if (NULL == CallerThread) {