mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
[SETUPLIB] Improve the bootloader 'validity' checks -- Addendum to f06734e5
(r74512).
Adapted from PR #89 by Serge Gautherie. This should improve the situation described in CORE-12672 and CORE-4870.
This commit is contained in:
parent
ad9e57895d
commit
a7a11dd60d
1 changed files with 8 additions and 8 deletions
|
@ -551,7 +551,6 @@ IsThereAValidBootSector(
|
|||
HANDLE FileHandle;
|
||||
LARGE_INTEGER FileOffset;
|
||||
PUCHAR BootSector;
|
||||
ULONG Instruction;
|
||||
|
||||
/* Allocate buffer for bootsector */
|
||||
BootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE);
|
||||
|
@ -593,17 +592,18 @@ IsThereAValidBootSector(
|
|||
if (!NT_SUCCESS(Status))
|
||||
goto Quit;
|
||||
|
||||
/* Check the instruction; we use a ULONG to read three bytes */
|
||||
Instruction = (*(PULONG)BootSector) & 0x00FFFFFF;
|
||||
IsValid = (Instruction != 0x00000000);
|
||||
|
||||
/* Check the bootsector signature */
|
||||
IsValid &= (*(PUSHORT)(BootSector + 0x1fe) == 0xaa55);
|
||||
/* Check for the existence of the bootsector signature */
|
||||
IsValid = (*(PUSHORT)(BootSector + 0x1FE) == 0xAA55);
|
||||
if (IsValid)
|
||||
{
|
||||
/* Check for the first instruction encoded on three bytes */
|
||||
IsValid = (((*(PULONG)BootSector) & 0x00FFFFFF) != 0x00000000);
|
||||
}
|
||||
|
||||
Quit:
|
||||
/* Free the boot sector */
|
||||
RtlFreeHeap(ProcessHeap, 0, BootSector);
|
||||
return IsValid; // Status;
|
||||
return IsValid;
|
||||
}
|
||||
|
||||
static
|
||||
|
|
Loading…
Reference in a new issue