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/li... ============================================================================== --- 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/li... ============================================================================== --- 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/li... ============================================================================== --- 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;