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/l…
==============================================================================
--- 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/l…
==============================================================================
--- 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/l…
==============================================================================
--- 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;