public void Initialize(FileStream isoStream, long offset, bool isRawDump) { byte[] volumeIdentifierBytes; this.DiscBaseOffset = offset; this.DiscReader = new NintendoWiiEncryptedDiscReader(); this.WiiDiscId = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(isoStream, this.DiscBaseOffset, 1)); this.GameCode = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(isoStream, this.DiscBaseOffset + 1, 2)); this.RegionCode = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(isoStream, this.DiscBaseOffset + 3, 1)); this.MakerCode = ParseFile.ParseSimpleOffset(isoStream, this.DiscBaseOffset + 4, 2); this.IsRawDump = isRawDump; // get identifier volumeIdentifierBytes = ParseFile.ParseSimpleOffset(isoStream, this.DiscBaseOffset + 0x20, 64); volumeIdentifierBytes = FileUtil.ReplaceNullByteWithSpace(volumeIdentifierBytes); // initialize partition info this.InitializePartitions(isoStream); // initialize volumes this.VolumeArrayList = new ArrayList(); this.LoadVolumes(isoStream); }
public static DateTime GetIsoDateTime(byte[] isoDateArray) { DateTime dateValue = new DateTime(); string dateString; if (ParseFile.CompareSegment(isoDateArray, 0, EMPTY_DATETIME)) { dateValue = DateTime.MinValue; } // Easy CD Creator v4.2 (310), and maybe others, // doesn't set the Grenwich Mean Time offset to zero as it should else if (ParseFile.CompareSegmentUsingSourceOffset(isoDateArray, 0, EMPTY_DATETIME_HACK.Length, EMPTY_DATETIME_HACK)) { dateValue = DateTime.MinValue; } else { dateString = ByteConversion.GetAsciiText(isoDateArray); dateValue = new DateTime(Int32.Parse(dateString.Substring(0, 4).Replace("0000", "2000")), Int16.Parse(dateString.Substring(4, 2)), Int16.Parse(dateString.Substring(6, 2)), Int16.Parse(dateString.Substring(8, 2)), Int16.Parse(dateString.Substring(10, 2)), Int16.Parse(dateString.Substring(12, 2)), Int16.Parse(dateString.Substring(14, 2))); } return(dateValue); }
public XDvdFsDirectoryRecord(byte[] directoryBytes) { this.OffsetToLeftSubTree = (long)(BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(directoryBytes, 0x00, 2), 0) * XDvdFs.DWORD_SIZE); this.OffsetToRightSubTree = (long)(BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(directoryBytes, 0x02, 2), 0) * XDvdFs.DWORD_SIZE); this.StartingSector = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(directoryBytes, 0x04, 4), 0); this.EntrySize = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(directoryBytes, 0x08, 4), 0); this.EntryFlags = ParseFile.ParseSimpleOffset(directoryBytes, 0x0C, 1)[0]; this.EntryNameSize = ParseFile.ParseSimpleOffset(directoryBytes, 0x0D, 1)[0]; this.EntryNameBytes = ParseFile.ParseSimpleOffset(directoryBytes, 0x0E, this.EntryNameSize); this.EntryName = ByteConversion.GetAsciiText(this.EntryNameBytes); }
public void Initialize(FileStream isoStream, long offset, bool isRawDump) { byte[] volumeIdentifierBytes; byte[] imageDateBytes; string imageDateString; this.VolumeBaseOffset = offset; this.IsRawDump = isRawDump; this.VolumeType = VolumeDataType.Data; this.DirectoryStructureArray = new ArrayList(); // get identifier volumeIdentifierBytes = ParseFile.ParseSimpleOffset(isoStream, this.VolumeBaseOffset + 0x20, 64); volumeIdentifierBytes = FileUtil.ReplaceNullByteWithSpace(volumeIdentifierBytes); this.VolumeIdentifier = ByteConversion.GetEncodedText(volumeIdentifierBytes, ByteConversion.GetPredictedCodePageForTags(volumeIdentifierBytes)).Trim();; // get date imageDateBytes = ParseFile.ParseSimpleOffset(isoStream, this.VolumeBaseOffset + 0x2440, 0xA); imageDateString = ByteConversion.GetAsciiText(imageDateBytes); try { this.ImageCreationTime = new DateTime(int.Parse(imageDateString.Substring(0, 4)), int.Parse(imageDateString.Substring(5, 2)), int.Parse(imageDateString.Substring(8, 2))); } catch (Exception) { this.ImageCreationTime = new DateTime(); } // set bit shift for GC or WII if (this.IsGameCubeDisc(isoStream)) { this.OffsetBitShiftValue = 0; this.FormatDescription = NintendoGameCube.FORMAT_DESCRIPTION_STRING; } else { this.OffsetBitShiftValue = 2; this.FormatDescription = NintendoWiiOpticalDisc.FORMAT_DESCRIPTION_STRING_DECRYPTED; } // get offset of file table this.RootDirectoryOffset = (long)ByteConversion.GetUInt32BigEndian(ParseFile.ParseSimpleOffset(isoStream, this.VolumeBaseOffset + 0x424, 4)); this.RootDirectoryOffset <<= this.OffsetBitShiftValue; this.LoadDirectories(isoStream); }
public void Initialize(FileStream isoStream, long offset, bool isRawDump) { byte[] volumeIdentifierBytes; byte[] imageDateBytes; string imageDateString; this.IsRawDump = isRawDump; this.DirectoryStructureArray = new ArrayList(); this.FormatDescription = NintendoWiiOpticalDisc.FORMAT_DESCRIPTION_STRING; this.VolumeType = VolumeDataType.Data; // get identifier volumeIdentifierBytes = DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, 0x20, 64, this.PartitionKey); volumeIdentifierBytes = FileUtil.ReplaceNullByteWithSpace(volumeIdentifierBytes); this.VolumeIdentifier = ByteConversion.GetEncodedText(volumeIdentifierBytes, ByteConversion.GetPredictedCodePageForTags(volumeIdentifierBytes)).Trim();; // get date imageDateBytes = DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, 0x2440, 0xA, this.PartitionKey); imageDateString = ByteConversion.GetAsciiText(imageDateBytes); try { this.ImageCreationTime = new DateTime(int.Parse(imageDateString.Substring(0, 4)), int.Parse(imageDateString.Substring(5, 2)), int.Parse(imageDateString.Substring(8, 2))); } catch (Exception) { this.ImageCreationTime = new DateTime(); } // get offset of file table this.RootDirectoryOffset = (long)ByteConversion.GetUInt32BigEndian(DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, 0x424, 4, this.PartitionKey)); this.RootDirectoryOffset <<= 2; this.LoadDirectories(isoStream); }
public virtual void Initialize(FileStream isoStream, long offset, bool isRawDump) { byte[] sectorBytes; byte[] sectorDataBytes; this.FormatDescription = NullDcGdi.FORMAT_DESCRIPTION_STRING; this.VolumeType = VolumeDataType.Data; this.IsRawDump = isRawDump; this.DirectoryStructureArray = new ArrayList(); this.VolumeBaseOffset = this.IsRawDump ? (offset - Iso9660.EMPTY_HEADER_SIZE_RAW) : (offset - Iso9660.EMPTY_HEADER_SIZE); this.SectorSize = this.IsRawDump ? (int)CdRom.RAW_SECTOR_SIZE : (int)CdRom.NON_RAW_SECTOR_SIZE; // parse inital level sector sectorBytes = ParseFile.ParseSimpleOffset(isoStream, offset, this.SectorSize); sectorDataBytes = CdRom.GetDataChunkFromSector(sectorBytes, this.IsRawDump); // check for CDXA marker this.ContainsCdxaData = ParseFile.CompareSegmentUsingSourceOffset(sectorDataBytes, (int)Iso9660.CDXA_IDENTIFIER_OFFSET, Iso9660.CDXA_IDENTIFIER.Length, Iso9660.CDXA_IDENTIFIER); this.VolumeDescriptorType = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x00, 1)[0]; this.StandardIdentifier = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x01, 5); this.VolumeDescriptorVersion = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x06, 1)[0]; this.UnusedField1 = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x07, 1)[0]; this.SystemIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x08, 0x20)).Trim(); this.VolumeIdentifier = ByteConversion.GetAsciiText(FileUtil.ReplaceNullByteWithSpace(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x28, 0x20))).Trim(); this.UnusedField2 = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x48, 0x08); this.VolumeSpaceSize = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x50, 0x04), 0); this.UnusedField3 = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x58, 0x20); this.VolumeSetSize = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x78, 0x02), 0); this.VolumeSequenceNumber = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x7C, 0x02), 0); this.LogicalBlockSize = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x80, 0x02), 0); this.PathTableSize = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x84, 0x04), 0); this.LocationOfOccurrenceOfTypeLPathTable = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x8C, 0x04), 0); this.LocationOfOptionalOccurrenceOfTypeLPathTable = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x90, 0x04), 0); this.LocationOfOccurrenceOfTypeMPathTable = ByteConversion.GetUInt32BigEndian(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x94, 0x04)); this.LocationOfOptionalOccurrenceOfTypeMPathTable = ByteConversion.GetUInt32BigEndian(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x98, 0x04)); this.DirectoryRecordForRootDirectoryBytes = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x9C, 0x22); this.DirectoryRecordForRootDirectory = new NullDcGdiDirectoryRecord(this.DirectoryRecordForRootDirectoryBytes, this.ContainsCdxaData); this.VolumeSetIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0xBE, 0x80)).Trim(); this.PublisherIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x13E, 0x80)).Trim(); this.DataPreparerIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x1BE, 0x80)).Trim(); this.ApplicationIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x23E, 0x80)).Trim(); this.CopyrightFileIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x2BE, 0x25)).Trim(); this.AbstractFileIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x2E3, 0x25)).Trim(); this.BibliographicFileIdentifier = ByteConversion.GetAsciiText(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x308, 0x25)).Trim(); this.VolumeCreationDateAndTime = Iso9660.GetIsoDateTime(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x32D, 0x11)); this.VolumeModificationDateAndTime = Iso9660.GetIsoDateTime(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x33E, 0x11)); this.VolumeExpirationDateAndTime = Iso9660.GetIsoDateTime(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x34F, 0x11)); this.VolumeEffectiveDateAndTime = Iso9660.GetIsoDateTime(ParseFile.ParseSimpleOffset(sectorDataBytes, 0x360, 0x11)); this.FileStructureVersion = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x371, 1)[0]; this.Reserved1 = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x372, 1)[0]; this.ApplicationUse = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x373, 0x200); this.Reserved2 = ParseFile.ParseSimpleOffset(sectorDataBytes, 0x573, 0x28D); this.LoadDirectories(isoStream); }
public string GetSetName() { return(ByteConversion.GetAsciiText(this.songName)); }