Merge r55012 adding Wine3D control panel as per Amine's request.
[reactos.git] / base / system / smss / smss.c
1 /*
2 * PROJECT: ReactOS Session Manager
3 * LICENSE: GPL v2 or later - See COPYING in the top level directory
4 * FILE: base/system/smss/smss.c
5 * PURPOSE: Initialization routine.
6 * PROGRAMMERS: ReactOS Development Team
7 */
8
9 /* INCLUDES ******************************************************************/
10 #include "smss.h"
11 #include <reactos/buildno.h>
12
13 #define NDEBUG
14 #include <debug.h>
15
16 ULONG SmSsProcessId = 0;
17
18 /* Native image's entry point */
19
20 NTSTATUS __cdecl _main(int argc,
21 char *argv[],
22 char *envp[],
23 ULONG DebugFlag)
24 {
25 NTSTATUS Status = STATUS_SUCCESS;
26 PROCESS_BASIC_INFORMATION PBI = {0};
27
28 /* Lookup yourself */
29 Status = NtQueryInformationProcess (NtCurrentProcess(),
30 ProcessBasicInformation,
31 & PBI,
32 sizeof PBI,
33 NULL);
34 if(NT_SUCCESS(Status))
35 {
36 SmSsProcessId = (ULONG) PBI.UniqueProcessId;
37 }
38 /* Initialize the system */
39 Status = InitSessionManager();
40 /* Watch required subsystems TODO */
41 #if 0
42 if (!NT_SUCCESS(Status))
43 {
44 int i;
45 for (i=0; i < (sizeof Children / sizeof Children[0]); i++)
46 {
47 if (Children[i])
48 {
49 NtTerminateProcess(Children[i],0);
50 }
51 }
52 DPRINT1("SM: Initialization failed!\n");
53 goto ByeBye;
54 }
55
56 Status = NtWaitForMultipleObjects(((LONG) sizeof(Children) / sizeof(HANDLE)),
57 Children,
58 WaitAny,
59 TRUE, /* alertable */
60 NULL); /* NULL for infinite */
61 if (!NT_SUCCESS(Status))
62 {
63 DPRINT1("SM: NtWaitForMultipleObjects failed! (Status=0x%08lx)\n", Status);
64 }
65 else
66 {
67 DPRINT1("SM: Process terminated!\n");
68 }
69
70 ByeBye:
71 /* Raise a hard error (crash the system/BSOD) */
72 NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED,
73 0,0,0,0,0);
74
75 // NtTerminateProcess(NtCurrentProcess(), 0);
76 #endif
77 return NtTerminateThread(NtCurrentThread(), Status);
78 }
79
80 /* EOF */