3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/ldr/init.c
6 * PURPOSE: Loaders for PE executables
8 * PROGRAMMERS: Jean Michault
9 * Rex Jolliff (rex@lvcablemodem.com)
12 /* INCLUDES *****************************************************************/
18 #include <internal/debug.h>
20 /* FUNCTIONS *****************************************************************/
24 LdrLoadInitialProcess(PHANDLE ProcessHandle
,
27 UNICODE_STRING ImagePath
= RTL_CONSTANT_STRING(L
"\\SystemRoot\\system32\\smss.exe");
28 HANDLE SystemProcessHandle
;
30 PRTL_USER_PROCESS_PARAMETERS Params
=NULL
;
31 RTL_PROCESS_INFO Info
;
33 Status
= ObpCreateHandle(
34 PsGetCurrentProcess(),
35 PsInitialSystemProcess
,
36 PROCESS_CREATE_PROCESS
| PROCESS_CREATE_THREAD
| PROCESS_QUERY_INFORMATION
,
41 if(!NT_SUCCESS(Status
))
43 DPRINT1("Failed to create a handle for the system process!\n");
48 Status
= RtlCreateProcessParameters(
61 if(!NT_SUCCESS(Status
))
63 DPRINT1("Failed to create ppb!\n");
64 ZwClose(SystemProcessHandle
);
69 DPRINT("Creating process\n");
71 Status
= RtlCreateUserProcess(
73 OBJ_CASE_INSENSITIVE
, //Valid are OBJ_INHERIT and OBJ_CASE_INSENSITIVE.
84 ZwClose(SystemProcessHandle
);
85 RtlDestroyProcessParameters(Params
);
87 if (!NT_SUCCESS(Status
))
89 DPRINT1("NtCreateProcess() failed (Status %lx)\n", Status
);
93 ZwResumeThread(Info
.ThreadHandle
, NULL
);
95 *ProcessHandle
= Info
.ProcessHandle
;
96 *ThreadHandle
= Info
.ThreadHandle
;
98 DPRINT("Process created successfully\n");
100 return(STATUS_SUCCESS
);