[csrss] Don't expect ReactOS to always boot from C:\ReactOS (that's not the case...
[reactos.git] / reactos / subsystems / win32 / csrss / csrss.c
index b5d7303..c5f5745 100644 (file)
@@ -1,63 +1,70 @@
-/* $Id$
- *
- * csrss.c - Client/Server Runtime subsystem
- *
- * ReactOS Operating System
- *
- * --------------------------------------------------------------------
- *
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; see the file COPYING.LIB. If not, write
- * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
- * MA 02139, USA.
- *
- * --------------------------------------------------------------------
+/*
+ * PROJECT:         ReactOS Client Server Runtime SubSystem (CSRSS)
+ * LICENSE:         BSD - See COPYING.ARM in root directory
+ * FILE:            subsystems/win32/csrss/csrss.c
+ * PURPOSE:         Main Executable Code
+ * PROGRAMMERS:     Alex Ionescu
+ *                  ReactOS Portable Systems Group
  */
 
-#include <csrss.h>
+/* INCLUDES *******************************************************************/
 
+#define WIN32_NO_STATUS
+#include <windows.h>
+#include <ndk/ntndk.h>
+#include <api.h>
 #define NDEBUG
 #include <debug.h>
 
-int _cdecl _main(int argc,
-                char *argv[],
-                char *envp[],
-                int DebugFlag)
+/* FUNCTIONS ******************************************************************/
+
+VOID
+NTAPI
+CsrpSetDefaultProcessHardErrorMode(VOID)
+{
+    ULONG DefaultHardErrorMode = 0;
+
+    /* Disable hard errors */
+    NtSetInformationProcess(NtCurrentProcess(),
+                            ProcessDefaultHardErrorMode,
+                            &DefaultHardErrorMode,
+                            sizeof(DefaultHardErrorMode));
+}
+
+int
+_cdecl
+_main(int argc,
+      char *argv[],
+      char *envp[],
+      int DebugFlag)
 {
-   NTSTATUS Status = STATUS_SUCCESS;
-   
-   PrintString("ReactOS Client/Server Run-Time (Build %s)\n",
-            KERNEL_VERSION_BUILD_STR);
-
-   /*==================================================================
-    *  Initialize the Win32 environment subsystem server.
-    *================================================================*/
-   if (CsrServerInitialization (argc, argv, envp) == TRUE)
-     {
-       /*
-        * Terminate the current thread only.
-        */
-       Status = NtTerminateThread (NtCurrentThread(), 0);
-     }
-   else
-     {
-       DisplayString (L"CSR: CsrServerInitialization failed.\n");
-       /*
-        * Tell the SM we failed.
-        */
-       Status = NtTerminateProcess (NtCurrentProcess(), 0);
-     }
-   return (int) Status;
+    KPRIORITY BasePriority = (8 + 1) + 4;
+    NTSTATUS Status;
+
+    /* Set the Priority */
+    NtSetInformationProcess(NtCurrentProcess(),
+                            ProcessBasePriority,
+                            &BasePriority,
+                            sizeof(KPRIORITY));
+
+    /* Initialize CSR through CSRSRV */
+    Status = CsrServerInitialization(argc, argv);
+    if (!NT_SUCCESS(Status))
+    {
+        /* Kill us */
+        DPRINT1("CSRSS: CsrServerInitialization failed:% lx\n", Status);
+        NtTerminateProcess(NtCurrentProcess(), Status);
+    }
+
+    /* Disable errors */
+    CsrpSetDefaultProcessHardErrorMode();
+
+    /* If this is Session 0, make sure killing us bugchecks the system */
+    if (!NtCurrentPeb()->SessionId) RtlSetProcessIsCritical(TRUE, NULL, FALSE);
+
+    /* Kill this thread. CSRSRV keeps us going */
+    NtTerminateThread (NtCurrentThread(), Status);
+    return 0;
 }
 
 /* EOF */