mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 01:13:38 +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;
|
DWORD Reserved;
|
||||||
} USER_EXIT_REACTOS, *PUSER_EXIT_REACTOS;
|
} 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
|
typedef struct _USER_GET_THREAD_CONSOLE_DESKTOP
|
||||||
{
|
{
|
||||||
ULONG_PTR ThreadId;
|
ULONG_PTR ThreadId;
|
||||||
|
@ -71,6 +79,7 @@ typedef struct _USER_API_MESSAGE
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
USER_EXIT_REACTOS ExitReactosRequest;
|
USER_EXIT_REACTOS ExitReactosRequest;
|
||||||
|
USER_END_TASK EndTaskRequest;
|
||||||
USER_GET_THREAD_CONSOLE_DESKTOP GetThreadConsoleDesktopRequest;
|
USER_GET_THREAD_CONSOLE_DESKTOP GetThreadConsoleDesktopRequest;
|
||||||
USER_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest;
|
USER_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest;
|
||||||
USER_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest;
|
USER_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest;
|
||||||
|
|
|
@ -86,4 +86,38 @@ ExitWindowsEx(UINT uFlags,
|
||||||
return TRUE;
|
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 */
|
/* EOF */
|
||||||
|
|
|
@ -155,29 +155,6 @@ NTSTATUS Status;
|
||||||
return TRUE;
|
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
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -940,8 +940,33 @@ CSR_API(SrvExitWindowsEx)
|
||||||
|
|
||||||
CSR_API(SrvEndTask)
|
CSR_API(SrvEndTask)
|
||||||
{
|
{
|
||||||
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
PUSER_END_TASK EndTaskRequest = &((PUSER_API_MESSAGE)ApiMessage)->Data.EndTaskRequest;
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
|
||||||
|
// 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)
|
CSR_API(SrvLogon)
|
||||||
|
|
Loading…
Reference in a new issue