[BASESRV]

- Remove the unneeded CallProcessCreated function since the same functionality is programmed and executed in CSRSRV when CsrInsertProcess is called via a call of CsrCreateProcess.
- Remove some hacks in process creation.
- In BaseSrvExitProcess, use the 'Reply = 2' value instead of the old hack 'ApiMessage->ApiNumber = 0xBABE'.

[USER32/WINSRV]
- Make SetLogonNotifyWindow call our 'RosSetLogonNotifyWindow' hack and explicitely mark it as a hack.
- CsrSetLogonNotifyWindow --> RosSetLogonNotifyWindow to emphasize that it is a ReactOS-specific hack.

svn path=/branches/ros-csrss/; revision=57694
This commit is contained in:
Hermès Bélusca-Maïto 2012-11-09 23:39:45 +00:00
parent f77f05cd9d
commit cbc3e80b5a
6 changed files with 35 additions and 63 deletions

View file

@ -33,6 +33,9 @@ typedef enum _USERSRV_API_NUMBER
// UserpConsoleHandleOperation, // Added in Win7
// UserpGetSetShutdownBlockReason, // Added in Vista
/// HACK: ReactOS-specific
UserpRosSetLogonNotifyWindow,
UserpMaxApiNumber
} USERSRV_API_NUMBER, *PUSERSRV_API_NUMBER;
@ -54,6 +57,7 @@ typedef struct
BOOL Register;
} CSRSS_REGISTER_LOGON_PROCESS, *PCSRSS_REGISTER_LOGON_PROCESS;
/// HACK: ReactOS-specific
typedef struct
{
HWND LogonNotifyWindow;
@ -73,6 +77,8 @@ typedef struct _USER_API_MESSAGE
CSRSS_EXIT_REACTOS ExitReactosRequest;
CSRSS_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest;
CSRSS_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest;
/// HACK: ReactOS-specific
CSRSS_SET_LOGON_NOTIFY_WINDOW SetLogonNotifyWindowRequest;
} Data;
} USER_API_MESSAGE, *PUSER_API_MESSAGE;

View file

@ -11,45 +11,14 @@
#define NDEBUG
#include <debug.h>
// extern NTSTATUS CallProcessCreated(PCSR_PROCESS, PCSR_PROCESS); // TODO: Import it from csrsrv/init.c
// Remove it and correct csrsrv instead...
#if 0
NTSTATUS
CallProcessCreated(IN PCSR_PROCESS SourceProcessData,
IN PCSR_PROCESS TargetProcessData)
{
NTSTATUS Status = STATUS_SUCCESS;
ULONG i;
PCSR_SERVER_DLL ServerDll;
DPRINT("CSR: %s called\n", __FUNCTION__);
/* Notify the Server DLLs */
for (i = 0; i < CSR_SERVER_DLL_MAX; i++)
{
/* Get the current Server DLL */
ServerDll = CsrLoadedServerDll[i];
/* Make sure it's valid and that it has callback */
if ((ServerDll) && (ServerDll->NewProcessCallback))
{
Status = ServerDll->NewProcessCallback(SourceProcessData, TargetProcessData);
}
}
return Status;
}
#endif
CSR_API(BaseSrvCreateProcess)
{
NTSTATUS Status;
PBASE_CREATE_PROCESS CreateProcessRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.CreateProcessRequest;
HANDLE ProcessHandle, ThreadHandle;
PCSR_THREAD CsrThread;
PCSR_PROCESS Process; // , NewProcess;
ULONG /* Flags, */ VdmPower = 0, DebugFlags = 0;
PCSR_PROCESS Process;
ULONG Flags = 0, VdmPower = 0, DebugFlags = 0;
/* Get the current client thread */
CsrThread = CsrGetClientThread();
@ -58,7 +27,7 @@ CSR_API(BaseSrvCreateProcess)
Process = CsrThread->Process;
/* Extract the flags out of the process handle */
// Flags = (ULONG_PTR)CreateProcessRequest->ProcessHandle & 3;
Flags = (ULONG_PTR)CreateProcessRequest->ProcessHandle & 3;
CreateProcessRequest->ProcessHandle = (HANDLE)((ULONG_PTR)CreateProcessRequest->ProcessHandle & ~3);
/* Duplicate the process handle */
@ -107,7 +76,7 @@ CSR_API(BaseSrvCreateProcess)
}
}
/* Convert some flags. FIXME: More need conversion */
/* Flags conversion. FIXME: More need conversion */
if (CreateProcessRequest->CreationFlags & CREATE_NEW_PROCESS_GROUP)
{
DebugFlags |= CsrProcessCreateNewGroup;
@ -139,20 +108,6 @@ CSR_API(BaseSrvCreateProcess)
/* FIXME: VDM vodoo */
/* ReactOS Compatibility */
#if 0
Status = CsrLockProcessByClientId(CreateProcessRequest->ClientId.UniqueProcess, &NewProcess);
ASSERT(Status == STATUS_SUCCESS);
if (!(CreateProcessRequest->CreationFlags & (CREATE_NEW_CONSOLE | DETACHED_PROCESS)))
{
NewProcess->ParentConsole = Process->Console;
NewProcess->bInheritHandles = CreateProcessRequest->bInheritHandles;
}
RtlInitializeCriticalSection(&NewProcess->HandleTableLock);
CallProcessCreated(Process, NewProcess);
CsrUnlockProcess(NewProcess);
#endif
/* Return the result of this operation */
return Status;
}
@ -206,7 +161,8 @@ CSR_API(BaseSrvCreateThread)
/* Call CSRSRV to tell it about the new thread */
Status = CsrCreateThread(CsrProcess,
ThreadHandle,
&CreateThreadRequest->ClientId);
&CreateThreadRequest->ClientId,
TRUE);
}
/* Unlock the process and return */
@ -232,8 +188,8 @@ CSR_API(BaseSrvExitProcess)
PCSR_THREAD CsrThread = CsrGetClientThread();
ASSERT(CsrThread != NULL);
/* Set magic flag so we don't reply this message back */
ApiMessage->ApiNumber = 0xBABE;
/* Set the special reply value so we don't reply this message back */
*Reply = 2;
/* Remove the CSR_THREADs and CSR_PROCESS */
return CsrDestroyProcess(&CsrThread->ClientId,

View file

@ -74,26 +74,25 @@ BOOL
WINAPI
SetLogonNotifyWindow(HWND Wnd, HWINSTA WinSta)
{
#if 0
/// HACK: Windows does not do this !! ReactOS-specific
/* Maybe we should call NtUserSetLogonNotifyWindow and let that one inform CSRSS??? */
CSR_API_MESSAGE Request;
USER_API_MESSAGE Request;
NTSTATUS Status;
Request.Data.SetLogonNotifyWindowRequest.LogonNotifyWindow = Wnd;
Status = CsrClientCallServer(&Request,
Status = CsrClientCallServer((PCSR_API_MESSAGE)&Request,
NULL,
CSR_CREATE_API_NUMBER(CSR_GUI, SET_LOGON_NOTIFY_WINDOW),
sizeof(CSR_API_MESSAGE));
CSR_CREATE_API_NUMBER(USERSRV_SERVERDLL_INDEX, UserpRosSetLogonNotifyWindow),
sizeof(CSRSS_SET_LOGON_NOTIFY_WINDOW));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
{
SetLastError(RtlNtStatusToDosError(Status));
return FALSE;
}
/// END HACK
return NtUserSetLogonNotifyWindow(Wnd);
#endif
return TRUE;
}
/*

View file

@ -40,6 +40,9 @@ PCSR_API_ROUTINE UserServerApiDispatchTable[UserpMaxApiNumber] =
// SrvCancelShutdown, // Added in Vista
// SrvConsoleHandleOperation, // Added in Win7
// SrvGetSetShutdownBlockReason, // Added in Vista
/// HACK: ReactOS-specific
RosSetLogonNotifyWindow
};
BOOLEAN UserServerApiServerValidTable[UserpMaxApiNumber] =
@ -58,6 +61,9 @@ BOOLEAN UserServerApiServerValidTable[UserpMaxApiNumber] =
// FALSE, // SrvConsoleHandleOperation
// FALSE, // SrvGetSetShutdownBlockReason
/// HACK: ReactOS-specific
FALSE, // RosSetLogonNotifyWindow
// FALSE
};
@ -77,6 +83,9 @@ PCHAR UserServerApiNameTable[UserpMaxApiNumber] =
// "SrvConsoleHandleOperation",
// "SrvGetSetShutdownBlockReason",
/// HACK: ReactOS-specific
"RosSetLogonNotifyWindow",
// NULL
};

View file

@ -56,7 +56,8 @@ CSR_API(SrvRegisterLogonProcess)
return STATUS_SUCCESS;
}
CSR_API(CsrSetLogonNotifyWindow)
/// HACK: ReactOS-specific
CSR_API(RosSetLogonNotifyWindow)
{
PCSRSS_SET_LOGON_NOTIFY_WINDOW SetLogonNotifyWindowRequest = &((PUSER_API_MESSAGE)ApiMessage)->Data.SetLogonNotifyWindowRequest;
DWORD WindowCreator;

View file

@ -53,11 +53,12 @@ Win32CsrHardError(IN PCSR_THREAD ThreadData,
/* shutdown.c */
CSR_API(SrvExitWindowsEx);
CSR_API(CsrSetLogonNotifyWindow);
CSR_API(SrvRegisterLogonProcess);
// CSR_API(CsrRegisterSystemClasses);
CSR_API(SrvRegisterServicesProcess);
CSR_API(SrvRegisterLogonProcess);
/// HACK: ReactOS-specific
CSR_API(RosSetLogonNotifyWindow);
/*****************************