/// <summary> /// Initializes a new instance of the BiosPartitionedDiskBuilder class. /// </summary> /// <param name="capacity">The capacity of the disk (in bytes)</param> /// <param name="biosGeometry">The BIOS geometry of the disk</param> public BiosPartitionedDiskBuilder(long capacity, Geometry biosGeometry) { _capacity = capacity; _biosGeometry = biosGeometry; _bootSectors = new SparseMemoryStream(); _bootSectors.SetLength(capacity); _partitionTable = BiosPartitionTable.Initialize(_bootSectors, _biosGeometry); _partitionContents = new Dictionary<int, BuilderExtent>(); }
public BiosPartitionedDiskBuilder(long capacity, byte[] bootSectors, Geometry biosGeometry) { _capacity = capacity; _biosGeometry = biosGeometry; _bootSectors = new SparseMemoryStream(); _bootSectors.SetLength(capacity); _bootSectors.Write(bootSectors, 0, bootSectors.Length); _partitionTable = new BiosPartitionTable(_bootSectors, biosGeometry); _partitionContents = new Dictionary<int, BuilderExtent>(); }
public override PartitionTable DetectPartitionTable(VirtualDisk disk) { if (BiosPartitionTable.IsValid(disk.Content)) { BiosPartitionTable table = new BiosPartitionTable(disk); if (table.Count == 1 && table[0].BiosType == BiosPartitionTypes.GptProtective) { return new GuidPartitionTable(disk); } else { return table; } } else { return null; } }
internal BiosPartitionInfo(BiosPartitionTable table, BiosPartitionRecord record) { _table = table; _record = record; }
/// <summary> /// Initializes a new instance of the BiosPartitionedDiskBuilder class by /// cloning the partition structure of a source disk. /// </summary> /// <param name="sourceDisk">The disk to clone</param> public BiosPartitionedDiskBuilder(VirtualDisk sourceDisk) { _capacity = sourceDisk.Capacity; _biosGeometry = sourceDisk.BiosGeometry; _bootSectors = new SparseMemoryStream(); _bootSectors.SetLength(_capacity); foreach (var extent in new BiosPartitionTable(sourceDisk).GetMetadataDiskExtents()) { sourceDisk.Content.Position = extent.Start; byte[] buffer = Utilities.ReadFully(sourceDisk.Content, (int)extent.Length); _bootSectors.Position = extent.Start; _bootSectors.Write(buffer, 0, buffer.Length); } _partitionTable = new BiosPartitionTable(_bootSectors, _biosGeometry); _partitionContents = new Dictionary<int, BuilderExtent>(); }