Author: hbelusca Date: Fri Nov 28 23:42:40 2014 New Revision: 65521
URL: http://svn.reactos.org/svn/reactos?rev=65521&view=rev Log: [USER32] - Move to an appropriate file, and correctly implement (i.e. via CSR call to USERSRV) EndTask. [USERSRV] - Hackplement SrvEndTask using our old code.
Part 4/X
CORE-8322
Modified: trunk/reactos/include/reactos/subsys/win/winmsg.h trunk/reactos/win32ss/user/user32/misc/exit.c trunk/reactos/win32ss/user/user32/misc/misc.c trunk/reactos/win32ss/user/winsrv/usersrv/shutdown.c
Modified: trunk/reactos/include/reactos/subsys/win/winmsg.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/subsys/win/... ============================================================================== --- trunk/reactos/include/reactos/subsys/win/winmsg.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/subsys/win/winmsg.h [iso-8859-1] Fri Nov 28 23:42:40 2014 @@ -42,6 +42,14 @@ DWORD Reserved; } USER_EXIT_REACTOS, *PUSER_EXIT_REACTOS;
+typedef struct _USER_END_TASK +{ + DWORD LastError; + HWND WndHandle; + BOOL Force; + BOOL Success; +} USER_END_TASK, *PUSER_END_TASK; + typedef struct _USER_GET_THREAD_CONSOLE_DESKTOP { ULONG_PTR ThreadId; @@ -71,6 +79,7 @@ union { USER_EXIT_REACTOS ExitReactosRequest; + USER_END_TASK EndTaskRequest; USER_GET_THREAD_CONSOLE_DESKTOP GetThreadConsoleDesktopRequest; USER_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest; USER_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest;
Modified: trunk/reactos/win32ss/user/user32/misc/exit.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/user32/misc/ex... ============================================================================== --- trunk/reactos/win32ss/user/user32/misc/exit.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/user32/misc/exit.c [iso-8859-1] Fri Nov 28 23:42:40 2014 @@ -86,4 +86,38 @@ return TRUE; }
+/* + * @implemented + */ +BOOL +WINAPI +EndTask(HWND hWnd, + BOOL fShutDown, + BOOL fForce) +{ + USER_API_MESSAGE ApiMessage; + PUSER_END_TASK EndTaskRequest = &ApiMessage.Data.EndTaskRequest; + + UNREFERENCED_PARAMETER(fShutDown); + + // EndTaskRequest->LastError = ERROR_SUCCESS; + EndTaskRequest->WndHandle = hWnd; + EndTaskRequest->Force = fForce; + + CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, + NULL, + CSR_CREATE_API_NUMBER(USERSRV_SERVERDLL_INDEX, UserpEndTask), + sizeof(*EndTaskRequest)); + if (!NT_SUCCESS(ApiMessage.Status)) + { + UserSetLastNTError(ApiMessage.Status); + return FALSE; + } + + if (EndTaskRequest->LastError != ERROR_SUCCESS) + UserSetLastError(EndTaskRequest->LastError); + + return EndTaskRequest->Success; +} + /* EOF */
Modified: trunk/reactos/win32ss/user/user32/misc/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/user32/misc/mi... ============================================================================== --- trunk/reactos/win32ss/user/user32/misc/misc.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/user32/misc/misc.c [iso-8859-1] Fri Nov 28 23:42:40 2014 @@ -150,29 +150,6 @@ dwWin32Error = RtlNtStatusToDosError( Status ); NtCurrentTeb()->LastErrorValue = dwWin32Error; return FALSE; - } - - return TRUE; -} - -/* - * @implemented - */ -BOOL -WINAPI -EndTask( - HWND hWnd, - BOOL fShutDown, - BOOL fForce) -{ - SendMessageW(hWnd, WM_CLOSE, 0, 0); - - if (IsWindow(hWnd)) - { - if (fForce) - return DestroyWindow(hWnd); - else - return FALSE; }
return TRUE;
Modified: trunk/reactos/win32ss/user/winsrv/usersrv/shutdown.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/usersrv... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/usersrv/shutdown.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/usersrv/shutdown.c [iso-8859-1] Fri Nov 28 23:42:40 2014 @@ -940,20 +940,45 @@
CSR_API(SrvEndTask) { + PUSER_END_TASK EndTaskRequest = &((PUSER_API_MESSAGE)ApiMessage)->Data.EndTaskRequest; + + // FIXME: This is HACK-plemented!! + DPRINT1("SrvEndTask is HACKPLEMENTED!!\n"); + + SendMessageW(EndTaskRequest->WndHandle, WM_CLOSE, 0, 0); + // PostMessageW(EndTaskRequest->WndHandle, WM_CLOSE, 0, 0); + + if (IsWindow(EndTaskRequest->WndHandle)) + { + if (EndTaskRequest->Force) + { + EndTaskRequest->Success = DestroyWindow(EndTaskRequest->WndHandle); + EndTaskRequest->LastError = GetLastError(); + } + else + { + EndTaskRequest->Success = FALSE; + } + } + else + { + EndTaskRequest->LastError = ERROR_SUCCESS; + EndTaskRequest->Success = TRUE; + } + + return STATUS_SUCCESS; +} + +CSR_API(SrvLogon) +{ DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvLogon) +CSR_API(SrvRecordShutdownReason) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvRecordShutdownReason) -{ - DPRINT1("%s not yet implemented\n", __FUNCTION__); - return STATUS_NOT_IMPLEMENTED; -} - /* EOF */