[ros-diffs] [navaraf] 24479: Fix setting of SystemBootDevice and SystemStartOptions in registry. Fix detection of MiniNT systems.

navaraf at svn.reactos.org navaraf at svn.reactos.org
Tue Oct 10 02:22:04 CEST 2006


Author: navaraf
Date: Tue Oct 10 04:22:04 2006
New Revision: 24479

URL: http://svn.reactos.org/svn/reactos?rev=24479&view=rev
Log:
Fix setting of SystemBootDevice and SystemStartOptions in registry.
Fix detection of MiniNT systems.

Modified:
    trunk/reactos/ntoskrnl/cm/registry.c

Modified: trunk/reactos/ntoskrnl/cm/registry.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cm/registry.c?rev=24479&r1=24478&r2=24479&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/cm/registry.c (original)
+++ trunk/reactos/ntoskrnl/cm/registry.c Tue Oct 10 04:22:04 2006
@@ -134,40 +134,25 @@
 {
   ULONG PiceStart = 4;
   BOOLEAN MiniNT = FALSE;
-  PWCHAR SystemBootDevice;
-  PWCHAR SystemStartOptions;
-  ULONG Position;
   NTSTATUS Status;
+  UNICODE_STRING TempString;
 
   /* Create the 'CurrentControlSet' link. */
   Status = CmiCreateCurrentControlSetLink();
   if (!NT_SUCCESS(Status))
     KEBUGCHECK(CONFIG_INITIALIZATION_FAILED);
-
-  /*
-   * Parse the system boot device.
-   */
-  Position = 0;
-  SystemBootDevice = ExAllocatePool(PagedPool,
-				    (strlen(CommandLine) + 1) * sizeof(WCHAR));
-  if (SystemBootDevice == NULL)
-  {
-    KEBUGCHECK(CONFIG_INITIALIZATION_FAILED);
-  }
-
-  while (*CommandLine != 0 && *CommandLine != ' ')
-    SystemBootDevice[Position++] = *(CommandLine++);
-  SystemBootDevice[Position++] = 0;
 
   /*
    * Write the system boot device to registry.
    */
+  RtlCreateUnicodeStringFromAsciiz(&TempString, KeLoaderBlock->ArcBootDeviceName);
   Status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
 				 L"\\Registry\\Machine\\System\\CurrentControlSet\\Control",
 				 L"SystemBootDevice",
 				 REG_SZ,
-				 SystemBootDevice,
-				 Position * sizeof(WCHAR));
+				 TempString.Buffer,
+				 TempString.MaximumLength);
+  RtlFreeUnicodeString(&TempString);
   if (!NT_SUCCESS(Status))
   {
     KEBUGCHECK(CONFIG_INITIALIZATION_FAILED);
@@ -176,38 +161,20 @@
   /*
    * Parse the system start options.
    */
-  Position = 0;
-  SystemStartOptions = SystemBootDevice;
-  while ((CommandLine = strchr(CommandLine, '/')) != NULL)
-    {
-      /* Skip over the slash */
-      CommandLine++;
-
-      /* Special options */
-      if (!_strnicmp(CommandLine, "MININT", 6))
-        MiniNT = TRUE;
-      else if (!_strnicmp(CommandLine, "DEBUGPORT=PICE", 14))
-        PiceStart = 1;
-
-      /* Add a space between the options */
-      if (Position != 0)
-        SystemStartOptions[Position++] = L' ';
-
-      /* Copy the command */
-      while (*CommandLine != 0 && *CommandLine != ' ')
-        SystemStartOptions[Position++] = *(CommandLine++);
-    }
-  SystemStartOptions[Position++] = 0;
+  PiceStart = strstr(KeLoaderBlock->LoadOptions, "DEBUGPORT=PICE") != NULL;
+  MiniNT = strstr(KeLoaderBlock->LoadOptions, "MININT") != NULL;
 
   /*
    * Write the system start options to registry.
    */
+  RtlCreateUnicodeStringFromAsciiz(&TempString, KeLoaderBlock->LoadOptions);
   Status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
 				 L"\\Registry\\Machine\\System\\CurrentControlSet\\Control",
 				 L"SystemStartOptions",
 				 REG_SZ,
-				 SystemStartOptions,
-				 Position * sizeof(WCHAR));
+				 TempString.Buffer,
+				 TempString.MaximumLength);
+  RtlFreeUnicodeString(&TempString);
   if (!NT_SUCCESS(Status))
   {
     KEBUGCHECK(CONFIG_INITIALIZATION_FAILED);
@@ -234,8 +201,6 @@
     sizeof(ULONG));
   if (!NT_SUCCESS(Status))
     KEBUGCHECK(CONFIG_INITIALIZATION_FAILED);
-
-  ExFreePool(SystemBootDevice);
 }
 
 




More information about the Ros-diffs mailing list