public MasterBootRecord(WinPhysicalDisk disk) {
PhysicalDisk = disk;
Offset = 0;
Length = MBR_SIZE;
_partitionEntries = new List<PartitionEntry>();
try {
_data = disk.GetBytes(0, MBR_SIZE);
} catch (Exception e) {
throw new Exception("Failed to load the Master Boot Record!", e);
}
for (int i = 0; i < MAX_PARTITIONS; i++) {
int offset = 0x1BE + 16 * i;
if (PartitionEntryExistsAt(offset, 16)) {
_partitionEntries.Add(new PartitionEntry(_data, offset, (int)disk.Attributes.BytesPerSector, i));
}
}
_partitionEntries.Sort(new Comparison<PartitionEntry>(delegate(PartitionEntry a, PartitionEntry b) {
return a.PartitionOffset.CompareTo(b.PartitionOffset);
}));
}