- 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:
Hermès Bélusca-Maïto 2014-11-28 23:42:40 +00:00
parent 725057bae3
commit b085d814b6
4 changed files with 70 additions and 25 deletions

View file

@ -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;

View file

@ -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 */

View file

@ -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
*/

View file

@ -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)