From bac6bdb7196698069628375cf25126ffc1096aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 29 Nov 2014 21:19:01 +0000 Subject: [PATCH] [USER32] - On Win2k3, the EXIT_(ROS)_EX csr message has 3 parameters, instead of 2 (as on win2k), and the dwReserved is in fact unused. [USERSRV] - Add CSR shutdown callback UserClientShutdown (stub). [CONSRV|USERSRV] - The CSR shutdown callbacks are just stubs currently. Part 5/X CORE-8322 svn path=/trunk/; revision=65528 --- reactos/include/reactos/subsys/win/winmsg.h | 5 +++-- reactos/win32ss/user/user32/misc/exit.c | 5 +++-- reactos/win32ss/user/winsrv/consrv/shutdown.c | 2 ++ reactos/win32ss/user/winsrv/usersrv/api.h | 12 ++++++++++-- reactos/win32ss/user/winsrv/usersrv/harderror.c | 2 +- reactos/win32ss/user/winsrv/usersrv/init.c | 4 ++-- reactos/win32ss/user/winsrv/usersrv/shutdown.c | 15 +++++++++++++++ 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/reactos/include/reactos/subsys/win/winmsg.h b/reactos/include/reactos/subsys/win/winmsg.h index 1f01da32a30..a2d28b79a33 100644 --- a/reactos/include/reactos/subsys/win/winmsg.h +++ b/reactos/include/reactos/subsys/win/winmsg.h @@ -38,8 +38,9 @@ typedef enum _USERSRV_API_NUMBER typedef struct _USER_EXIT_REACTOS { - UINT Flags; - DWORD Reserved; + DWORD LastError; + UINT Flags; + BOOL Success; } USER_EXIT_REACTOS, *PUSER_EXIT_REACTOS; typedef struct _USER_END_TASK diff --git a/reactos/win32ss/user/user32/misc/exit.c b/reactos/win32ss/user/user32/misc/exit.c index b8f8281f13f..f8502061adf 100644 --- a/reactos/win32ss/user/user32/misc/exit.c +++ b/reactos/win32ss/user/user32/misc/exit.c @@ -60,6 +60,7 @@ * - when every environment subsystem has gone to bed, the SM actually initiates * the kernel and executive shutdown by calling NtShutdownSystem. */ + /* * @implemented */ @@ -71,7 +72,7 @@ ExitWindowsEx(UINT uFlags, USER_API_MESSAGE ApiMessage; ApiMessage.Data.ExitReactosRequest.Flags = uFlags; - ApiMessage.Data.ExitReactosRequest.Reserved = dwReserved; + // ApiMessage.Data.ExitReactosRequest.Reserved = dwReserved; Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, @@ -79,7 +80,7 @@ ExitWindowsEx(UINT uFlags, sizeof(USER_EXIT_REACTOS)); if (!NT_SUCCESS(Status)) { - SetLastError(RtlNtStatusToDosError(Status)); + UserSetLastNTError(Status); return FALSE; } diff --git a/reactos/win32ss/user/winsrv/consrv/shutdown.c b/reactos/win32ss/user/winsrv/consrv/shutdown.c index 4b212452840..83659eb9a65 100644 --- a/reactos/win32ss/user/winsrv/consrv/shutdown.c +++ b/reactos/win32ss/user/winsrv/consrv/shutdown.c @@ -24,6 +24,8 @@ ConsoleClientShutdown(IN PCSR_PROCESS CsrProcess, { PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrProcess); + UNIMPLEMENTED; + if ( ProcessData->ConsoleHandle != NULL || ProcessData->HandleTable != NULL ) { diff --git a/reactos/win32ss/user/winsrv/usersrv/api.h b/reactos/win32ss/user/winsrv/usersrv/api.h index 0692b971a35..add2eb41fb6 100644 --- a/reactos/win32ss/user/winsrv/usersrv/api.h +++ b/reactos/win32ss/user/winsrv/usersrv/api.h @@ -16,14 +16,22 @@ CSR_API(SrvGetThreadConsoleDesktop); CSR_API(SrvDeviceEvent); /* harderror.c */ -VOID WINAPI UserServerHardError(IN PCSR_THREAD ThreadData, - IN PHARDERROR_MSG Message); +VOID +NTAPI +UserServerHardError(IN PCSR_THREAD ThreadData, + IN PHARDERROR_MSG Message); /* register.c */ CSR_API(SrvRegisterServicesProcess); CSR_API(SrvRegisterLogonProcess); /* shutdown.c */ +ULONG +NTAPI +UserClientShutdown(IN PCSR_PROCESS CsrProcess, + IN ULONG Flags, + IN BOOLEAN FirstPhase); + CSR_API(SrvExitWindowsEx); CSR_API(SrvEndTask); CSR_API(SrvLogon); diff --git a/reactos/win32ss/user/winsrv/usersrv/harderror.c b/reactos/win32ss/user/winsrv/usersrv/harderror.c index 705146c0c14..c97871b25ce 100644 --- a/reactos/win32ss/user/winsrv/usersrv/harderror.c +++ b/reactos/win32ss/user/winsrv/usersrv/harderror.c @@ -510,7 +510,7 @@ UserpMessageBox( } VOID -WINAPI +NTAPI UserServerHardError( IN PCSR_THREAD ThreadData, IN PHARDERROR_MSG Message) diff --git a/reactos/win32ss/user/winsrv/usersrv/init.c b/reactos/win32ss/user/winsrv/usersrv/init.c index 4b6939a0bb7..8808d643b42 100644 --- a/reactos/win32ss/user/winsrv/usersrv/init.c +++ b/reactos/win32ss/user/winsrv/usersrv/init.c @@ -151,7 +151,7 @@ CSR_SERVER_DLL_INIT(UserServerDllInitialization) UserServerHeap = RtlGetProcessHeap(); /* Initialize the video */ - NtUserInitialize(0, NULL, NULL); // + NtUserInitialize(0, NULL, NULL); PrivateCsrssManualGuiCheck(0); /* Setup the DLL Object */ @@ -166,7 +166,7 @@ CSR_SERVER_DLL_INIT(UserServerDllInitialization) LoadedServerDll->ConnectCallback = NULL; LoadedServerDll->DisconnectCallback = NULL; LoadedServerDll->HardErrorCallback = UserServerHardError; - LoadedServerDll->ShutdownProcessCallback = NULL; + LoadedServerDll->ShutdownProcessCallback = UserClientShutdown; UserServerDllInstance = LoadedServerDll->ServerHandle; diff --git a/reactos/win32ss/user/winsrv/usersrv/shutdown.c b/reactos/win32ss/user/winsrv/usersrv/shutdown.c index eb3b6600919..423ebdf041d 100644 --- a/reactos/win32ss/user/winsrv/usersrv/shutdown.c +++ b/reactos/win32ss/user/winsrv/usersrv/shutdown.c @@ -919,6 +919,21 @@ UserExitReactos(DWORD UserProcessId, UINT Flags) } +ULONG +NTAPI +UserClientShutdown(IN PCSR_PROCESS CsrProcess, + IN ULONG Flags, + IN BOOLEAN FirstPhase) +{ + DPRINT1("UserClientShutdown(0x%p, 0x%x, %s)\n", + CsrProcess, Flags, FirstPhase ? "FirstPhase" : "LastPhase"); + + UNIMPLEMENTED; + + return CsrShutdownNonCsrProcess; +} + + /* PUBLIC SERVER APIS *********************************************************/ CSR_API(SrvExitWindowsEx)