Added decoding of El Torito boot catalog.

This commit is contained in:
2017-10-09 00:32:17 +01:00
parent 97b4ebe76a
commit 42d8ff32ce
3 changed files with 285 additions and 5 deletions

View File

@@ -181,6 +181,22 @@ namespace DiscImageChef.Filesystems.ISO9660
public byte[] boot_use;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ElToritoBootRecord
{
public byte type;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public byte[] id;
public byte version;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] system_id;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] boot_id;
public uint catalog_sector;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1974)]
public byte[] boot_use;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct PartitionDescriptor
{
@@ -272,6 +288,66 @@ namespace DiscImageChef.Filesystems.ISO9660
public ushort app_use_len_be;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ElToritoValidationEntry
{
public ElToritoIndicator header_id;
public ElToritoPlatform platform_id;
public ushort reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
public byte[] developer_id;
public ushort checksum;
public ushort signature;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ElToritoInitialEntry
{
public ElToritoIndicator bootable;
public ElToritoEmulation boot_type;
public ushort load_seg;
public byte system_type;
public byte reserved1;
public ushort sector_count;
public uint load_rba;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[] reserved2;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ElToritoSectionHeaderEntry
{
public ElToritoIndicator header_id;
public ElToritoPlatform platform_id;
public ushort entries;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 28)]
public byte[] identifier;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ElToritoSectionEntry
{
public ElToritoIndicator bootable;
public ElToritoEmulation boot_type;
public ushort load_seg;
public byte system_type;
public byte reserved1;
public ushort sector_count;
public uint load_rba;
public byte selection_criteria_type;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 19)]
public byte[] selection_criterias;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ElToritoSectionEntryExtension
{
public ElToritoIndicator extension_indicator;
public ElToritoFlags extension_flags;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]
public byte[] selection_criterias;
}
struct DecodedVolumeDescriptor
{
public string SystemIdentifier;