コード例 #1
0
        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);
            }
        }
コード例 #2
0
 public UInt16 Read_16bits(UInt64 Offset)
 {
     byte[] buffer = new byte[2];
     buffer = this.Read(Offset, 2);
     return(MemoryReader.ReadInt(ref buffer, 0));
 }