mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
594 lines
34 KiB
C#
594 lines
34 KiB
C#
|
|
// /***************************************************************************
|
|||
|
|
// The Disc Image Chef
|
|||
|
|
// ----------------------------------------------------------------------------
|
|||
|
|
//
|
|||
|
|
// Filename : MBR.cs
|
|||
|
|
// Version : 1.0
|
|||
|
|
// Author(s) : Natalia Portillo
|
|||
|
|
//
|
|||
|
|
// Component : Component
|
|||
|
|
//
|
|||
|
|
// Revision : $Revision$
|
|||
|
|
// Last change by : $Author$
|
|||
|
|
// Date : $Date$
|
|||
|
|
//
|
|||
|
|
// --[ Description ] ----------------------------------------------------------
|
|||
|
|
//
|
|||
|
|
// Description
|
|||
|
|
//
|
|||
|
|
// --[ License ] --------------------------------------------------------------
|
|||
|
|
//
|
|||
|
|
// This program is free software: you can redistribute it and/or modify
|
|||
|
|
// it under the terms of the GNU General Public License as
|
|||
|
|
// published by the Free Software Foundation, either version 3 of the
|
|||
|
|
// License, or (at your option) any later version.
|
|||
|
|
//
|
|||
|
|
// This program is distributed in the hope that it will be useful,
|
|||
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
|
// GNU General Public License for more details.
|
|||
|
|
//
|
|||
|
|
// You should have received a copy of the GNU General Public License
|
|||
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
|
//
|
|||
|
|
// ----------------------------------------------------------------------------
|
|||
|
|
// Copyright (C) 2011-2015 Claunia.com
|
|||
|
|
// ****************************************************************************/
|
|||
|
|
// //$Id$
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.IO;
|
|||
|
|
using DiscImageChef.CommonTypes;
|
|||
|
|
using DiscImageChef.DiscImages;
|
|||
|
|
using DiscImageChef.Filesystems;
|
|||
|
|
using DiscImageChef.Filters;
|
|||
|
|
using DiscImageChef.ImagePlugins;
|
|||
|
|
using DiscImageChef.PartPlugins;
|
|||
|
|
using NUnit.Framework;
|
|||
|
|
|
|||
|
|
namespace DiscImageChef.Tests.Partitions
|
|||
|
|
{
|
|||
|
|
[TestFixture]
|
|||
|
|
public class MBR
|
|||
|
|
{
|
|||
|
|
readonly string[] testfiles = {
|
|||
|
|
"concurrentdos_6.0.vdi.lz","darwin_1.4.1.vdi.lz","darwin_6.0.2.vdi.lz","darwin_8.0.1.vdi.lz",
|
|||
|
|
"drdos_3.40.vdi.lz","drdos_3.41.vdi.lz","drdos_5.00.vdi.lz","drdos_6.00.vdi.lz",
|
|||
|
|
"drdos_7.02.vdi.lz","drdos_7.03.vdi.lz","drdos_8.0.vdi.lz","linux.vdi.lz",
|
|||
|
|
"macosx_10.3.vdi.lz","macosx_10.4.vdi.lz","msdos_3.30a.vdi.lz","msdos_5.00.vdi.lz",
|
|||
|
|
"msdos_6.00.vdi.lz","msdos_6.20.vdi.lz","msdos_6.21.vdi.lz","msdos_6.22.vdi.lz",
|
|||
|
|
"multiuserdos_7.22r04.vdi.lz","novelldos_7.00.vdi.lz","opendos_7.01.vdi.lz","parted.vdi.lz",
|
|||
|
|
"pcdos_2000.vdi.lz","pcdos_2.00.vdi.lz","pcdos_2.10.vdi.lz","pcdos_3.00.vdi.lz",
|
|||
|
|
"pcdos_3.10.vdi.lz","pcdos_3.30.vdi.lz","pcdos_4.00.vdi.lz","pcdos_5.00.vdi.lz",
|
|||
|
|
"pcdos_6.10.vdi.lz","win95.vdi.lz","win96osr25.vdi.lz","winnt_3.10.vdi.lz",
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
readonly Partition[][] wanted = {
|
|||
|
|
// Concurrent DOS 6.0
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 100800,
|
|||
|
|
Sequence = 0, Start = 1008 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 99792,
|
|||
|
|
Sequence = 1, Start = 102816 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 100800,
|
|||
|
|
Sequence = 2, Start = 202608 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 303408,
|
|||
|
|
Sequence = 3, Start = 352800 },
|
|||
|
|
},
|
|||
|
|
// Darwin 1.4.1
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x07", Length = 409248,
|
|||
|
|
Sequence = 0, Start = 409248 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xA8", Length = 204624,
|
|||
|
|
Sequence = 1, Start = 818496 },
|
|||
|
|
},
|
|||
|
|
// Darwin 6.0.2
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xA8", Length = 204561,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAB", Length = 81648,
|
|||
|
|
Sequence = 1, Start = 204624 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245952,
|
|||
|
|
Sequence = 2, Start = 286272 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 488880,
|
|||
|
|
Sequence = 3, Start = 532224 },
|
|||
|
|
},
|
|||
|
|
// Darwin 8.0.1
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 150000,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 176000,
|
|||
|
|
Sequence = 1, Start = 150063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xA8", Length = 350000,
|
|||
|
|
Sequence = 2, Start = 326063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x0C", Length = 347937,
|
|||
|
|
Sequence = 3, Start = 676063 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 3.40
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 100800,
|
|||
|
|
Sequence = 0, Start = 1008 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 402129,
|
|||
|
|
Sequence = 1, Start = 101871 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 152145,
|
|||
|
|
Sequence = 2, Start = 504063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 365841,
|
|||
|
|
Sequence = 3, Start = 656271 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 3.41
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 126945,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 124929,
|
|||
|
|
Sequence = 1, Start = 127071 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 101745,
|
|||
|
|
Sequence = 2, Start = 252063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 668241,
|
|||
|
|
Sequence = 3, Start = 353871 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 5.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 128016,
|
|||
|
|
Sequence = 0, Start = 124992 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 99729,
|
|||
|
|
Sequence = 1, Start = 253071 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 100737,
|
|||
|
|
Sequence = 2, Start = 352863 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 313425,
|
|||
|
|
Sequence = 3, Start = 453663 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 254961,
|
|||
|
|
Sequence = 4, Start = 767151 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 6.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 101745,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 18081,
|
|||
|
|
Sequence = 1, Start = 102879 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 130977,
|
|||
|
|
Sequence = 2, Start = 121023 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 202545,
|
|||
|
|
Sequence = 3, Start = 252063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 567441,
|
|||
|
|
Sequence = 4, Start = 454671 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 7.02
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 102753,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 307377,
|
|||
|
|
Sequence = 1, Start = 102879 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 384993,
|
|||
|
|
Sequence = 2, Start = 410319 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 17073,
|
|||
|
|
Sequence = 3, Start = 795375 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 209601,
|
|||
|
|
Sequence = 4, Start = 812511 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 7.03
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 202545,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 141057,
|
|||
|
|
Sequence = 1, Start = 202671 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 152145,
|
|||
|
|
Sequence = 2, Start = 352863 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 364833,
|
|||
|
|
Sequence = 3, Start = 505071 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 152145,
|
|||
|
|
Sequence = 4, Start = 869967 },
|
|||
|
|
},
|
|||
|
|
// DR-DOS 8.0
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 138033,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 303345,
|
|||
|
|
Sequence = 2, Start = 352863 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 249921,
|
|||
|
|
Sequence = 3, Start = 656271 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 115857,
|
|||
|
|
Sequence = 4, Start = 906255 },
|
|||
|
|
},
|
|||
|
|
// Linux
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 20480,
|
|||
|
|
Sequence = 0, Start = 2048 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x24", Length = 40960,
|
|||
|
|
Sequence = 1, Start = 22528 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xA7", Length = 61440,
|
|||
|
|
Sequence = 2, Start = 65536 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x42", Length = 81920,
|
|||
|
|
Sequence = 3, Start = 129024 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x83", Length = 49152,
|
|||
|
|
Sequence = 4, Start = 212992 },
|
|||
|
|
},
|
|||
|
|
// Mac OS X 10.3
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xA8", Length = 204800,
|
|||
|
|
Sequence = 0, Start = 8 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 102400,
|
|||
|
|
Sequence = 1, Start = 204816 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x0B", Length = 102400,
|
|||
|
|
Sequence = 2, Start = 307224 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 204800,
|
|||
|
|
Sequence = 3, Start = 409632 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 204800,
|
|||
|
|
Sequence = 4, Start = 614440 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 204752,
|
|||
|
|
Sequence = 5, Start = 819248 },
|
|||
|
|
},
|
|||
|
|
// Mac OS X 10.4
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 102400,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 204800,
|
|||
|
|
Sequence = 1, Start = 102501 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x0B", Length = 204800,
|
|||
|
|
Sequence = 2, Start = 307314 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xA8", Length = 204800,
|
|||
|
|
Sequence = 3, Start = 512127 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 102400,
|
|||
|
|
Sequence = 4, Start = 716940 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0xAF", Length = 204622,
|
|||
|
|
Sequence = 5, Start = 819378 },
|
|||
|
|
},
|
|||
|
|
// MS-DOS 3.30A
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 1, Start = 65583 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 2, Start = 131103 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 3, Start = 196623 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 4, Start = 262143 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 5, Start = 327663 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 6, Start = 393183 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 7, Start = 458703 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 8, Start = 524223 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 9, Start = 589743 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 10, Start = 655263 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 11, Start = 720783 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 12, Start = 786303 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 13, Start = 851823 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 14, Start = 917343 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 39249,
|
|||
|
|
Sequence = 15, Start = 982863 },
|
|||
|
|
},
|
|||
|
|
// MS-DOS 5.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 102753,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 31185,
|
|||
|
|
Sequence = 1, Start = 102879 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 41265,
|
|||
|
|
Sequence = 2, Start = 134127 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 51345,
|
|||
|
|
Sequence = 3, Start = 175455 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 61425,
|
|||
|
|
Sequence = 4, Start = 226863 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 72513,
|
|||
|
|
Sequence = 5, Start = 288351 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 82593,
|
|||
|
|
Sequence = 6, Start = 360927 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 92673,
|
|||
|
|
Sequence = 7, Start = 443583 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 102753,
|
|||
|
|
Sequence = 8, Start = 536319 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 112833,
|
|||
|
|
Sequence = 9, Start = 639135 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 122913,
|
|||
|
|
Sequence = 10, Start = 752031 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 134001,
|
|||
|
|
Sequence = 11, Start = 875007 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 13041,
|
|||
|
|
Sequence = 12, Start = 1009071 },
|
|||
|
|
},
|
|||
|
|
// MS-DOS 6.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 51345,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 72513,
|
|||
|
|
Sequence = 1, Start = 51471 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 92673,
|
|||
|
|
Sequence = 2, Start = 124047 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 112833,
|
|||
|
|
Sequence = 3, Start = 216783 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 134001,
|
|||
|
|
Sequence = 4, Start = 329679 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 154161,
|
|||
|
|
Sequence = 5, Start = 463743 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 178353,
|
|||
|
|
Sequence = 6, Start = 617967 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 184401,
|
|||
|
|
Sequence = 7, Start = 796383 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 41265,
|
|||
|
|
Sequence = 8, Start = 980847 },
|
|||
|
|
},
|
|||
|
|
// MS-DOS 6.20
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 225729,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 2, Start = 431487 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 267057,
|
|||
|
|
Sequence = 3, Start = 677439 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 61425,
|
|||
|
|
Sequence = 4, Start = 944559 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 16065,
|
|||
|
|
Sequence = 5, Start = 1006047 },
|
|||
|
|
},
|
|||
|
|
// MS-DOS 6.21
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 225729,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 2, Start = 431487 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 267057,
|
|||
|
|
Sequence = 3, Start = 677439 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 51345,
|
|||
|
|
Sequence = 4, Start = 944559 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 6993,
|
|||
|
|
Sequence = 5, Start = 995967 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 19089,
|
|||
|
|
Sequence = 6, Start = 1003023 },
|
|||
|
|
},
|
|||
|
|
// MS-DOS 6.22
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 1, Start = 246015 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 307377,
|
|||
|
|
Sequence = 2, Start = 451647 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 225729,
|
|||
|
|
Sequence = 3, Start = 759087 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 37233,
|
|||
|
|
Sequence = 4, Start = 984879 },
|
|||
|
|
},
|
|||
|
|
// Multiuser DOS 7.22 release 04
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 152145,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 99729,
|
|||
|
|
Sequence = 1, Start = 152271 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 202545,
|
|||
|
|
Sequence = 2, Start = 252063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 1953,
|
|||
|
|
Sequence = 3, Start = 454671 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 565425,
|
|||
|
|
Sequence = 4, Start = 456687 },
|
|||
|
|
},
|
|||
|
|
// Novell DOS 7.0
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 252945,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 4977,
|
|||
|
|
Sequence = 1, Start = 253071 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 202545,
|
|||
|
|
Sequence = 2, Start = 352863 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 348705,
|
|||
|
|
Sequence = 3, Start = 555471 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 117873,
|
|||
|
|
Sequence = 4, Start = 904239 },
|
|||
|
|
},
|
|||
|
|
// OpenDOS 7.01
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 307377,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 4977,
|
|||
|
|
Sequence = 1, Start = 307503 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 40257,
|
|||
|
|
Sequence = 2, Start = 312543 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 202545,
|
|||
|
|
Sequence = 3, Start = 352863 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 466641,
|
|||
|
|
Sequence = 4, Start = 555471 },
|
|||
|
|
},
|
|||
|
|
// Parted
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x83", Length = 67584,
|
|||
|
|
Sequence = 0, Start = 4096 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x07", Length = 59392,
|
|||
|
|
Sequence = 1, Start = 73728 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 129024,
|
|||
|
|
Sequence = 2, Start = 133120 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 2000
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 225729,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 2, Start = 431487 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 287217,
|
|||
|
|
Sequence = 3, Start = 677439 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 57393,
|
|||
|
|
Sequence = 4, Start = 964719 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 2.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 1022111,
|
|||
|
|
Sequence = 0, Start = 1 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 2.10
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 1022111,
|
|||
|
|
Sequence = 0, Start = 1 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 3.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 66465,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 3.10
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 66465,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 3.30
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 1, Start = 65583 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 2, Start = 131103 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 3, Start = 196623 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 4, Start = 262143 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 5, Start = 327663 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 6, Start = 393183 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 7, Start = 458703 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 8, Start = 524223 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 9, Start = 589743 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 10, Start = 655263 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 11, Start = 720783 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 12, Start = 786303 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 13, Start = 851823 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 65457,
|
|||
|
|
Sequence = 14, Start = 917343 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x04", Length = 39249,
|
|||
|
|
Sequence = 15, Start = 982863 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 4.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 25137,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 2, Start = 230895 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 307377,
|
|||
|
|
Sequence = 3, Start = 476847 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 237825,
|
|||
|
|
Sequence = 4, Start = 784287 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 5.00
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 25137,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 2, Start = 230895 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 287217,
|
|||
|
|
Sequence = 3, Start = 476847 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 257985,
|
|||
|
|
Sequence = 4, Start = 764127 },
|
|||
|
|
},
|
|||
|
|
// PC-DOS 6.10
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 25137,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 225729,
|
|||
|
|
Sequence = 2, Start = 230895 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 3, Start = 456687 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 319473,
|
|||
|
|
Sequence = 4, Start = 702639 },
|
|||
|
|
},
|
|||
|
|
// Windows 95
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 205569,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 1, Start = 205695 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 267057,
|
|||
|
|
Sequence = 2, Start = 451647 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 287217,
|
|||
|
|
Sequence = 3, Start = 718767 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 17073,
|
|||
|
|
Sequence = 4, Start = 1006047 },
|
|||
|
|
},
|
|||
|
|
// Windows 95 OSR 2.5
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 307377,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 245889,
|
|||
|
|
Sequence = 1, Start = 307503 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 328545,
|
|||
|
|
Sequence = 2, Start = 553455 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 102753,
|
|||
|
|
Sequence = 3, Start = 882063 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 21105,
|
|||
|
|
Sequence = 4, Start = 984879 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 17073,
|
|||
|
|
Sequence = 5, Start = 1006047 },
|
|||
|
|
},
|
|||
|
|
// Windows NT 3.10
|
|||
|
|
new []{
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x07", Length = 204561,
|
|||
|
|
Sequence = 0, Start = 63 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x07", Length = 307377,
|
|||
|
|
Sequence = 1, Start = 204687 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 224721,
|
|||
|
|
Sequence = 2, Start = 512127 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x06", Length = 214641,
|
|||
|
|
Sequence = 3, Start = 736911 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x01", Length = 10017,
|
|||
|
|
Sequence = 4, Start = 951615 },
|
|||
|
|
new Partition{ Description = null, Name = null, Type = "0x07", Length = 60480,
|
|||
|
|
Sequence = 5, Start = 962640 },
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
[Test]
|
|||
|
|
public void Test()
|
|||
|
|
{
|
|||
|
|
for(int i = 0; i < testfiles.Length; i++)
|
|||
|
|
{
|
|||
|
|
string location = Path.Combine(Consts.TestFilesRoot, "partitions", "mbr", testfiles[i]);
|
|||
|
|
Filter filter = new LZip();
|
|||
|
|
filter.Open(location);
|
|||
|
|
ImagePlugin image = new VDI();
|
|||
|
|
Assert.AreEqual(true, image.OpenImage(filter), testfiles[i]);
|
|||
|
|
List<Partition> partitions = Core.Partitions.GetAll(image);
|
|||
|
|
Assert.AreEqual(wanted[i].Length, partitions.Count, testfiles[i]);
|
|||
|
|
for(int j = 0; j < partitions.Count; j++)
|
|||
|
|
{
|
|||
|
|
// Too chatty
|
|||
|
|
//Assert.AreEqual(wanted[i][j].PartitionDescription, partitions[j].PartitionDescription, testfiles[i]);
|
|||
|
|
Assert.AreEqual(wanted[i][j].Length * 512, partitions[j].Size, testfiles[i]);
|
|||
|
|
// Assert.AreEqual(wanted[i][j].Name, partitions[j].Name, testfiles[i]);
|
|||
|
|
Assert.AreEqual(wanted[i][j].Type, partitions[j].Type, testfiles[i]);
|
|||
|
|
Assert.AreEqual(wanted[i][j].Start * 512, partitions[j].Offset, testfiles[i]);
|
|||
|
|
Assert.AreEqual(wanted[i][j].Length, partitions[j].Length, testfiles[i]);
|
|||
|
|
Assert.AreEqual(wanted[i][j].Sequence, partitions[j].Sequence, testfiles[i]);
|
|||
|
|
Assert.AreEqual(wanted[i][j].Start, partitions[j].Start, testfiles[i]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|