예제 #1
0
        public byte[] GetStreamData(RootStream rs)
        {
            MemoryStream m = new MemoryStream();

            foreach (uint page in rs.pages)
            {
                CopyPage(page, raw, m);
            }
            byte[] data = new byte[rs.size];
            m.Seek(0, 0);
            m.Read(data, 0, (int)rs.size);
            return(data);
        }
예제 #2
0
        public void ReadRootStreams()
        {
            MemoryStream m = new MemoryStream();

            foreach (uint page in adIndexPages)
            {
                CopyPage(page, raw, m);
            }
            m.Seek(0, 0);
            uint count = StreamHelper.ReadU32(m);

            rootStreams = new RootStream[count];
            for (int i = 0; i < count; i++)
            {
                rootStreams[i]      = new RootStream();
                rootStreams[i].size = StreamHelper.ReadU32(m);
                if (rootStreams[i].size == 0xFFFFFFFF)
                {
                    rootStreams[i].size = 0;
                }
            }
            for (int i = 0; i < count; i++)
            {
                uint subcount = rootStreams[i].size / dPageBytes;
                if ((rootStreams[i].size % dPageBytes) != 0)
                {
                    subcount++;
                }
                rootStreams[i].pages = new uint[subcount];
                for (int j = 0; j < subcount; j++)
                {
                    rootStreams[i].pages[j] = StreamHelper.ReadU32(m);
                }
            }
            rootStreams[0].name1 = "Old Directory";
            rootStreams[1].name1 = "TOC Stream";
            rootStreams[2].name1 = "TPI Stream";
            rootStreams[3].name1 = "DBI Stream";
        }