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 NintendoWiiOpticalDiscVolume(long volumeBaseOffset, long dataOffset, byte[] partitionKey, NintendoWiiEncryptedDiscReader discReader) { this.VolumeBaseOffset = volumeBaseOffset; this.DataOffset = dataOffset; this.PartitionKey = partitionKey; this.DiscReader = discReader; this.DiscReader.CurrentDecryptedBlockNumber = -1; this.DiscReader.CurrentDecryptedBlock = null; }
public NintendoWiiOpticalDiscFileStructure(string parentDirectoryName, string sourceFilePath, string fileName, long volumeBaseOffset, long dataSectionOffset, long lba, long size, DateTime fileTime, NintendoWiiEncryptedDiscReader discReader, byte[] partitionKey) { this.ParentDirectoryName = parentDirectoryName; this.SourceFilePath = sourceFilePath; this.FileName = fileName; this.VolumeBaseOffset = volumeBaseOffset; this.DataSectionOffset = dataSectionOffset; this.Lba = lba; this.IsRaw = false; this.NonRawSectorSize = -1; this.Size = size; this.FileMode = CdSectorType.Unknown; this.FileDateTime = fileTime; this.DiscReader = discReader; this.PartitionKey = partitionKey; }
public NintendoWiiOpticalDiscDirectoryStructure( FileStream isoStream, string sourceFilePath, NintendoWiiOpticalDiscDirectoryRecord directoryRecord, DateTime creationDateTime, long baseOffset, long dataSectionOffset, long rootDirectoryOffset, long directoryOffset, long nameTableOffset, string directoryName, string parentDirectory, NintendoWiiEncryptedDiscReader discReader, byte[] partitionKey) { string nextDirectory; this.SourceFilePath = sourceFilePath; this.SubDirectoryArray = new ArrayList(); this.FileArray = new ArrayList(); this.DirectoryRecordOffset = directoryOffset; if (String.IsNullOrEmpty(parentDirectory)) { this.ParentDirectoryName = String.Empty; this.DirectoryName = directoryName; nextDirectory = this.DirectoryName; } else { this.ParentDirectoryName = parentDirectory; this.DirectoryName = directoryName; nextDirectory = this.ParentDirectoryName + Path.DirectorySeparatorChar + this.DirectoryName; } this.parseDirectoryRecord(isoStream, directoryRecord, creationDateTime, baseOffset, dataSectionOffset, rootDirectoryOffset, directoryOffset, nameTableOffset, nextDirectory, discReader, partitionKey); }
private void parseDirectoryRecord( FileStream isoStream, NintendoWiiOpticalDiscDirectoryRecord directoryRecord, DateTime creationDateTime, long baseOffset, long dataSectionOffset, long rootDirectoryOffset, long directoryOffset, long nameTableOffset, string parentDirectory, NintendoWiiEncryptedDiscReader discReader, byte[] partitionKey) { long directoryRecordEndOffset; long newDirectoryEndOffset; long currentOffset = directoryOffset; int itemNameSize; byte[] itemNameBytes; string itemName; byte[] newDirectoryRecordBytes; NintendoWiiOpticalDiscDirectoryRecord newDirectoryRecord; NintendoWiiOpticalDiscDirectoryStructure newDirectory; NintendoWiiOpticalDiscFileStructure newFile; directoryRecordEndOffset = rootDirectoryOffset + (directoryRecord.FileSize * 0xC); currentOffset += 0xC; while (currentOffset < directoryRecordEndOffset) { newDirectoryRecordBytes = discReader.GetBytes(isoStream, baseOffset, dataSectionOffset, currentOffset, 0xC, partitionKey); newDirectoryRecord = new NintendoWiiOpticalDiscDirectoryRecord(newDirectoryRecordBytes); itemNameBytes = discReader.GetBytes(isoStream, baseOffset, dataSectionOffset, nameTableOffset + newDirectoryRecord.NameOffset, 512, partitionKey); itemNameSize = ParseFile.GetSegmentLength(itemNameBytes, 0, Constants.NullByteArray); itemNameBytes = discReader.GetBytes(isoStream, baseOffset, dataSectionOffset, nameTableOffset + newDirectoryRecord.NameOffset, itemNameSize, partitionKey); itemName = ByteConversion.GetEncodedText(itemNameBytes, ByteConversion.GetPredictedCodePageForTags(itemNameBytes)); if (!newDirectoryRecord.IsDirectory) { newFile = new NintendoWiiOpticalDiscFileStructure(parentDirectory, this.SourceFilePath, itemName, baseOffset, dataSectionOffset, newDirectoryRecord.FileOffset, newDirectoryRecord.FileSize, creationDateTime, discReader, partitionKey); this.FileArray.Add(newFile); currentOffset += 0xC; } else { newDirectory = new NintendoWiiOpticalDiscDirectoryStructure(isoStream, isoStream.Name, newDirectoryRecord, creationDateTime, baseOffset, dataSectionOffset, rootDirectoryOffset, currentOffset, nameTableOffset, itemName, parentDirectory, discReader, partitionKey); this.SubDirectoryArray.Add(newDirectory); newDirectoryEndOffset = rootDirectoryOffset + (newDirectoryRecord.FileSize * 0xC); currentOffset = newDirectoryEndOffset; } } }