mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Add field to propagate partition scheme on each partition.
This commit is contained in:
@@ -55,6 +55,8 @@ namespace DiscImageChef.CommonTypes
|
||||
public string Description;
|
||||
/// <summary>LBA of last partition sector</summary>
|
||||
public ulong End { get { return Start + Length - 1; }}
|
||||
/// <summary>Name of partition scheme that contains this partition</summary>
|
||||
public string Scheme;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -119,12 +119,15 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
foreach(LinuxEntry entry in table.entries)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = (ulong)(mapSector + entry.start);
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = (ulong)(mapSector + entry.start),
|
||||
Size = entry.size,
|
||||
Length = (ulong)(entry.size * sector.Length),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
part.Offset = part.Start * (ulong)sector.Length;
|
||||
part.Size = entry.size;
|
||||
part.Length = (ulong)(entry.size * sector.Length);
|
||||
part.Sequence = counter;
|
||||
if(entry.magic == LINUX_MAGIC || entry.magic == SWAP_MAGIC)
|
||||
{
|
||||
partitions.Add(part);
|
||||
@@ -145,13 +148,16 @@ namespace DiscImageChef.PartPlugins
|
||||
{
|
||||
foreach(RiscIxEntry entry in table.partitions)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = (ulong)(mapSector + entry.start);
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = (ulong)(mapSector + entry.start),
|
||||
Size = entry.length,
|
||||
Length = (ulong)(entry.length * sector.Length),
|
||||
Name = StringHandlers.CToString(entry.name, Encoding.GetEncoding("iso-8859-1")),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
part.Offset = part.Start * (ulong)sector.Length;
|
||||
part.Size = entry.length;
|
||||
part.Length = (ulong)(entry.length * sector.Length);
|
||||
part.Name = StringHandlers.CToString(entry.name, Encoding.GetEncoding("iso-8859-1"));
|
||||
part.Sequence = counter;
|
||||
if(entry.length > 0)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -161,6 +161,7 @@ namespace DiscImageChef.PartPlugins
|
||||
Sequence = sequence,
|
||||
Offset = old_entry.pdSize * ddm.sbBlockSize,
|
||||
Start = (old_entry.pdSize * ddm.sbBlockSize) / sector_size,
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
if(old_entry.pdFSID == HFS_MAGIC_OLD)
|
||||
@@ -279,7 +280,8 @@ namespace DiscImageChef.PartPlugins
|
||||
Offset = entry.start * entry_size,
|
||||
Size = entry.sectors * entry_size,
|
||||
Start = (entry.start * entry_size) / sector_size,
|
||||
Length = (entry.sectors * entry_size) / sector_size
|
||||
Length = (entry.sectors * entry_size) / sector_size,
|
||||
Scheme = Name
|
||||
};
|
||||
sb.AppendLine("Partition flags:");
|
||||
if(flags.HasFlag(AppleMapFlags.Valid))
|
||||
|
||||
@@ -148,20 +148,22 @@ namespace DiscImageChef.PartPlugins
|
||||
if(sectorSize == 2448 || sectorSize == 2352)
|
||||
sectorSize = 2048;
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Size = table.entries[i].length * sectorSize;
|
||||
part.Length = table.entries[i].length;
|
||||
part.Sequence = partitionSequence;
|
||||
part.Name = "";
|
||||
part.Offset = table.entries[i].start * sectorSize;
|
||||
part.Start = table.entries[i].start;
|
||||
|
||||
byte[] partType = new byte[3];
|
||||
partType[0] = (byte)((type & 0xFF0000) >> 16);
|
||||
partType[1] = (byte)((type & 0x00FF00) >> 8);
|
||||
partType[2] = (byte)(type & 0x0000FF);
|
||||
part.Type = Encoding.ASCII.GetString(partType);
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Size = table.entries[i].length * sectorSize,
|
||||
Length = table.entries[i].length,
|
||||
Sequence = partitionSequence,
|
||||
Name = "",
|
||||
Offset = table.entries[i].start * sectorSize,
|
||||
Start = table.entries[i].start,
|
||||
Type = Encoding.ASCII.GetString(partType),
|
||||
Scheme = Name
|
||||
};
|
||||
switch(type)
|
||||
{
|
||||
case TypeGEMDOS:
|
||||
@@ -237,20 +239,22 @@ namespace DiscImageChef.PartPlugins
|
||||
if(sectorSize == 2448 || sectorSize == 2352)
|
||||
sectorSize = 2048;
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Size = extendedTable.entries[j].length * sectorSize;
|
||||
part.Length = extendedTable.entries[j].length;
|
||||
part.Sequence = partitionSequence;
|
||||
part.Name = "";
|
||||
part.Offset = extendedTable.entries[j].start * sectorSize;
|
||||
part.Start = extendedTable.entries[j].start;
|
||||
|
||||
byte[] partType = new byte[3];
|
||||
partType[0] = (byte)((extendedType & 0xFF0000) >> 16);
|
||||
partType[1] = (byte)((extendedType & 0x00FF00) >> 8);
|
||||
partType[2] = (byte)(extendedType & 0x0000FF);
|
||||
part.Type = Encoding.ASCII.GetString(partType);
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Size = extendedTable.entries[j].length * sectorSize,
|
||||
Length = extendedTable.entries[j].length,
|
||||
Sequence = partitionSequence,
|
||||
Name = "",
|
||||
Offset = extendedTable.entries[j].start * sectorSize,
|
||||
Start = extendedTable.entries[j].start,
|
||||
Type = Encoding.ASCII.GetString(partType),
|
||||
Scheme = Name
|
||||
};
|
||||
switch(extendedType)
|
||||
{
|
||||
case TypeGEMDOS:
|
||||
@@ -317,20 +321,22 @@ namespace DiscImageChef.PartPlugins
|
||||
if(sectorSize == 2448 || sectorSize == 2352)
|
||||
sectorSize = 2048;
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Size = table.icdEntries[i].length * sectorSize;
|
||||
part.Length = table.icdEntries[i].length;
|
||||
part.Sequence = partitionSequence;
|
||||
part.Name = "";
|
||||
part.Offset = table.icdEntries[i].start * sectorSize;
|
||||
part.Start = table.icdEntries[i].start;
|
||||
|
||||
byte[] partType = new byte[3];
|
||||
partType[0] = (byte)((type & 0xFF0000) >> 16);
|
||||
partType[1] = (byte)((type & 0x00FF00) >> 8);
|
||||
partType[2] = (byte)(type & 0x0000FF);
|
||||
part.Type = Encoding.ASCII.GetString(partType);
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Size = table.icdEntries[i].length * sectorSize,
|
||||
Length = table.icdEntries[i].length,
|
||||
Sequence = partitionSequence,
|
||||
Name = "",
|
||||
Offset = table.icdEntries[i].start * sectorSize,
|
||||
Start = table.icdEntries[i].start,
|
||||
Type = Encoding.ASCII.GetString(partType),
|
||||
Scheme = Name
|
||||
};
|
||||
switch(type)
|
||||
{
|
||||
case TypeGEMDOS:
|
||||
|
||||
@@ -76,13 +76,16 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
foreach(BSDPartition entry in dl.d_partitions)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = entry.p_offset;
|
||||
part.Offset = (entry.p_offset * dl.d_secsize);
|
||||
part.Size = entry.p_size;
|
||||
part.Length = (entry.p_size * dl.d_secsize);
|
||||
part.Type = fsTypeToString(entry.p_fstype);
|
||||
part.Sequence = counter;
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = entry.p_offset,
|
||||
Offset = (entry.p_offset * dl.d_secsize),
|
||||
Size = entry.p_size,
|
||||
Length = (entry.p_size * dl.d_secsize),
|
||||
Type = fsTypeToString(entry.p_fstype),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
if(entry.p_fstype != fsType.Unused)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -70,12 +70,15 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
foreach(DECPartition entry in table.pt_part)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = entry.pi_blkoff;
|
||||
part.Offset = (ulong)(entry.pi_blkoff * sector.Length);
|
||||
part.Size = (ulong)entry.pi_nblocks;
|
||||
part.Length = (ulong)(entry.pi_nblocks * sector.Length);
|
||||
part.Sequence = counter;
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = entry.pi_blkoff,
|
||||
Offset = (ulong)(entry.pi_blkoff * sector.Length),
|
||||
Size = (ulong)entry.pi_nblocks,
|
||||
Length = (ulong)(entry.pi_nblocks * sector.Length),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
if(part.Size > 0)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -70,17 +70,20 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
foreach(Partition64 entry in disklabel.d_partitions)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = entry.p_boffset;
|
||||
part.Offset = entry.p_boffset;
|
||||
part.Size = entry.p_bsize;
|
||||
part.Length = entry.p_bsize;
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = entry.p_boffset,
|
||||
Offset = entry.p_boffset,
|
||||
Size = entry.p_bsize,
|
||||
Length = entry.p_bsize,
|
||||
Name = entry.p_stor_uuid.ToString(),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
if((BSD.fsType)entry.p_fstype == BSD.fsType.Other)
|
||||
part.Type = entry.p_type_uuid.ToString();
|
||||
else
|
||||
part.Type = BSD.fsTypeToString((BSD.fsType)entry.p_fstype);
|
||||
part.Name = entry.p_stor_uuid.ToString();
|
||||
part.Sequence = counter;
|
||||
if(entry.p_bsize > 0 && entry.p_boffset > 0)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -129,15 +129,18 @@ namespace DiscImageChef.PartPlugins
|
||||
if(entry.startLBA > imagePlugin.GetSectors() || entry.endLBA > imagePlugin.GetSectors())
|
||||
return false;
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Description = string.Format("ID: {0}", entry.partitionId);
|
||||
part.Size = (entry.endLBA - entry.startLBA + 1) * imagePlugin.GetSectorSize();
|
||||
part.Name = entry.name;
|
||||
part.Length = (entry.endLBA - entry.startLBA + 1);
|
||||
part.Sequence = pseq++;
|
||||
part.Offset = entry.startLBA * imagePlugin.GetSectorSize();
|
||||
part.Start = entry.startLBA;
|
||||
part.Type = GetGuidTypeName(entry.partitionType);
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Description = string.Format("ID: {0}", entry.partitionId),
|
||||
Size = (entry.endLBA - entry.startLBA + 1) * imagePlugin.GetSectorSize(),
|
||||
Name = entry.name,
|
||||
Length = (entry.endLBA - entry.startLBA + 1),
|
||||
Sequence = pseq++,
|
||||
Offset = entry.startLBA * imagePlugin.GetSectorSize(),
|
||||
Start = entry.startLBA,
|
||||
Type = GetGuidTypeName(entry.partitionType),
|
||||
Scheme = Name
|
||||
};
|
||||
DicConsole.DebugWriteLine("GPT Plugin", "part.PartitionType = {0}", part.Type);
|
||||
partitions.Add(part);
|
||||
}
|
||||
|
||||
@@ -98,13 +98,16 @@ namespace DiscImageChef.PartPlugins
|
||||
DicConsole.DebugWriteLine("Human68k plugin", "entry.length = {0}", entry.length);
|
||||
DicConsole.DebugWriteLine("Human68k plugin", "sectsPerUnit = {0} {1}", sectsPerUnit, imagePlugin.GetSectorSize());
|
||||
|
||||
Partition part = new Partition();
|
||||
part.Start = (entry.stateStart & 0xFFFFFF) * sectsPerUnit;
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = (entry.stateStart & 0xFFFFFF) * sectsPerUnit,
|
||||
Length = entry.length * sectsPerUnit,
|
||||
Type = StringHandlers.CToString(entry.name, Encoding.GetEncoding(932)),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
part.Offset = part.Start * (ulong)sector.Length;
|
||||
part.Length = entry.length * sectsPerUnit;
|
||||
part.Size = part.Length * (ulong)sector.Length;
|
||||
part.Type = StringHandlers.CToString(entry.name, Encoding.GetEncoding(932));
|
||||
part.Sequence = counter;
|
||||
if(entry.length > 0)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -145,19 +145,20 @@ namespace DiscImageChef.PartPlugins
|
||||
foreach(BSD.BSDPartition bsdPartition in bsdDisklabel.d_partitions)
|
||||
{
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Length = bsdPartition.p_size,
|
||||
Start = bsdPartition.p_offset,
|
||||
Size = bsdPartition.p_size * bsdDisklabel.d_secsize,
|
||||
Offset = bsdPartition.p_offset * bsdDisklabel.d_secsize,
|
||||
|
||||
part.Length = bsdPartition.p_size;
|
||||
part.Start = bsdPartition.p_offset;
|
||||
part.Size = bsdPartition.p_size * bsdDisklabel.d_secsize;
|
||||
part.Offset = bsdPartition.p_offset * bsdDisklabel.d_secsize;
|
||||
|
||||
part.Type = string.Format("BSD: {0}", bsdPartition.p_fstype);
|
||||
part.Name = BSD.fsTypeToString(bsdPartition.p_fstype);
|
||||
|
||||
part.Sequence = counter;
|
||||
part.Description = "Partition inside a BSD disklabel.";
|
||||
Type = string.Format("BSD: {0}", bsdPartition.p_fstype),
|
||||
Name = BSD.fsTypeToString(bsdPartition.p_fstype),
|
||||
|
||||
Sequence = counter,
|
||||
Description = "Partition inside a BSD disklabel.",
|
||||
Scheme = Name
|
||||
};
|
||||
if(bsdPartition.p_fstype != BSD.fsType.Unused)
|
||||
{
|
||||
partitions.Add(part);
|
||||
@@ -235,24 +236,26 @@ namespace DiscImageChef.PartPlugins
|
||||
// TODO: What if number of slices overlaps sector (>23)?
|
||||
for(int j = 0; j < vtoc.slices; j++)
|
||||
{
|
||||
UNIX.UNIXVTOCEntry vtoc_ent = new UNIX.UNIXVTOCEntry();
|
||||
|
||||
vtoc_ent.tag = (DiscImageChef.PartPlugins.UNIX.UNIX_TAG)BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 0); // 160/232 + j*12
|
||||
vtoc_ent.flags = BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 2); // 162/234 + j*12
|
||||
vtoc_ent.start = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 6); // 166/238 + j*12
|
||||
vtoc_ent.length = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 10); // 170/242 + j*12
|
||||
|
||||
UNIX.UNIXVTOCEntry vtoc_ent = new UNIX.UNIXVTOCEntry
|
||||
{
|
||||
tag = (UNIX.UNIX_TAG)BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 0), // 160/232 + j*12
|
||||
flags = BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 2), // 162/234 + j*12
|
||||
start = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 6), // 166/238 + j*12
|
||||
length = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 10) // 170/242 + j*12
|
||||
};
|
||||
if((vtoc_ent.flags & 0x200) == 0x200 && vtoc_ent.tag != UNIX.UNIX_TAG.EMPTY && vtoc_ent.tag != UNIX.UNIX_TAG.WHOLE)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
// TODO: Check if device bps == disklabel bps
|
||||
part.Start = vtoc_ent.start;
|
||||
part.Length = vtoc_ent.length;
|
||||
part.Offset = vtoc_ent.start * dl.bps;
|
||||
part.Size = vtoc_ent.length * dl.bps;
|
||||
part.Sequence = counter;
|
||||
part.Type = string.Format("UNIX: {0}", UNIX.decodeUNIXTAG(vtoc_ent.tag, isNewDL));
|
||||
|
||||
Start = vtoc_ent.start,
|
||||
Length = vtoc_ent.length,
|
||||
Offset = vtoc_ent.start * dl.bps,
|
||||
Size = vtoc_ent.length * dl.bps,
|
||||
Sequence = counter,
|
||||
Type = string.Format("UNIX: {0}", UNIX.decodeUNIXTAG(vtoc_ent.tag, isNewDL)),
|
||||
Scheme = Name
|
||||
};
|
||||
string info = "";
|
||||
|
||||
if((vtoc_ent.flags & 0x01) == 0x01)
|
||||
@@ -282,14 +285,16 @@ namespace DiscImageChef.PartPlugins
|
||||
{
|
||||
for(int j = 0; j < 16; j++)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Start = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 4);
|
||||
part.Length = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 8);
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Start = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 4),
|
||||
Length = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 8),
|
||||
Description = "Solaris slice.",
|
||||
Scheme = Name,
|
||||
Sequence = counter
|
||||
};
|
||||
part.Offset = part.Start * imagePlugin.GetSectorSize(); // 68+4+j*12
|
||||
part.Size = part.Length * imagePlugin.GetSectorSize(); // 68+8+j*12
|
||||
part.Description = "Solaris slice.";
|
||||
|
||||
part.Sequence = counter;
|
||||
|
||||
if(part.Size > 0)
|
||||
{
|
||||
@@ -313,15 +318,18 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
if(type == 0x81)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
minix_subs = true;
|
||||
part.Description = "Minix subpartition";
|
||||
part.Type = "Minix";
|
||||
part.Start = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 8);
|
||||
part.Length = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 12);
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Description = "Minix subpartition",
|
||||
Type = "Minix",
|
||||
Start = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 8),
|
||||
Length = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 12),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
part.Offset = part.Start * imagePlugin.GetSectorSize();
|
||||
part.Size = part.Length * imagePlugin.GetSectorSize();
|
||||
part.Sequence = counter;
|
||||
partitions.Add(part);
|
||||
counter++;
|
||||
}
|
||||
@@ -362,6 +370,7 @@ namespace DiscImageChef.PartPlugins
|
||||
part.Name = decodeMBRType(entry.type);
|
||||
part.Sequence = counter;
|
||||
part.Description = entry.status == 0x80 ? "Partition is bootable." : "";
|
||||
part.Scheme = Name;
|
||||
|
||||
counter++;
|
||||
|
||||
@@ -444,18 +453,18 @@ namespace DiscImageChef.PartPlugins
|
||||
foreach(BSD.BSDPartition bsdPartition in bsdDisklabel.d_partitions)
|
||||
{
|
||||
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
|
||||
part.Length = bsdPartition.p_size;
|
||||
part.Start = bsdPartition.p_offset;
|
||||
part.Size = bsdPartition.p_size * bsdDisklabel.d_secsize;
|
||||
part.Offset = bsdPartition.p_offset * bsdDisklabel.d_secsize;
|
||||
|
||||
part.Type = string.Format("BSD: {0}", bsdPartition.p_fstype);
|
||||
part.Name = BSD.fsTypeToString(bsdPartition.p_fstype);
|
||||
|
||||
part.Sequence = counter;
|
||||
part.Description = "Partition inside a BSD disklabel.";
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Length = bsdPartition.p_size,
|
||||
Start = bsdPartition.p_offset,
|
||||
Size = bsdPartition.p_size * bsdDisklabel.d_secsize,
|
||||
Offset = bsdPartition.p_offset * bsdDisklabel.d_secsize,
|
||||
Type = string.Format("BSD: {0}", bsdPartition.p_fstype),
|
||||
Name = BSD.fsTypeToString(bsdPartition.p_fstype),
|
||||
Sequence = counter,
|
||||
Description = "Partition inside a BSD disklabel.",
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
if(bsdPartition.p_fstype != BSD.fsType.Unused)
|
||||
{
|
||||
@@ -534,24 +543,26 @@ namespace DiscImageChef.PartPlugins
|
||||
// TODO: What if number of slices overlaps sector (>23)?
|
||||
for(int j = 0; j < vtoc.slices; j++)
|
||||
{
|
||||
UNIX.UNIXVTOCEntry vtoc_ent = new UNIX.UNIXVTOCEntry();
|
||||
|
||||
vtoc_ent.tag = (DiscImageChef.PartPlugins.UNIX.UNIX_TAG)BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 0); // 160/232 + j*12
|
||||
vtoc_ent.flags = BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 2); // 162/234 + j*12
|
||||
vtoc_ent.start = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 6); // 166/238 + j*12
|
||||
vtoc_ent.length = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 10); // 170/242 + j*12
|
||||
|
||||
UNIX.UNIXVTOCEntry vtoc_ent = new UNIX.UNIXVTOCEntry
|
||||
{
|
||||
tag = (UNIX.UNIX_TAG)BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 0), // 160/232 + j*12
|
||||
flags = BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 2), // 162/234 + j*12
|
||||
start = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 6), // 166/238 + j*12
|
||||
length = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 10) // 170/242 + j*12
|
||||
};
|
||||
if((vtoc_ent.flags & 0x200) == 0x200 && vtoc_ent.tag != UNIX.UNIX_TAG.EMPTY && vtoc_ent.tag != UNIX.UNIX_TAG.WHOLE)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
// TODO: Check if device bps == disklabel bps
|
||||
part.Start = vtoc_ent.start;
|
||||
part.Length = vtoc_ent.length;
|
||||
part.Offset = vtoc_ent.start * dl.bps;
|
||||
part.Size = vtoc_ent.length * dl.bps;
|
||||
part.Sequence = counter;
|
||||
part.Type = string.Format("UNIX: {0}", UNIX.decodeUNIXTAG(vtoc_ent.tag, isNewDL));
|
||||
|
||||
Start = vtoc_ent.start,
|
||||
Length = vtoc_ent.length,
|
||||
Offset = vtoc_ent.start * dl.bps,
|
||||
Size = vtoc_ent.length * dl.bps,
|
||||
Sequence = counter,
|
||||
Type = string.Format("UNIX: {0}", UNIX.decodeUNIXTAG(vtoc_ent.tag, isNewDL)),
|
||||
Scheme = Name
|
||||
};
|
||||
string info = "";
|
||||
|
||||
if((vtoc_ent.flags & 0x01) == 0x01)
|
||||
@@ -581,14 +592,16 @@ namespace DiscImageChef.PartPlugins
|
||||
{
|
||||
for(int j = 0; j < 16; j++)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Start = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 4);
|
||||
part.Length = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 8);
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Start = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 4),
|
||||
Length = BitConverter.ToUInt32(disklabel_sector, 68 + j * 12 + 8),
|
||||
Description = "Solaris slice.",
|
||||
Scheme = Name,
|
||||
Sequence = counter
|
||||
};
|
||||
part.Offset = part.Start * imagePlugin.GetSectorSize(); // 68+4+j*12
|
||||
part.Size = part.Length * imagePlugin.GetSectorSize(); // 68+8+j*12
|
||||
part.Description = "Solaris slice.";
|
||||
|
||||
part.Sequence = counter;
|
||||
|
||||
if(part.Size > 0)
|
||||
{
|
||||
@@ -612,15 +625,18 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
if(type == 0x81)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Description = "Minix subpartition",
|
||||
Type = "Minix",
|
||||
Start = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 8),
|
||||
Length = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 12),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
minix_subs = true;
|
||||
part.Description = "Minix subpartition";
|
||||
part.Type = "Minix";
|
||||
part.Start = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 8);
|
||||
part.Length = BitConverter.ToUInt32(disklabel_sector, 0x1BE + j * 16 + 12);
|
||||
part.Offset = part.Start * imagePlugin.GetSectorSize();
|
||||
part.Size = part.Length * imagePlugin.GetSectorSize();
|
||||
part.Sequence = counter;
|
||||
partitions.Add(part);
|
||||
counter++;
|
||||
}
|
||||
@@ -662,6 +678,7 @@ namespace DiscImageChef.PartPlugins
|
||||
part.Name = decodeMBRType(entry2.type);
|
||||
part.Sequence = counter;
|
||||
part.Description = entry2.status == 0x80 ? "Partition is bootable." : "";
|
||||
part.Scheme = Name;
|
||||
|
||||
counter++;
|
||||
|
||||
|
||||
@@ -161,7 +161,8 @@ namespace DiscImageChef.PartPlugins
|
||||
Sequence = (ulong)i,
|
||||
Name = StringHandlers.CToString(label.dl_dt.d_partitions[i].p_mountpt),
|
||||
Length = (ulong)((label.dl_dt.d_partitions[i].p_size * label.dl_dt.d_secsize) / sector_size),
|
||||
Start = (ulong)(((label.dl_dt.d_partitions[i].p_base + label.dl_dt.d_front) * label.dl_dt.d_secsize) / sector_size)
|
||||
Start = (ulong)(((label.dl_dt.d_partitions[i].p_base + label.dl_dt.d_front) * label.dl_dt.d_secsize) / sector_size),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
if(part.Start + part.Length > imagePlugin.ImageInfo.sectors)
|
||||
|
||||
@@ -76,14 +76,17 @@ namespace DiscImageChef.PartPlugins
|
||||
entry.dp_ecyl > 0)
|
||||
{
|
||||
|
||||
Partition part = new Partition();
|
||||
part.Start = CHStoLBA(entry.dp_scyl, entry.dp_shd, entry.dp_ssect);
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = CHStoLBA(entry.dp_scyl, entry.dp_shd, entry.dp_ssect),
|
||||
Type = string.Format("{0}", (entry.dp_sid << 8) | entry.dp_mid),
|
||||
Name = StringHandlers.CToString(entry.dp_name, Encoding.GetEncoding(932)),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
part.Offset = part.Start * imagePlugin.GetSectorSize();
|
||||
part.Length = CHStoLBA(entry.dp_ecyl, entry.dp_ehd, entry.dp_esect) - part.Start;
|
||||
part.Size = part.Length * imagePlugin.GetSectorSize();
|
||||
part.Type = string.Format("{0}", (entry.dp_sid << 8) | entry.dp_mid);
|
||||
part.Name = StringHandlers.CToString(entry.dp_name, Encoding.GetEncoding(932));
|
||||
part.Sequence = counter;
|
||||
|
||||
if((entry.dp_sid & 0x7F) == 0x44 &&
|
||||
(entry.dp_mid & 0x7F) == 0x14 &&
|
||||
|
||||
@@ -1072,14 +1072,15 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "Found BadBlock block");
|
||||
|
||||
BadBlockList chainEntry = new BadBlockList();
|
||||
chainEntry.magic = BigEndianBitConverter.ToUInt32(sector, 0x00);
|
||||
chainEntry.size = BigEndianBitConverter.ToUInt32(sector, 0x04);
|
||||
chainEntry.checksum = BigEndianBitConverter.ToInt32(sector, 0x08);
|
||||
chainEntry.targetID = BigEndianBitConverter.ToUInt32(sector, 0x0C);
|
||||
chainEntry.next_ptr = BigEndianBitConverter.ToUInt32(sector, 0x10);
|
||||
chainEntry.reserved = BigEndianBitConverter.ToUInt32(sector, 0x14);
|
||||
|
||||
BadBlockList chainEntry = new BadBlockList
|
||||
{
|
||||
magic = BigEndianBitConverter.ToUInt32(sector, 0x00),
|
||||
size = BigEndianBitConverter.ToUInt32(sector, 0x04),
|
||||
checksum = BigEndianBitConverter.ToInt32(sector, 0x08),
|
||||
targetID = BigEndianBitConverter.ToUInt32(sector, 0x0C),
|
||||
next_ptr = BigEndianBitConverter.ToUInt32(sector, 0x10),
|
||||
reserved = BigEndianBitConverter.ToUInt32(sector, 0x14)
|
||||
};
|
||||
ulong entries = (chainEntry.size - 6) / 2;
|
||||
chainEntry.blockPairs = new BadBlockEntry[entries];
|
||||
|
||||
@@ -1118,57 +1119,62 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "Found PartitionEntry block");
|
||||
|
||||
PartitionEntry partEntry = new PartitionEntry();
|
||||
partEntry.dosEnvVec = new DOSEnvironmentVector();
|
||||
PartitionEntry partEntry = new PartitionEntry
|
||||
{
|
||||
magic = BigEndianBitConverter.ToUInt32(sector, 0x00),
|
||||
size = BigEndianBitConverter.ToUInt32(sector, 0x04),
|
||||
checksum = BigEndianBitConverter.ToInt32(sector, 0x08),
|
||||
targetID = BigEndianBitConverter.ToUInt32(sector, 0x0C),
|
||||
next_ptr = BigEndianBitConverter.ToUInt32(sector, 0x10),
|
||||
flags = BigEndianBitConverter.ToUInt32(sector, 0x14),
|
||||
reserved1 = BigEndianBitConverter.ToUInt32(sector, 0x18),
|
||||
reserved2 = BigEndianBitConverter.ToUInt32(sector, 0x1C),
|
||||
devFlags = BigEndianBitConverter.ToUInt32(sector, 0x20),
|
||||
driveNameLen = sector[0x24],
|
||||
reserved3 = BigEndianBitConverter.ToUInt32(sector, 0x44),
|
||||
reserved4 = BigEndianBitConverter.ToUInt32(sector, 0x48),
|
||||
reserved5 = BigEndianBitConverter.ToUInt32(sector, 0x4C),
|
||||
reserved6 = BigEndianBitConverter.ToUInt32(sector, 0x50),
|
||||
reserved7 = BigEndianBitConverter.ToUInt32(sector, 0x54),
|
||||
reserved8 = BigEndianBitConverter.ToUInt32(sector, 0x58),
|
||||
reserved9 = BigEndianBitConverter.ToUInt32(sector, 0x5C),
|
||||
reserved10 = BigEndianBitConverter.ToUInt32(sector, 0x60),
|
||||
reserved11 = BigEndianBitConverter.ToUInt32(sector, 0x64),
|
||||
reserved12 = BigEndianBitConverter.ToUInt32(sector, 0x68),
|
||||
reserved13 = BigEndianBitConverter.ToUInt32(sector, 0x6C),
|
||||
reserved14 = BigEndianBitConverter.ToUInt32(sector, 0x70),
|
||||
reserved15 = BigEndianBitConverter.ToUInt32(sector, 0x74),
|
||||
reserved16 = BigEndianBitConverter.ToUInt32(sector, 0x78),
|
||||
reserved17 = BigEndianBitConverter.ToUInt32(sector, 0x7C),
|
||||
|
||||
dosEnvVec = new DOSEnvironmentVector
|
||||
{
|
||||
size = BigEndianBitConverter.ToUInt32(sector, 0x80),
|
||||
block_size = BigEndianBitConverter.ToUInt32(sector, 0x84),
|
||||
sec_org = BigEndianBitConverter.ToUInt32(sector, 0x88),
|
||||
surfaces = BigEndianBitConverter.ToUInt32(sector, 0x8C),
|
||||
spb = BigEndianBitConverter.ToUInt32(sector, 0x90),
|
||||
bpt = BigEndianBitConverter.ToUInt32(sector, 0x94),
|
||||
reservedblocks = BigEndianBitConverter.ToUInt32(sector, 0x98),
|
||||
prealloc = BigEndianBitConverter.ToUInt32(sector, 0x9C),
|
||||
interleave = BigEndianBitConverter.ToUInt32(sector, 0xA0),
|
||||
lowCylinder = BigEndianBitConverter.ToUInt32(sector, 0xA4),
|
||||
highCylinder = BigEndianBitConverter.ToUInt32(sector, 0xA8),
|
||||
numBuffer = BigEndianBitConverter.ToUInt32(sector, 0xAC),
|
||||
bufMemType = BigEndianBitConverter.ToUInt32(sector, 0xB0),
|
||||
maxTransfer = BigEndianBitConverter.ToUInt32(sector, 0xB4),
|
||||
Mask = BigEndianBitConverter.ToUInt32(sector, 0xB8),
|
||||
bootPriority = BigEndianBitConverter.ToUInt32(sector, 0xBC),
|
||||
dosType = BigEndianBitConverter.ToUInt32(sector, 0xC0),
|
||||
baud = BigEndianBitConverter.ToUInt32(sector, 0xC4),
|
||||
control = BigEndianBitConverter.ToUInt32(sector, 0xC8),
|
||||
bootBlocks = BigEndianBitConverter.ToUInt32(sector, 0xCC)
|
||||
}
|
||||
};
|
||||
|
||||
byte[] driveName = new byte[32];
|
||||
partEntry.magic = BigEndianBitConverter.ToUInt32(sector, 0x00);
|
||||
partEntry.size = BigEndianBitConverter.ToUInt32(sector, 0x04);
|
||||
partEntry.checksum = BigEndianBitConverter.ToInt32(sector, 0x08);
|
||||
partEntry.targetID = BigEndianBitConverter.ToUInt32(sector, 0x0C);
|
||||
partEntry.next_ptr = BigEndianBitConverter.ToUInt32(sector, 0x10);
|
||||
partEntry.flags = BigEndianBitConverter.ToUInt32(sector, 0x14);
|
||||
partEntry.reserved1 = BigEndianBitConverter.ToUInt32(sector, 0x18);
|
||||
partEntry.reserved2 = BigEndianBitConverter.ToUInt32(sector, 0x1C);
|
||||
partEntry.devFlags = BigEndianBitConverter.ToUInt32(sector, 0x20);
|
||||
partEntry.driveNameLen = sector[0x24];
|
||||
Array.Copy(sector, 0x24, driveName, 0, 32);
|
||||
partEntry.driveName = StringHandlers.PascalToString(driveName, Encoding.GetEncoding("iso-8859-1"));
|
||||
partEntry.reserved3 = BigEndianBitConverter.ToUInt32(sector, 0x44);
|
||||
partEntry.reserved4 = BigEndianBitConverter.ToUInt32(sector, 0x48);
|
||||
partEntry.reserved5 = BigEndianBitConverter.ToUInt32(sector, 0x4C);
|
||||
partEntry.reserved6 = BigEndianBitConverter.ToUInt32(sector, 0x50);
|
||||
partEntry.reserved7 = BigEndianBitConverter.ToUInt32(sector, 0x54);
|
||||
partEntry.reserved8 = BigEndianBitConverter.ToUInt32(sector, 0x58);
|
||||
partEntry.reserved9 = BigEndianBitConverter.ToUInt32(sector, 0x5C);
|
||||
partEntry.reserved10 = BigEndianBitConverter.ToUInt32(sector, 0x60);
|
||||
partEntry.reserved11 = BigEndianBitConverter.ToUInt32(sector, 0x64);
|
||||
partEntry.reserved12 = BigEndianBitConverter.ToUInt32(sector, 0x68);
|
||||
partEntry.reserved13 = BigEndianBitConverter.ToUInt32(sector, 0x6C);
|
||||
partEntry.reserved14 = BigEndianBitConverter.ToUInt32(sector, 0x70);
|
||||
partEntry.reserved15 = BigEndianBitConverter.ToUInt32(sector, 0x74);
|
||||
partEntry.reserved16 = BigEndianBitConverter.ToUInt32(sector, 0x78);
|
||||
partEntry.reserved17 = BigEndianBitConverter.ToUInt32(sector, 0x7C);
|
||||
|
||||
partEntry.dosEnvVec.size = BigEndianBitConverter.ToUInt32(sector, 0x80);
|
||||
partEntry.dosEnvVec.block_size = BigEndianBitConverter.ToUInt32(sector, 0x84);
|
||||
partEntry.dosEnvVec.sec_org = BigEndianBitConverter.ToUInt32(sector, 0x88);
|
||||
partEntry.dosEnvVec.surfaces = BigEndianBitConverter.ToUInt32(sector, 0x8C);
|
||||
partEntry.dosEnvVec.spb = BigEndianBitConverter.ToUInt32(sector, 0x90);
|
||||
partEntry.dosEnvVec.bpt = BigEndianBitConverter.ToUInt32(sector, 0x94);
|
||||
partEntry.dosEnvVec.reservedblocks = BigEndianBitConverter.ToUInt32(sector, 0x98);
|
||||
partEntry.dosEnvVec.prealloc = BigEndianBitConverter.ToUInt32(sector, 0x9C);
|
||||
partEntry.dosEnvVec.interleave = BigEndianBitConverter.ToUInt32(sector, 0xA0);
|
||||
partEntry.dosEnvVec.lowCylinder = BigEndianBitConverter.ToUInt32(sector, 0xA4);
|
||||
partEntry.dosEnvVec.highCylinder = BigEndianBitConverter.ToUInt32(sector, 0xA8);
|
||||
partEntry.dosEnvVec.numBuffer = BigEndianBitConverter.ToUInt32(sector, 0xAC);
|
||||
partEntry.dosEnvVec.bufMemType = BigEndianBitConverter.ToUInt32(sector, 0xB0);
|
||||
partEntry.dosEnvVec.maxTransfer = BigEndianBitConverter.ToUInt32(sector, 0xB4);
|
||||
partEntry.dosEnvVec.Mask = BigEndianBitConverter.ToUInt32(sector, 0xB8);
|
||||
partEntry.dosEnvVec.bootPriority = BigEndianBitConverter.ToUInt32(sector, 0xBC);
|
||||
partEntry.dosEnvVec.dosType = BigEndianBitConverter.ToUInt32(sector, 0xC0);
|
||||
partEntry.dosEnvVec.baud = BigEndianBitConverter.ToUInt32(sector, 0xC4);
|
||||
partEntry.dosEnvVec.control = BigEndianBitConverter.ToUInt32(sector, 0xC8);
|
||||
partEntry.dosEnvVec.bootBlocks = BigEndianBitConverter.ToUInt32(sector, 0xCC);
|
||||
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "partEntry.magic = 0x{0:X8}", partEntry.magic);
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "partEntry.size = {0} longs, {1} bytes", partEntry.size, partEntry.size * 4);
|
||||
@@ -1238,30 +1244,32 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "Found FileSystemHeader block");
|
||||
|
||||
FileSystemHeader FSHD = new FileSystemHeader();
|
||||
FSHD.dnode = new DeviceNode();
|
||||
|
||||
FSHD.magic = BigEndianBitConverter.ToUInt32(sector, 0x00);
|
||||
FSHD.size = BigEndianBitConverter.ToUInt32(sector, 0x04);
|
||||
FSHD.checksum = BigEndianBitConverter.ToInt32(sector, 0x08);
|
||||
FSHD.targetID = BigEndianBitConverter.ToUInt32(sector, 0x0C);
|
||||
FSHD.next_ptr = BigEndianBitConverter.ToUInt32(sector, 0x10);
|
||||
FSHD.flags = BigEndianBitConverter.ToUInt32(sector, 0x14);
|
||||
FSHD.reserved1 = BigEndianBitConverter.ToUInt32(sector, 0x18);
|
||||
FSHD.reserved2 = BigEndianBitConverter.ToUInt32(sector, 0x1C);
|
||||
FSHD.dosType = BigEndianBitConverter.ToUInt32(sector, 0x20);
|
||||
FSHD.version = BigEndianBitConverter.ToUInt32(sector, 0x24);
|
||||
FSHD.patchFlags = BigEndianBitConverter.ToUInt32(sector, 0x28);
|
||||
|
||||
FSHD.dnode.type = BigEndianBitConverter.ToUInt32(sector, 0x2C);
|
||||
FSHD.dnode.task = BigEndianBitConverter.ToUInt32(sector, 0x30);
|
||||
FSHD.dnode.locked = BigEndianBitConverter.ToUInt32(sector, 0x34);
|
||||
FSHD.dnode.handler = BigEndianBitConverter.ToUInt32(sector, 0x38);
|
||||
FSHD.dnode.stackSize = BigEndianBitConverter.ToUInt32(sector, 0x3C);
|
||||
FSHD.dnode.priority = BigEndianBitConverter.ToUInt32(sector, 0x40);
|
||||
FSHD.dnode.startup = BigEndianBitConverter.ToUInt32(sector, 0x44);
|
||||
FSHD.dnode.seglist_ptr = BigEndianBitConverter.ToUInt32(sector, 0x48);
|
||||
FSHD.dnode.global_vec = BigEndianBitConverter.ToUInt32(sector, 0x4C);
|
||||
FileSystemHeader FSHD = new FileSystemHeader
|
||||
{
|
||||
magic = BigEndianBitConverter.ToUInt32(sector, 0x00),
|
||||
size = BigEndianBitConverter.ToUInt32(sector, 0x04),
|
||||
checksum = BigEndianBitConverter.ToInt32(sector, 0x08),
|
||||
targetID = BigEndianBitConverter.ToUInt32(sector, 0x0C),
|
||||
next_ptr = BigEndianBitConverter.ToUInt32(sector, 0x10),
|
||||
flags = BigEndianBitConverter.ToUInt32(sector, 0x14),
|
||||
reserved1 = BigEndianBitConverter.ToUInt32(sector, 0x18),
|
||||
reserved2 = BigEndianBitConverter.ToUInt32(sector, 0x1C),
|
||||
dosType = BigEndianBitConverter.ToUInt32(sector, 0x20),
|
||||
version = BigEndianBitConverter.ToUInt32(sector, 0x24),
|
||||
patchFlags = BigEndianBitConverter.ToUInt32(sector, 0x28),
|
||||
dnode = new DeviceNode
|
||||
{
|
||||
type = BigEndianBitConverter.ToUInt32(sector, 0x2C),
|
||||
task = BigEndianBitConverter.ToUInt32(sector, 0x30),
|
||||
locked = BigEndianBitConverter.ToUInt32(sector, 0x34),
|
||||
handler = BigEndianBitConverter.ToUInt32(sector, 0x38),
|
||||
stackSize = BigEndianBitConverter.ToUInt32(sector, 0x3C),
|
||||
priority = BigEndianBitConverter.ToUInt32(sector, 0x40),
|
||||
startup = BigEndianBitConverter.ToUInt32(sector, 0x44),
|
||||
seglist_ptr = BigEndianBitConverter.ToUInt32(sector, 0x48),
|
||||
global_vec = BigEndianBitConverter.ToUInt32(sector, 0x4C)
|
||||
}
|
||||
};
|
||||
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.magic = 0x{0:X8}", FSHD.magic);
|
||||
DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.size = {0} longs, {1} bytes", FSHD.size, FSHD.size * 4);
|
||||
@@ -1335,16 +1343,18 @@ namespace DiscImageChef.PartPlugins
|
||||
ulong sequence = 0;
|
||||
foreach(PartitionEntry RDBEntry in PartitionEntries)
|
||||
{
|
||||
CommonTypes.Partition entry = new CommonTypes.Partition();
|
||||
|
||||
entry.Description = AmigaDOSTypeToDescriptionString(RDBEntry.dosEnvVec.dosType);
|
||||
entry.Name = RDBEntry.driveName;
|
||||
entry.Sequence = sequence;
|
||||
entry.Length = (RDBEntry.dosEnvVec.highCylinder + 1 - RDBEntry.dosEnvVec.lowCylinder) * RDBEntry.dosEnvVec.surfaces * RDBEntry.dosEnvVec.bpt;
|
||||
entry.Start = RDBEntry.dosEnvVec.lowCylinder * RDBEntry.dosEnvVec.surfaces * RDBEntry.dosEnvVec.bpt;
|
||||
CommonTypes.Partition entry = new CommonTypes.Partition
|
||||
{
|
||||
Description = AmigaDOSTypeToDescriptionString(RDBEntry.dosEnvVec.dosType),
|
||||
Name = RDBEntry.driveName,
|
||||
Sequence = sequence,
|
||||
Length = (RDBEntry.dosEnvVec.highCylinder + 1 - RDBEntry.dosEnvVec.lowCylinder) * RDBEntry.dosEnvVec.surfaces * RDBEntry.dosEnvVec.bpt,
|
||||
Start = RDBEntry.dosEnvVec.lowCylinder * RDBEntry.dosEnvVec.surfaces * RDBEntry.dosEnvVec.bpt,
|
||||
Type = AmigaDOSTypeToString(RDBEntry.dosEnvVec.dosType),
|
||||
Scheme = Name
|
||||
};
|
||||
entry.Offset = entry.Start * RDB.block_size;
|
||||
entry.Size = entry.Length * RDB.block_size;
|
||||
entry.Type = AmigaDOSTypeToString(RDBEntry.dosEnvVec.dosType);
|
||||
|
||||
partitions.Add(entry);
|
||||
sequence++;
|
||||
|
||||
@@ -70,13 +70,16 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
foreach(RioKarmaEntry entry in table.entries)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = entry.offset;
|
||||
part.Offset = (ulong)(entry.offset * sector.Length);
|
||||
part.Size = entry.size;
|
||||
part.Length = (ulong)(entry.size * sector.Length);
|
||||
part.Type = "Rio Karma";
|
||||
part.Sequence = counter;
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = entry.offset,
|
||||
Offset = (ulong)(entry.offset * sector.Length),
|
||||
Size = entry.size,
|
||||
Length = (ulong)(entry.size * sector.Length),
|
||||
Type = "Rio Karma",
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
if(entry.type == EntryMagic)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -69,13 +69,16 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
foreach(SGIPartition entry in disklabel.partitions)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = entry.first_block;
|
||||
part.Offset = (entry.first_block * 512);
|
||||
part.Size = entry.num_blocks;
|
||||
part.Length = (entry.num_blocks * 512);
|
||||
part.Type = string.Format("{0}", entry.type);
|
||||
part.Sequence = counter;
|
||||
Partition part = new Partition()
|
||||
{
|
||||
Start = entry.first_block,
|
||||
Offset = (entry.first_block * 512),
|
||||
Size = entry.num_blocks,
|
||||
Length = (entry.num_blocks * 512),
|
||||
Type = string.Format("{0}", entry.type),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
if(part.Size > 0)
|
||||
{
|
||||
partitions.Add(part);
|
||||
|
||||
@@ -91,15 +91,18 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
byte[] sunSector = imagePlugin.ReadSector(0);
|
||||
byte[] tmpString;
|
||||
SunDiskLabel sdl = new SunDiskLabel();
|
||||
sdl.vtoc = new SunVTOC();
|
||||
sdl.spare = new byte[148];
|
||||
sdl.vtoc.infos = new SunInfo[8];
|
||||
sdl.vtoc.bootinfo = new uint[3];
|
||||
sdl.vtoc.reserved = new byte[40];
|
||||
sdl.vtoc.timestamp = new uint[8];
|
||||
sdl.partitions = new SunPartition[8];
|
||||
|
||||
SunDiskLabel sdl = new SunDiskLabel
|
||||
{
|
||||
spare = new byte[148],
|
||||
vtoc = new SunVTOC
|
||||
{
|
||||
infos = new SunInfo[8],
|
||||
bootinfo = new uint[3],
|
||||
reserved = new byte[40],
|
||||
timestamp = new uint[8]
|
||||
},
|
||||
partitions = new SunPartition[8]
|
||||
};
|
||||
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
|
||||
|
||||
tmpString = new byte[128];
|
||||
@@ -113,9 +116,11 @@ namespace DiscImageChef.PartPlugins
|
||||
sdl.vtoc.nparts = BigEndianBitConverter.ToUInt16(sunSector, 0x80 + 0x0C);
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
sdl.vtoc.infos[i] = new SunInfo();
|
||||
sdl.vtoc.infos[i].id = BigEndianBitConverter.ToUInt16(sunSector, 0x80 + 0x0E + i * 4 + 0x00);
|
||||
sdl.vtoc.infos[i].flags = BigEndianBitConverter.ToUInt16(sunSector, 0x80 + 0x0E + i * 4 + 0x02);
|
||||
sdl.vtoc.infos[i] = new SunInfo
|
||||
{
|
||||
id = BigEndianBitConverter.ToUInt16(sunSector, 0x80 + 0x0E + i * 4 + 0x00),
|
||||
flags = BigEndianBitConverter.ToUInt16(sunSector, 0x80 + 0x0E + i * 4 + 0x02)
|
||||
};
|
||||
}
|
||||
sdl.vtoc.padding = BigEndianBitConverter.ToUInt16(sunSector, 0x80 + 0x2E);
|
||||
for(int i = 0; i < 3; i++)
|
||||
@@ -143,9 +148,11 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
sdl.partitions[i] = new SunPartition();
|
||||
sdl.partitions[i].start_cylinder = BigEndianBitConverter.ToUInt32(sunSector, 0x1BC + i * 8 + 0x00);
|
||||
sdl.partitions[i].num_sectors = BigEndianBitConverter.ToUInt32(sunSector, 0x1BC + i * 8 + 0x04);
|
||||
sdl.partitions[i] = new SunPartition
|
||||
{
|
||||
start_cylinder = BigEndianBitConverter.ToUInt32(sunSector, 0x1BC + i * 8 + 0x00),
|
||||
num_sectors = BigEndianBitConverter.ToUInt32(sunSector, 0x1BC + i * 8 + 0x04)
|
||||
};
|
||||
}
|
||||
|
||||
sdl.magic = BigEndianBitConverter.ToUInt16(sunSector, 0x1FC);
|
||||
@@ -200,20 +207,22 @@ namespace DiscImageChef.PartPlugins
|
||||
{
|
||||
if((SunTypes)sdl.vtoc.infos[i].id != SunTypes.SunWholeDisk && sdl.partitions[i].num_sectors > 0)
|
||||
{
|
||||
CommonTypes.Partition part = new CommonTypes.Partition();
|
||||
part.Description = SunFlagsToString((SunFlags)sdl.vtoc.infos[i].flags);
|
||||
CommonTypes.Partition part = new CommonTypes.Partition
|
||||
{
|
||||
Description = SunFlagsToString((SunFlags)sdl.vtoc.infos[i].flags),
|
||||
#pragma warning disable IDE0004 // Remove Unnecessary Cast
|
||||
part.Size = (ulong)sdl.partitions[i].num_sectors * (ulong)imagePlugin.GetSectorSize();
|
||||
Size = (ulong)sdl.partitions[i].num_sectors * (ulong)imagePlugin.GetSectorSize(),
|
||||
#pragma warning restore IDE0004 // Remove Unnecessary Cast
|
||||
part.Name = "";
|
||||
part.Length = sdl.partitions[i].num_sectors;
|
||||
part.Sequence = (ulong)i;
|
||||
Name = "",
|
||||
Length = sdl.partitions[i].num_sectors,
|
||||
Sequence = (ulong)i,
|
||||
#pragma warning disable IDE0004 // Remove Unnecessary Cast
|
||||
part.Offset = (ulong)sdl.partitions[i].start_cylinder * (ulong)sectorsPerCylinder * (ulong)imagePlugin.GetSectorSize();
|
||||
Offset = (ulong)sdl.partitions[i].start_cylinder * (ulong)sectorsPerCylinder * (ulong)imagePlugin.GetSectorSize(),
|
||||
#pragma warning restore IDE0004 // Remove Unnecessary Cast
|
||||
part.Start = sdl.partitions[i].start_cylinder * sectorsPerCylinder;
|
||||
part.Type = SunIdToString((SunTypes)sdl.vtoc.infos[i].id);
|
||||
|
||||
Start = sdl.partitions[i].start_cylinder * sectorsPerCylinder,
|
||||
Type = SunIdToString((SunTypes)sdl.vtoc.infos[i].id),
|
||||
Scheme = Name
|
||||
};
|
||||
if(part.Start > imagePlugin.GetSectors() || (part.Start + part.Length) > imagePlugin.GetSectors())
|
||||
return false;
|
||||
|
||||
|
||||
@@ -133,23 +133,25 @@ namespace DiscImageChef.PartPlugins
|
||||
// TODO: What if number of slices overlaps sector (>23)?
|
||||
for(int j = 0; j < vtoc.slices; j++)
|
||||
{
|
||||
UNIXVTOCEntry vtoc_ent = new UNIXVTOCEntry();
|
||||
|
||||
vtoc_ent.tag = (UNIX_TAG)BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 0); // 160/232 + j*12
|
||||
vtoc_ent.flags = BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 2); // 162/234 + j*12
|
||||
vtoc_ent.start = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 6); // 166/238 + j*12
|
||||
vtoc_ent.length = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 10); // 170/242 + j*12
|
||||
|
||||
UNIXVTOCEntry vtoc_ent = new UNIXVTOCEntry
|
||||
{
|
||||
tag = (UNIX_TAG)BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 0), // 160/232 + j*12
|
||||
flags = BitConverter.ToUInt16(unix_dl_sector, 160 + vtocoffset + j * 12 + 2), // 162/234 + j*12
|
||||
start = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 6), // 166/238 + j*12
|
||||
length = BitConverter.ToUInt32(unix_dl_sector, 160 + vtocoffset + j * 12 + 10) // 170/242 + j*12
|
||||
};
|
||||
if((vtoc_ent.flags & 0x200) == 0x200 && vtoc_ent.tag != UNIX_TAG.EMPTY && vtoc_ent.tag != UNIX_TAG.WHOLE)
|
||||
{
|
||||
Partition part = new Partition();
|
||||
part.Start = vtoc_ent.start;
|
||||
part.Length = vtoc_ent.length;
|
||||
part.Offset = vtoc_ent.start * dl.bps;
|
||||
part.Size = vtoc_ent.length * dl.bps;
|
||||
part.Sequence = counter;
|
||||
part.Type = string.Format("UNIX: {0}", decodeUNIXTAG(vtoc_ent.tag, isNewDL));
|
||||
|
||||
Partition part = new Partition
|
||||
{
|
||||
Start = vtoc_ent.start,
|
||||
Length = vtoc_ent.length,
|
||||
Offset = vtoc_ent.start * dl.bps,
|
||||
Size = vtoc_ent.length * dl.bps,
|
||||
Sequence = counter,
|
||||
Type = string.Format("UNIX: {0}", decodeUNIXTAG(vtoc_ent.tag, isNewDL)),
|
||||
Scheme = Name
|
||||
};
|
||||
string info = "";
|
||||
|
||||
if((vtoc_ent.flags & 0x01) == 0x01)
|
||||
|
||||
@@ -90,21 +90,27 @@ namespace DiscImageChef.PartPlugins
|
||||
if(table.magic == Xbox360DevKitMagic && table.contentOff + table.contentLen <= imagePlugin.ImageInfo.sectors &&
|
||||
table.dashboardOff + table.dashboardLen <= imagePlugin.ImageInfo.sectors)
|
||||
{
|
||||
Partition contentPart = new Partition();
|
||||
contentPart.Description = "Content volume";
|
||||
contentPart.Size = (ulong)table.contentLen * (ulong)imagePlugin.ImageInfo.sectorSize;
|
||||
contentPart.Length = table.contentLen;
|
||||
contentPart.Sequence = 1;
|
||||
contentPart.Offset = (ulong)table.contentOff * (ulong)imagePlugin.ImageInfo.sectorSize;
|
||||
contentPart.Start = table.contentOff;
|
||||
Partition contentPart = new Partition
|
||||
{
|
||||
Description = "Content volume",
|
||||
Size = (ulong)table.contentLen * imagePlugin.ImageInfo.sectorSize,
|
||||
Length = table.contentLen,
|
||||
Sequence = 1,
|
||||
Offset = (ulong)table.contentOff * imagePlugin.ImageInfo.sectorSize,
|
||||
Start = table.contentOff,
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition dashboardPart = new Partition();
|
||||
dashboardPart.Description = "Dashboard volume";
|
||||
dashboardPart.Size = (ulong)table.dashboardLen * (ulong)imagePlugin.ImageInfo.sectorSize;
|
||||
dashboardPart.Length = table.dashboardLen;
|
||||
dashboardPart.Sequence = 2;
|
||||
dashboardPart.Offset = (ulong)table.dashboardOff * (ulong)imagePlugin.ImageInfo.sectorSize;
|
||||
dashboardPart.Start = table.dashboardOff;
|
||||
Partition dashboardPart = new Partition
|
||||
{
|
||||
Description = "Dashboard volume",
|
||||
Size = (ulong)table.dashboardLen * imagePlugin.ImageInfo.sectorSize,
|
||||
Length = table.dashboardLen,
|
||||
Sequence = 2,
|
||||
Offset = (ulong)table.dashboardOff * imagePlugin.ImageInfo.sectorSize,
|
||||
Start = table.dashboardOff,
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
partitions.Add(contentPart);
|
||||
partitions.Add(dashboardPart);
|
||||
@@ -121,21 +127,27 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
if(temp == XboxCigam)
|
||||
{
|
||||
Partition sysCachePart = new Partition();
|
||||
sysCachePart.Description = "System cache";
|
||||
sysCachePart.Size = MemoryUnitDataOff;
|
||||
sysCachePart.Length = (ulong)(MemoryUnitDataOff / imagePlugin.ImageInfo.sectorSize);
|
||||
sysCachePart.Sequence = 1;
|
||||
sysCachePart.Offset = 0;
|
||||
sysCachePart.Start = 0;
|
||||
Partition sysCachePart = new Partition
|
||||
{
|
||||
Description = "System cache",
|
||||
Size = MemoryUnitDataOff,
|
||||
Length = (ulong)(MemoryUnitDataOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 1,
|
||||
Offset = 0,
|
||||
Start = 0,
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition dataPart = new Partition();
|
||||
dataPart.Description = "Data volume";
|
||||
dataPart.Size = (ulong)imagePlugin.ImageInfo.sectors * (ulong)imagePlugin.ImageInfo.sectorSize - MemoryUnitDataOff;
|
||||
dataPart.Length = imagePlugin.ImageInfo.sectors - sysCachePart.Length;
|
||||
dataPart.Sequence = 2;
|
||||
dataPart.Offset = MemoryUnitDataOff;
|
||||
dataPart.Start = sysCachePart.Length;
|
||||
Partition dataPart = new Partition
|
||||
{
|
||||
Description = "Data volume",
|
||||
Size = (ulong)imagePlugin.ImageInfo.sectors * imagePlugin.ImageInfo.sectorSize - MemoryUnitDataOff,
|
||||
Length = imagePlugin.ImageInfo.sectors - sysCachePart.Length,
|
||||
Sequence = 2,
|
||||
Offset = MemoryUnitDataOff,
|
||||
Start = sysCachePart.Length,
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
partitions.Add(sysCachePart);
|
||||
partitions.Add(dataPart);
|
||||
@@ -151,61 +163,82 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
if(temp == XboxCigam)
|
||||
{
|
||||
Partition securityPart = new Partition();
|
||||
securityPart.Description = "Security sectors";
|
||||
securityPart.Size = Xbox360SecuritySectorLen;
|
||||
securityPart.Length = (ulong)(Xbox360SecuritySectorLen / imagePlugin.ImageInfo.sectorSize);
|
||||
securityPart.Sequence = 1;
|
||||
securityPart.Offset = Xbox360SecuritySectorOff;
|
||||
securityPart.Start = (ulong)(Xbox360SecuritySectorOff / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition securityPart = new Partition
|
||||
{
|
||||
Description = "Security sectors",
|
||||
Size = Xbox360SecuritySectorLen,
|
||||
Length = (ulong)(Xbox360SecuritySectorLen / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 1,
|
||||
Offset = Xbox360SecuritySectorOff,
|
||||
Start = (ulong)(Xbox360SecuritySectorOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition sysCachePart = new Partition();
|
||||
sysCachePart.Description = "System cache";
|
||||
sysCachePart.Size = Xbox360SystemCacheLen;
|
||||
sysCachePart.Length = (ulong)(Xbox360SystemCacheLen / imagePlugin.ImageInfo.sectorSize);
|
||||
sysCachePart.Sequence = 2;
|
||||
sysCachePart.Offset = Xbox360SystemCacheOff;
|
||||
sysCachePart.Start = (ulong)(Xbox360SystemCacheOff / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition sysCachePart = new Partition
|
||||
{
|
||||
Description = "System cache",
|
||||
Size = Xbox360SystemCacheLen,
|
||||
Length = (ulong)(Xbox360SystemCacheLen / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 2,
|
||||
Offset = Xbox360SystemCacheOff,
|
||||
Start = (ulong)(Xbox360SystemCacheOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition gameCachePart = new Partition();
|
||||
gameCachePart.Description = "Game cache";
|
||||
gameCachePart.Size = Xbox360GameCacheLen;
|
||||
gameCachePart.Length = (ulong)(Xbox360GameCacheLen / imagePlugin.ImageInfo.sectorSize);
|
||||
gameCachePart.Sequence = 3;
|
||||
gameCachePart.Offset = Xbox360GameCacheOff;
|
||||
gameCachePart.Start = (ulong)(Xbox360GameCacheOff / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition gameCachePart = new Partition
|
||||
{
|
||||
Description = "Game cache",
|
||||
Size = Xbox360GameCacheLen,
|
||||
Length = (ulong)(Xbox360GameCacheLen / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 3,
|
||||
Offset = Xbox360GameCacheOff,
|
||||
Start = (ulong)(Xbox360GameCacheOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition sysExtPart = new Partition();
|
||||
sysExtPart.Description = "System volume";
|
||||
sysExtPart.Size = Xbox368SysExtLen;
|
||||
sysExtPart.Length = (ulong)(Xbox368SysExtLen / imagePlugin.ImageInfo.sectorSize);
|
||||
sysExtPart.Sequence = 4;
|
||||
sysExtPart.Offset = Xbox368SysExtOff;
|
||||
sysExtPart.Start = (ulong)(Xbox368SysExtOff / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition sysExtPart = new Partition
|
||||
{
|
||||
Description = "System volume",
|
||||
Size = Xbox368SysExtLen,
|
||||
Length = (ulong)(Xbox368SysExtLen / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 4,
|
||||
Offset = Xbox368SysExtOff,
|
||||
Start = (ulong)(Xbox368SysExtOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition sysExt2Part = new Partition();
|
||||
sysExt2Part.Description = "System volume 2";
|
||||
sysExt2Part.Size = Xbox360SysExt2Len;
|
||||
sysExt2Part.Length = (ulong)(Xbox360SysExt2Len / imagePlugin.ImageInfo.sectorSize);
|
||||
sysExt2Part.Sequence = 5;
|
||||
sysExt2Part.Offset = Xbox360SysExt2Off;
|
||||
sysExt2Part.Start = (ulong)(Xbox360SysExt2Off / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition sysExt2Part = new Partition
|
||||
{
|
||||
Description = "System volume 2",
|
||||
Size = Xbox360SysExt2Len,
|
||||
Length = (ulong)(Xbox360SysExt2Len / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 5,
|
||||
Offset = Xbox360SysExt2Off,
|
||||
Start = (ulong)(Xbox360SysExt2Off / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition xbox1Part = new Partition();
|
||||
xbox1Part.Description = "Xbox backwards compatibility";
|
||||
xbox1Part.Size = Xbox360CompatLen;
|
||||
xbox1Part.Length = (ulong)(Xbox360CompatLen / imagePlugin.ImageInfo.sectorSize);
|
||||
xbox1Part.Sequence = 6;
|
||||
xbox1Part.Offset = Xbox360CompatOff;
|
||||
xbox1Part.Start = (ulong)(Xbox360CompatOff / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition xbox1Part = new Partition
|
||||
{
|
||||
Description = "Xbox backwards compatibility",
|
||||
Size = Xbox360CompatLen,
|
||||
Length = (ulong)(Xbox360CompatLen / imagePlugin.ImageInfo.sectorSize),
|
||||
Sequence = 6,
|
||||
Offset = Xbox360CompatOff,
|
||||
Start = (ulong)(Xbox360CompatOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
|
||||
Partition dataPart = new Partition();
|
||||
dataPart.Description = "Data volume";
|
||||
dataPart.Sequence = 7;
|
||||
dataPart.Offset = Xbox360DataOff;
|
||||
dataPart.Start = (ulong)(Xbox360DataOff / imagePlugin.ImageInfo.sectorSize);
|
||||
Partition dataPart = new Partition
|
||||
{
|
||||
Description = "Data volume",
|
||||
Sequence = 7,
|
||||
Offset = Xbox360DataOff,
|
||||
Start = (ulong)(Xbox360DataOff / imagePlugin.ImageInfo.sectorSize),
|
||||
Scheme = Name
|
||||
};
|
||||
dataPart.Length = imagePlugin.ImageInfo.sectors - dataPart.Start;
|
||||
dataPart.Size = (ulong)dataPart.Length * (ulong)imagePlugin.ImageInfo.sectorSize;
|
||||
dataPart.Size = dataPart.Length * imagePlugin.ImageInfo.sectorSize;
|
||||
|
||||
partitions.Add(securityPart);
|
||||
partitions.Add(sysCachePart);
|
||||
|
||||
Reference in New Issue
Block a user