public override bool DetectIsPartitioned(Stream s) { if (s.Length < 1024) { return(false); } s.Position = 0; byte[] initialBytes = Utilities.ReadFully(s, 1024); BlockZero b0 = new BlockZero(); b0.ReadFrom(initialBytes, 0); if (b0.Signature != 0x4552) { return(false); } PartitionMapEntry initialPart = new PartitionMapEntry(s); initialPart.ReadFrom(initialBytes, 512); return(initialPart.Signature == 0x504d); }
/// <summary> /// Initializes a new instance of the PartitionMap class. /// </summary> /// <param name="stream">Stream contaning the contents of a disk</param> public PartitionMap(Stream stream) { _stream = stream; stream.Position = 0; byte[] initialBytes = Utilities.ReadFully(stream, 1024); BlockZero b0 = new BlockZero(); b0.ReadFrom(initialBytes, 0); PartitionMapEntry initialPart = new PartitionMapEntry(_stream); initialPart.ReadFrom(initialBytes, 512); byte[] partTableData = Utilities.ReadFully(stream, (int)(initialPart.MapEntries - 1) * 512); _partitions = new PartitionMapEntry[initialPart.MapEntries - 1]; for (uint i = 0; i < initialPart.MapEntries - 1; ++i) { _partitions[i] = new PartitionMapEntry(_stream); _partitions[i].ReadFrom(partTableData, (int)(512 * i)); } }