/// <summary> /// Processes a valid master boot record to initialize its partitions. /// </summary> /// <param name="anMBR">The MBR to process.</param> /// <param name="aDiskDevice">The disk device from which the MBR was read.</param> private static void ProcessMBR(MBR anMBR, DiskDevice aDiskDevice) { for (int i = 0; i < anMBR.NumPartitions; i++) { MBR.PartitionInfo aPartInfo = anMBR.Partitions[i]; if (aPartInfo.EBRLocation != 0) { byte[] EBRData = new byte[512]; aDiskDevice.ReadBlock(aPartInfo.EBRLocation, 1U, EBRData); EBR newEBR = new EBR(EBRData); ProcessMBR(newEBR, aDiskDevice); } else { Partitions.Add(new Partition(aDiskDevice, aPartInfo.StartSector, aPartInfo.SectorCount)); } } }
/// <summary> /// Attempts to initialise a disk treating it as MBR formatted. /// </summary> /// <param name="aDiskDevice">The disk to initialise.</param> /// <returns>True if a valid MBR was detected and the disk was successfully initialised. Otherwise, false.</returns> private static bool InitAsMBR(DiskDevice aDiskDevice) { #if FSM_TRACE BasicConsole.WriteLine("Attempting to read MBR..."); #endif byte[] MBRData = new byte[512]; aDiskDevice.ReadBlock(0UL, 1U, MBRData); #if FSM_TRACE BasicConsole.WriteLine("Read potential MBR data. Attempting to init MBR..."); #endif MBR TheMBR = new MBR(MBRData); if (!TheMBR.IsValid) { return false; } else { #if FSM_TRACE BasicConsole.WriteLine("Valid MBR found."); #endif ProcessMBR(TheMBR, aDiskDevice); return true; } }