CheckActiveBootPartition(PartitionList);
}
+ /* Install MBR if necessary */
+ if (DiskEntry->NoMbr &&
+ DiskEntry->BiosDiskNumber == 0)
+ {
+ wcscpy(PathBuffer, SourceRootPath.Buffer);
+ wcscat(PathBuffer, L"\\loader\\dosmbr.bin");
+
+ DPRINT("Install MBR bootcode: %S ==> %S\n",
+ PathBuffer, DestinationRootPath.Buffer);
+
+ /* Install MBR bootcode */
+ Status = InstallMbrBootCodeToDisk(PathBuffer, DestinationRootPath.Buffer);
+ if (!NT_SUCCESS (Status))
+ {
+ DPRINT1("InstallMbrBootCodeToDisk() failed (Status %lx)\n",
+ Status);
+ return FALSE;
+ }
+
+ DiskEntry->NoMbr = FALSE;
+ }
+
if (wcscmp(FileSystemList->Selected->FileSystem, L"FAT") == 0)
{
/* FIXME: Install boot code. This is a hack! */
}
Checksum = ~Checksum + 1;
- RtlFreeHeap (ProcessHeap,
- 0,
- Mbr);
-
swprintf(Identifier, L"%08x-%08x-A", Checksum, Signature);
DPRINT("Identifier: %S\n", Identifier);
}
DiskEntry->BiosFound = FALSE;
+ /* Check if this disk has a valid MBR */
+ if (Mbr->BootCode[0] == 0 && Mbr->BootCode[1] == 0)
+ DiskEntry->NoMbr = TRUE;
+ else
+ DiskEntry->NoMbr = FALSE;
+
+ /* Free Mbr sector buffer */
+ RtlFreeHeap (ProcessHeap,
+ 0,
+ Mbr);
+
ListEntry = List->BiosDiskListHead.Flink;
while(ListEntry != &List->BiosDiskListHead)
{
}
DiskEntry1->NewDisk = FALSE;
+ DiskEntry1->NoMbr = FALSE;
}
}