// one function is used for Xbox & Xbox 360 depending of the SkipSector parameter private void GetXBOXFST(string sPath) { byte[] buffer = ReadCDTracks(32 + m_SkipSector); m_FST.FST_Session.Add(new FST.cSession(1, System.IO.Path.GetFileName(sPath), 0, System.IO.Path.GetFileName(sPath))); m_FST.FST_Folder.Add(new FST.cFolder(1, 0, 1, "\\", 0x800)); int Sector = (int)MemoryReader.ReadLong(ref buffer, 0x14); int SectorSize = (int)MemoryReader.ReadLong(ref buffer, 0x18); buffer = ReadCDBuffer(Sector + m_SkipSector, (UInt64)(SectorSize * 2048)); ParseXBOX(buffer, 0, 1, sPath, m_SkipSector); }
public bool IsNGCISO(string sPath) { byte[] buffer = m_FileReader.Read(0, 0x800); if (buffer.Length == 0x800) { if ((buffer[0] != 0) && (MemoryReader.ReadLong(ref buffer, 0x1C) == 0x3D9F33C2)) { this.ISOType = ISO_Type.NGC; return(true); } } return(false); }
private void ParseXBOX(byte[] buffer, uint Offset, uint ParentID, string sPath, int SkipSector) { if ((Offset > buffer.Length) || (buffer.Length == 0)) { return; } // Date Stamp is unused on XBOX & XBOX 360 byte[] dateStamp = { 0, 0, 0, 0, 0, 0, 0 }; uint skip = (uint)MemoryReader.ReadInt(ref buffer, Offset + 0); uint Forwards = (uint)MemoryReader.ReadInt(ref buffer, Offset + 2); if (skip > 0) { ParseXBOX(buffer, skip * 4, ParentID, sPath, SkipSector); } if ((buffer[Offset + 0x0C] == 0x10) || (buffer[Offset + 0x0C] == 0x90)) { uint Sector = MemoryReader.ReadLong(ref buffer, Offset + 0x04); long SectorSize = MemoryReader.ReadLong(ref buffer, Offset + 0x08) * 2048; if (Sector != 0) { string folderName = Encoding.Default.GetString(buffer, (int)(Offset + 0x0E), buffer[Offset + 0x0D]); m_FST.FST_Folder.Add(new FST.cFolder(1, ParentID, Sector, folderName, 0)); byte[] newFolder = ReadCDBuffer(Sector + m_SkipSector, (UInt64)SectorSize); ParseXBOX(newFolder, 0, Sector, sPath, SkipSector); } } else { string fileName = Encoding.Default.GetString(buffer, (int)(Offset + 0x0E), buffer[Offset + 0x0D]); UInt64 fileOffset = (UInt64)((MemoryReader.ReadLong(ref buffer, Offset + 0x04) + SkipSector) * 0x800); UInt64 fileSize = MemoryReader.ReadLong(ref buffer, Offset + 0x08); m_FST.FST_File.Add(new FST.cFile(1, ParentID, ParentID, fileName, sPath, sPath, fileOffset, fileSize, dateStamp, true)); } if (Forwards > 0) { ParseXBOX(buffer, Forwards * 4, ParentID, sPath, SkipSector); } }
public bool IsWII(string sPath) { byte[] buffer = m_FileReader.Read(0, 0x800); if (buffer.Length == 0x800) { if (((buffer[0] == 'R') || (buffer[0] == 'S')) && (MemoryReader.ReadLong(ref buffer, 0x18) == 0xA39E1C5D)) { if (System.IO.Directory.Exists("decryption_keys")) { if (System.IO.File.Exists("decryption_keys\\ckeys.bin")) { this.ISOType = ISO_Type.WII; InitWII(sPath); return(true); } } } } return(false); }
public UInt32 Read_32bits(UInt64 Offset) { byte[] buffer = new byte[4]; buffer = this.Read(Offset, 4); return(MemoryReader.ReadLong(ref buffer, 0)); }
public bool IsWIIU(string sPath) { byte[] buffer = m_FileReader.Read(0, 0x800); if (buffer.Length == 0x800) { if (((buffer[0] == 'W') && (buffer[1] == 'U') && (buffer[2] == 'P')) && (MemoryReader.ReadLong(ref buffer, 0x18) == 0x00000000)) { if (System.IO.File.Exists("decrypted_keys\\ckeysu.bin")) { this.ISOType = ISO_Type.WIIU; //InitWIIU(sPath); return(true); } } } return(false); }