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