[Win32k|User32]
[reactos.git] / reactos / subsystems / win32 / csrss / csrss.c
index 07027c7..c5f5745 100644 (file)
@@ -1,62 +1,70 @@
-/* $Id$
- *
- * csrss.c - Client/Server Runtime subsystem
- *
- * ReactOS Operating System
- *
- * --------------------------------------------------------------------
- *
- * This program 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 program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 */