[SETUPLIB] Adjustments in the code.
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 31 May 2017 01:11:05 +0000 (01:11 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 3 Jun 2018 20:12:45 +0000 (22:12 +0200)
- 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.

svn path=/branches/setup_improvements/; revision=74712

base/setup/lib/bldrsup.c
base/setup/lib/osdetect.c
base/setup/lib/partlist.c

index 493c522..13a1ed3 100644 (file)
@@ -89,7 +89,7 @@ FindNTOSBootLoader( // By handle
 #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 */
@@ -314,7 +314,7 @@ EnumerateNTOSBootEntries(
 
     /* 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 */
index 20611bd..6b16e56 100644 (file)
@@ -150,6 +150,8 @@ EnumerateInstallations(
         {
             /* 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;
         }
     }
@@ -171,6 +173,7 @@ EnumerateInstallations(
     {
         DPRINT1("    An NTOS installation with name \"%S\" already exists in SystemRoot '%wZ'\n",
                 NtOsInstall->InstallationName, &NtOsInstall->SystemArcPath);
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
     }
 
@@ -183,6 +186,7 @@ EnumerateInstallations(
     if (!ArcPathToNtPath(&SystemRootPath, BootEntry->OsLoadPath, Data->PartList))
     {
         DPRINT1("ArcPathToNtPath(%S) failed, skip the installation.\n", BootEntry->OsLoadPath);
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
     }
 
@@ -198,6 +202,7 @@ EnumerateInstallations(
     {
         DPRINT1("    An NTOS installation with name \"%S\" already exists in SystemRoot '%wZ'\n",
                 NtOsInstall->InstallationName, &NtOsInstall->SystemNtPath);
+        /* Continue the enumeration */
         return STATUS_SUCCESS;
     }
 
@@ -205,7 +210,10 @@ EnumerateInstallations(
 
     /* 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);
@@ -228,6 +236,7 @@ EnumerateInstallations(
         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 */
@@ -245,6 +254,7 @@ EnumerateInstallations(
                         DiskNumber, PartitionNumber, PartEntry,
                         InstallNameW);
 
+    /* Continue the enumeration */
     return STATUS_SUCCESS;
 }
 
@@ -301,7 +311,8 @@ CheckForValidPEAndVendor(
     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);
index 7b74cda..f29b285 100644 (file)
@@ -989,9 +989,12 @@ AddDiskToList(
 //    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;