mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 08:25:53 +00:00
[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 svn path=/trunk/; revision=65521
This commit is contained in:
parent
725057bae3
commit
b085d814b6
|
@ -42,6 +42,14 @@ typedef struct _USER_EXIT_REACTOS
|
|||
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 @@ typedef struct _USER_API_MESSAGE
|
|||
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;
|
||||
|
|
|
@ -86,4 +86,38 @@ ExitWindowsEx(UINT uFlags,
|
|||
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 */
|
||||
|
|
|
@ -155,29 +155,6 @@ NTSTATUS Status;
|
|||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
|
|
@ -940,8 +940,33 @@ CSR_API(SrvExitWindowsEx)
|
|||
|
||||
CSR_API(SrvEndTask)
|
||||
{
|
||||
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue