diff --git a/reactos/include/reactos/subsys/win/base.h b/reactos/include/reactos/subsys/win/base.h index 6667bcbe877..0f06dbba8fb 100644 --- a/reactos/include/reactos/subsys/win/base.h +++ b/reactos/include/reactos/subsys/win/base.h @@ -15,11 +15,13 @@ typedef BOOL (CALLBACK *BASE_PROCESS_CREATE_NOTIFY_ROUTINE)( HANDLE NewProcessId, - HANDLE SourceThreadId, - DWORD dwUnknown, - ULONG CreateFlags); + HANDLE ParentThreadId, + ULONG dwUnknown, + ULONG CreateFlags); -NTSTATUS WINAPI BaseSetProcessCreateNotify(BASE_PROCESS_CREATE_NOTIFY_ROUTINE); +VOID +NTAPI +BaseSetProcessCreateNotify(IN BASE_PROCESS_CREATE_NOTIFY_ROUTINE ProcessCreateNotifyProc); typedef struct _NLS_USER_INFO { diff --git a/reactos/subsystems/win/basesrv/proc.c b/reactos/subsystems/win/basesrv/proc.c index 2e9c5aac246..c947451ccc5 100644 --- a/reactos/subsystems/win/basesrv/proc.c +++ b/reactos/subsystems/win/basesrv/proc.c @@ -14,6 +14,11 @@ #define NDEBUG #include +/* GLOBALS ********************************************************************/ + +/* User notification procedure to be called when a process is created */ +static BASE_PROCESS_CREATE_NOTIFY_ROUTINE UserNotifyProcessCreate = NULL; + /* PUBLIC SERVER APIS *********************************************************/ CSR_API(BaseSrvDebugProcess) @@ -167,7 +172,14 @@ CSR_API(BaseSrvCreateProcess) return Status; } - /* FIXME: Should notify user32 */ + /* Call the user notification procedure */ + if (UserNotifyProcessCreate) + { + UserNotifyProcessCreate(CreateProcessRequest->ClientId.UniqueProcess, + Process->ClientId.UniqueThread, + 0, + Flags); + } /* Check if this is a VDM process */ if (CreateProcessRequest->VdmBinaryType) @@ -295,12 +307,12 @@ CSR_API(BaseSrvSetProcessShutdownParam) /* PUBLIC API *****************************************************************/ -NTSTATUS +VOID NTAPI BaseSetProcessCreateNotify(IN BASE_PROCESS_CREATE_NOTIFY_ROUTINE ProcessCreateNotifyProc) { - DPRINT("BASESRV: %s(%08lx) called\n", __FUNCTION__, ProcessCreateNotifyProc); - return STATUS_NOT_IMPLEMENTED; + /* Set the user notification procedure to be called when a process is created */ + UserNotifyProcessCreate = ProcessCreateNotifyProc; } /* EOF */ diff --git a/reactos/win32ss/user/ntuser/ntstubs.c b/reactos/win32ss/user/ntuser/ntstubs.c index b3da24eb6fb..a75dafd238e 100644 --- a/reactos/win32ss/user/ntuser/ntstubs.c +++ b/reactos/win32ss/user/ntuser/ntstubs.c @@ -709,9 +709,9 @@ BOOL NTAPI NtUserNotifyProcessCreate( HANDLE NewProcessId, - HANDLE SourceThreadId, - DWORD dwUnknown, - ULONG CreateFlags) + HANDLE ParentThreadId, + ULONG dwUnknown, + ULONG CreateFlags) { STUB; return FALSE; diff --git a/reactos/win32ss/user/winsrv/usersrv/init.c b/reactos/win32ss/user/winsrv/usersrv/init.c index fc199b9bea6..8a1b3d99795 100644 --- a/reactos/win32ss/user/winsrv/usersrv/init.c +++ b/reactos/win32ss/user/winsrv/usersrv/init.c @@ -261,6 +261,9 @@ CSR_SERVER_DLL_INIT(UserServerDllInitialization) return Status; } + /* Set the process creation notify routine for BASE */ + BaseSetProcessCreateNotify(NtUserNotifyProcessCreate); + /* Initialize the kernel mode subsystem */ Status = NtUserInitialize(USER_VERSION, ghPowerRequestEvent, diff --git a/reactos/win32ss/user/winsrv/usersrv/usersrv.h b/reactos/win32ss/user/winsrv/usersrv/usersrv.h index 2e0f85b5e24..bb281e65deb 100644 --- a/reactos/win32ss/user/winsrv/usersrv/usersrv.h +++ b/reactos/win32ss/user/winsrv/usersrv/usersrv.h @@ -21,6 +21,9 @@ // #define NTOS_MODE_USER +/* BASE Header */ +#include + /* USER Headers */ #include