xref: /reactos/subsystems/csr/csrss/csrss.c (revision d2aeaba5)
1*d2aeaba5SHermès Bélusca-Maïto /*
2*d2aeaba5SHermès Bélusca-Maïto  * LICENSE:         BSD - See COPYING.ARM in root directory
3*d2aeaba5SHermès Bélusca-Maïto  * PROJECT:         ReactOS Client/Server Runtime SubSystem
4*d2aeaba5SHermès Bélusca-Maïto  * FILE:            subsystems/win32/csrss/csrss.c
5*d2aeaba5SHermès Bélusca-Maïto  * PURPOSE:         CSRSS Process Main Executable Code
6*d2aeaba5SHermès Bélusca-Maïto  * PROGRAMMERS:     Alex Ionescu (alex@relsoft.net)
7*d2aeaba5SHermès Bélusca-Maïto  *                  ReactOS Portable Systems Group
8*d2aeaba5SHermès Bélusca-Maïto  */
9*d2aeaba5SHermès Bélusca-Maïto 
10*d2aeaba5SHermès Bélusca-Maïto /* INCLUDES *******************************************************************/
11*d2aeaba5SHermès Bélusca-Maïto 
12*d2aeaba5SHermès Bélusca-Maïto #define NTOS_MODE_USER
13*d2aeaba5SHermès Bélusca-Maïto #include <ndk/exfuncs.h>
14*d2aeaba5SHermès Bélusca-Maïto #include <ndk/psfuncs.h>
15*d2aeaba5SHermès Bélusca-Maïto #include <ndk/rtlfuncs.h>
16*d2aeaba5SHermès Bélusca-Maïto 
17*d2aeaba5SHermès Bélusca-Maïto #include <csr/csrsrv.h>
18*d2aeaba5SHermès Bélusca-Maïto 
19*d2aeaba5SHermès Bélusca-Maïto #define NDEBUG
20*d2aeaba5SHermès Bélusca-Maïto #include <debug.h>
21*d2aeaba5SHermès Bélusca-Maïto 
22*d2aeaba5SHermès Bélusca-Maïto /* FUNCTIONS ******************************************************************/
23*d2aeaba5SHermès Bélusca-Maïto 
24*d2aeaba5SHermès Bélusca-Maïto VOID
25*d2aeaba5SHermès Bélusca-Maïto NTAPI
CsrpSetDefaultProcessHardErrorMode(VOID)26*d2aeaba5SHermès Bélusca-Maïto CsrpSetDefaultProcessHardErrorMode(VOID)
27*d2aeaba5SHermès Bélusca-Maïto {
28*d2aeaba5SHermès Bélusca-Maïto     ULONG DefaultHardErrorMode = 0;
29*d2aeaba5SHermès Bélusca-Maïto 
30*d2aeaba5SHermès Bélusca-Maïto     /* Disable hard errors */
31*d2aeaba5SHermès Bélusca-Maïto     NtSetInformationProcess(NtCurrentProcess(),
32*d2aeaba5SHermès Bélusca-Maïto                             ProcessDefaultHardErrorMode,
33*d2aeaba5SHermès Bélusca-Maïto                             &DefaultHardErrorMode,
34*d2aeaba5SHermès Bélusca-Maïto                             sizeof(DefaultHardErrorMode));
35*d2aeaba5SHermès Bélusca-Maïto }
36*d2aeaba5SHermès Bélusca-Maïto 
37*d2aeaba5SHermès Bélusca-Maïto int
38*d2aeaba5SHermès Bélusca-Maïto _cdecl
_main(int argc,char * argv[],char * envp[],int DebugFlag)39*d2aeaba5SHermès Bélusca-Maïto _main(int argc,
40*d2aeaba5SHermès Bélusca-Maïto       char *argv[],
41*d2aeaba5SHermès Bélusca-Maïto       char *envp[],
42*d2aeaba5SHermès Bélusca-Maïto       int DebugFlag)
43*d2aeaba5SHermès Bélusca-Maïto {
44*d2aeaba5SHermès Bélusca-Maïto     KPRIORITY BasePriority = PROCESS_PRIORITY_NORMAL_FOREGROUND + 4;
45*d2aeaba5SHermès Bélusca-Maïto     NTSTATUS Status;
46*d2aeaba5SHermès Bélusca-Maïto #if defined (_X86_)
47*d2aeaba5SHermès Bélusca-Maïto     ULONG Response;
48*d2aeaba5SHermès Bélusca-Maïto #endif
49*d2aeaba5SHermès Bélusca-Maïto     UNREFERENCED_PARAMETER(envp);
50*d2aeaba5SHermès Bélusca-Maïto     UNREFERENCED_PARAMETER(DebugFlag);
51*d2aeaba5SHermès Bélusca-Maïto 
52*d2aeaba5SHermès Bélusca-Maïto     /* Set the base priority */
53*d2aeaba5SHermès Bélusca-Maïto     NtSetInformationProcess(NtCurrentProcess(),
54*d2aeaba5SHermès Bélusca-Maïto                             ProcessBasePriority,
55*d2aeaba5SHermès Bélusca-Maïto                             &BasePriority,
56*d2aeaba5SHermès Bélusca-Maïto                             sizeof(BasePriority));
57*d2aeaba5SHermès Bélusca-Maïto 
58*d2aeaba5SHermès Bélusca-Maïto #if defined (_X86_)
59*d2aeaba5SHermès Bélusca-Maïto     /* Give us IOPL so that we can access the VGA registers */
60*d2aeaba5SHermès Bélusca-Maïto     Status = NtSetInformationProcess(NtCurrentProcess(),
61*d2aeaba5SHermès Bélusca-Maïto                                      ProcessUserModeIOPL,
62*d2aeaba5SHermès Bélusca-Maïto                                      NULL,
63*d2aeaba5SHermès Bélusca-Maïto                                      0);
64*d2aeaba5SHermès Bélusca-Maïto     if (!NT_SUCCESS(Status))
65*d2aeaba5SHermès Bélusca-Maïto     {
66*d2aeaba5SHermès Bélusca-Maïto         /* Raise a hard error */
67*d2aeaba5SHermès Bélusca-Maïto         DPRINT1("CSRSS: Could not raise IOPL, Status: 0x%08lx\n", Status);
68*d2aeaba5SHermès Bélusca-Maïto         Status = NtRaiseHardError(STATUS_IO_PRIVILEGE_FAILED,
69*d2aeaba5SHermès Bélusca-Maïto                                   0,
70*d2aeaba5SHermès Bélusca-Maïto                                   0,
71*d2aeaba5SHermès Bélusca-Maïto                                   NULL,
72*d2aeaba5SHermès Bélusca-Maïto                                   OptionOk,
73*d2aeaba5SHermès Bélusca-Maïto                                   &Response);
74*d2aeaba5SHermès Bélusca-Maïto     }
75*d2aeaba5SHermès Bélusca-Maïto #endif
76*d2aeaba5SHermès Bélusca-Maïto 
77*d2aeaba5SHermès Bélusca-Maïto     /* Initialize CSR through CSRSRV */
78*d2aeaba5SHermès Bélusca-Maïto     Status = CsrServerInitialization(argc, argv);
79*d2aeaba5SHermès Bélusca-Maïto     if (!NT_SUCCESS(Status))
80*d2aeaba5SHermès Bélusca-Maïto     {
81*d2aeaba5SHermès Bélusca-Maïto         /* Kill us */
82*d2aeaba5SHermès Bélusca-Maïto         DPRINT1("CSRSS: Unable to initialize server, Status: 0x%08lx\n", Status);
83*d2aeaba5SHermès Bélusca-Maïto         NtTerminateProcess(NtCurrentProcess(), Status);
84*d2aeaba5SHermès Bélusca-Maïto     }
85*d2aeaba5SHermès Bélusca-Maïto 
86*d2aeaba5SHermès Bélusca-Maïto     /* Disable errors */
87*d2aeaba5SHermès Bélusca-Maïto     CsrpSetDefaultProcessHardErrorMode();
88*d2aeaba5SHermès Bélusca-Maïto 
89*d2aeaba5SHermès Bélusca-Maïto     /* If this is Session 0, make sure killing us bugchecks the system */
90*d2aeaba5SHermès Bélusca-Maïto     if (NtCurrentPeb()->SessionId == 0) RtlSetProcessIsCritical(TRUE, NULL, FALSE);
91*d2aeaba5SHermès Bélusca-Maïto 
92*d2aeaba5SHermès Bélusca-Maïto     /* Kill this thread. CSRSRV keeps us going */
93*d2aeaba5SHermès Bélusca-Maïto     NtTerminateThread(NtCurrentThread(), Status);
94*d2aeaba5SHermès Bélusca-Maïto     return 0;
95*d2aeaba5SHermès Bélusca-Maïto }
96*d2aeaba5SHermès Bélusca-Maïto 
97*d2aeaba5SHermès Bélusca-Maïto /* EOF */
98