On FAT16 partitions smaller than 128MB, the cluster size is 2048, which is
[reactos.git] / reactos / subsys / smss / smss.c
index bbd3eac..4aad777 100644 (file)
@@ -1,9 +1,9 @@
-/* $Id: smss.c,v 1.7 2000/02/27 15:47:17 ekohl Exp $
+/* $Id$
  *
  * smss.c - Session Manager
- * 
+ *
  * ReactOS Operating System
- * 
+ *
  * --------------------------------------------------------------------
  *
  * This software is free software; you can redistribute it and/or
  * 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.  
+ * MA 02139, USA.
  *
  * --------------------------------------------------------------------
- * 
- *     19990529 (Emanuele Aliberti)
- *             Compiled successfully with egcs 1.1.2
  */
-#include <ddk/ntddk.h>
-
 #include "smss.h"
+#include <reactos/buildno.h>
 
+#define NDEBUG
+#include <debug.h>
 
-void
-DisplayString( LPCWSTR lpwString )
-{
-       UNICODE_STRING us;
-
-       RtlInitUnicodeString (&us, lpwString);
-       NtDisplayString (&us);
-}
-
-
-void
-PrintString (char* fmt,...)
-{
-       char buffer[512];
-       va_list ap;
-       UNICODE_STRING UnicodeString;
-       ANSI_STRING AnsiString;
-       ULONG i;
-
-       va_start(ap, fmt);
-       vsprintf(buffer, fmt, ap);
-       va_end(ap);
-
-       RtlInitAnsiString (&AnsiString, buffer);
-       RtlAnsiStringToUnicodeString (
-               &UnicodeString,
-               &AnsiString,
-               TRUE);
-       NtDisplayString(&UnicodeString);
-       RtlFreeUnicodeString (&UnicodeString);
-}
-
+ULONG SmSsProcessId = 0;
 
 /* Native image's entry point */
 
-void NtProcessStartup (PPEB Peb)
+NTSTATUS __cdecl _main(int argc,
+                       char *argv[],
+                       char *envp[],
+                       ULONG DebugFlag)
 {
-   HANDLE Children[2]; /* csrss, winlogon */
+  NTSTATUS Status = STATUS_SUCCESS;
+  PROCESS_BASIC_INFORMATION PBI = {0};
 
-   DisplayString( L"Session Manager\n" );
+  /* Lookup yourself */
+  Status = NtQueryInformationProcess (NtCurrentProcess(),
+                                     ProcessBasicInformation,
+                                     & PBI,
+                                     sizeof PBI,
+                                     NULL);
+  if(NT_SUCCESS(Status))
+  {
+         SmSsProcessId = (ULONG) PBI.UniqueProcessId;
+  }
+  /* Initialize the system */
+  Status = InitSessionManager();
+  /* Watch required subsystems TODO */
+#if 0
+  if (!NT_SUCCESS(Status))
+    {
+      int i;
+      for (i=0; i < (sizeof Children / sizeof Children[0]); i++)
+      {
+        if (Children[i])
+        {
+          NtTerminateProcess(Children[i],0);
+        }
+      }
+      DPRINT1("SM: Initialization failed!\n");
+      goto ByeBye;
+    }
 
-   if (TRUE == InitSessionManager(Children))
-     {
-       NTSTATUS        wws;
-       
-       DisplayString( L"SM: Waiting for process termination...\n" );
+  Status = NtWaitForMultipleObjects(((LONG) sizeof(Children) / sizeof(HANDLE)),
+                                   Children,
+                                   WaitAny,
+                                   TRUE,       /* alertable */
+                                   NULL);      /* NULL for infinite */
+  if (!NT_SUCCESS(Status))
+    {
+      DPRINT1("SM: NtWaitForMultipleObjects failed! (Status=0x%08lx)\n", Status);
+    }
+  else
+    {
+      DPRINT1("SM: Process terminated!\n");
+    }
 
-#if 0
-       wws = NtWaitForMultipleObjects (
-                                       ((LONG) sizeof Children / sizeof (HANDLE)),
-                                       Children,
-                                       WaitAny,
-                                       TRUE,   /* alertable */
-                                       NULL    /* NULL for infinite */
-                                       );
-#endif
-       wws = NtWaitForSingleObject (
-                                    Children[CHILD_WINLOGON],
-                                    TRUE,      /* alertable */
-                                    NULL
-                                    );
-       
-       
-       //              if (!NT_SUCCESS(wws))
-       if (wws > 1)
-         {
-            DisplayString( L"SM: NtWaitForMultipleObjects failed!\n" );
-            /* FIXME: CRASH THE SYSTEM (BSOD) */
-         }
-       else
-         {
-            DisplayString( L"SM: Process terminated!\n" );
-            /* FIXME: CRASH THE SYSTEM (BSOD) */
-         }
-     }
-   else
-     {
-       DisplayString( L"SM: initialization failed!\n" );
-       /* FIXME: CRASH SYSTEM (BSOD)*/
-     }
-   
-   
-   /*
-    * OK: CSRSS asked to shutdown the system;
-    * We die.
-    */
-#if 0
-   NtRaiseHardError (
-                    STATUS_SYSTEM_PROCESS_TERMINATED,
-               ...);
+ByeBye:
+  /* Raise a hard error (crash the system/BSOD) */
+  NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED,
+                  0,0,0,0,0);
+
+//   NtTerminateProcess(NtCurrentProcess(), 0);
 #endif
-   
-   NtTerminateProcess(NtCurrentProcess(), 0);
+       return NtTerminateThread(NtCurrentThread(), Status);
 }
 
 /* EOF */