Author: hbelusca
Date: Wed May 31 01:11:05 2017
New Revision: 74712

URL: http://svn.reactos.org/svn/reactos?rev=74712&view=rev
Log:
[SETUPLIB]: Adjustments:
- Call OpenAndMapFile() with its new ReadWrite parameter;
- Add informative comments in osdetect.c;
- In partlist.c, check whether a disk has a valid MBR by also checking for its 
0xAA55 signature.

Modified:
    branches/setup_improvements/base/setup/lib/bldrsup.c
    branches/setup_improvements/base/setup/lib/osdetect.c
    branches/setup_improvements/base/setup/lib/partlist.c

Modified: branches/setup_improvements/base/setup/lib/bldrsup.c
URL: 
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/lib/bldrsup.c?rev=74712&r1=74711&r2=74712&view=diff
==============================================================================
--- branches/setup_improvements/base/setup/lib/bldrsup.c        [iso-8859-1] 
(original)
+++ branches/setup_improvements/base/setup/lib/bldrsup.c        [iso-8859-1] 
Wed May 31 01:11:05 2017
@@ -90,7 +90,7 @@
 #if 0
     /* Check whether the loader configuration file exists */
     Status = OpenAndMapFile(PartitionHandle, 
NtosBootLoaders[Type].LoaderConfigurationFile,
-                            &FileHandle, &SectionHandle, &ViewBase, &FileSize);
+                            &FileHandle, &SectionHandle, &ViewBase, &FileSize, 
FALSE);
     if (!NT_SUCCESS(Status))
     {
         /* The loader does not exist, continue with another one */
@@ -315,7 +315,7 @@
 
     /* Check whether the loader configuration file exists */
     Status = OpenAndMapFile(PartitionHandle, 
NtosBootLoaders[Type].LoaderConfigurationFile,
-                            &FileHandle, &SectionHandle, &ViewBase, &FileSize);
+                            &FileHandle, &SectionHandle, &ViewBase, &FileSize, 
FALSE);
     if (!NT_SUCCESS(Status))
     {
         /* The loader does not exist, continue with another one */

Modified: branches/setup_improvements/base/setup/lib/osdetect.c
URL: 
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/lib/osdetect.c?rev=74712&r1=74711&r2=74712&view=diff
==============================================================================
--- branches/setup_improvements/base/setup/lib/osdetect.c       [iso-8859-1] 
(original)
+++ branches/setup_improvements/base/setup/lib/osdetect.c       [iso-8859-1] 
Wed May 31 01:11:05 2017
@@ -148,6 +148,8 @@
         {
             /* This is not a ReactOS entry */
             /* Certainly not a ReactOS installation */
+            DPRINT1("    A Win2k3 install '%wZ' without an ARC path?!\n", 
&InstallName);
+            /* Continue the enumeration */
             return STATUS_SUCCESS;
         }
     }
@@ -169,6 +171,7 @@
     {
         DPRINT1("    An NTOS installation with name \"%S\" already exists in 
SystemRoot '%wZ'\n",
                 NtOsInstall->InstallationName, &NtOsInstall->SystemArcPath);
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
     }
 
@@ -181,6 +184,7 @@
     if (!ArcPathToNtPath(&SystemRootPath, BootEntry->OsLoadPath, 
Data->PartList))
     {
         DPRINT1("ArcPathToNtPath(%S) failed, skip the installation.\n", 
BootEntry->OsLoadPath);
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
     }
 
@@ -196,6 +200,7 @@
     {
         DPRINT1("    An NTOS installation with name \"%S\" already exists in 
SystemRoot '%wZ'\n",
                 NtOsInstall->InstallationName, &NtOsInstall->SystemNtPath);
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
     }
 
@@ -203,7 +208,10 @@
 
     /* Check if this is a valid NTOS installation; stop there if it isn't one 
*/
     if (!IsValidNTOSInstallation_UStr(&SystemRootPath))
+    {
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
+    }
 
     DPRINT1("Found a valid NTOS installation in SystemRoot ARC path '%S', NT 
path '%wZ'\n",
             BootEntry->OsLoadPath, &SystemRootPath);
@@ -226,6 +234,7 @@
         DPRINT1("NtPathToDiskPartComponents(%wZ) failed\n", &SystemRootPath);
     }
 
+    /* Add the discovered NTOS installation into the list */
     if (PartEntry && PartEntry->DriveLetter)
     {
         /* We have retrieved a partition that is mounted */
@@ -243,6 +252,7 @@
                         DiskNumber, PartitionNumber, PartEntry,
                         InstallNameW);
 
+    /* Continue the enumeration */
     return STATUS_SUCCESS;
 }
 
@@ -299,7 +309,8 @@
     VendorName->Length = 0;
 
     Status = OpenAndMapFile(RootDirectory, PathNameToFile,
-                            &FileHandle, &SectionHandle, &ViewBase, NULL);
+                            &FileHandle, &SectionHandle, &ViewBase,
+                            NULL, FALSE);
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("Failed to open and map file '%S', Status 0x%08lx\n", 
PathNameToFile, Status);

Modified: branches/setup_improvements/base/setup/lib/partlist.c
URL: 
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/lib/partlist.c?rev=74712&r1=74711&r2=74712&view=diff
==============================================================================
--- branches/setup_improvements/base/setup/lib/partlist.c       [iso-8859-1] 
(original)
+++ branches/setup_improvements/base/setup/lib/partlist.c       [iso-8859-1] 
Wed May 31 01:11:05 2017
@@ -995,9 +995,12 @@
 //    DiskEntry->Signature = Signature;
     DiskEntry->BiosFound = FALSE;
 
-    /* Check if this disk has a valid MBR */
-    // FIXME: Check for the MBR signature as well, etc...
-    if (Mbr->BootCode[0] == 0 && Mbr->BootCode[1] == 0)
+    /*
+     * Check if this disk has a valid MBR: verify its signature,
+     * and whether its two first bytes are a valid instruction
+     * (related to this, see IsThereAValidBootSector() in partlist.c).
+     */
+    if (Mbr->Magic != 0xaa55 || (*(PUSHORT)Mbr->BootCode) == 0x0000)
         DiskEntry->NoMbr = TRUE;
     else
         DiskEntry->NoMbr = FALSE;


Reply via email to