PERWAPI.PEReader.ReadTildeStreamStart C# (CSharp) Méthode

ReadTildeStreamStart() private méthode

private ReadTildeStreamStart ( ) : void
Résultat void
        private void ReadTildeStreamStart()
        {
            if (Diag.DiagOn) Console.WriteLine("Reading meta data tables at offset = " + Hex.Int((int)BaseStream.Position));
            // pre:  at beginning of tilde stream
            ReadZeros(4);  // reserved
            verInfo.tsMajVer = ReadByte();  // check
            verInfo.tsMinVer = ReadByte();  // check
            byte heapSizes = ReadByte();
            if (heapSizes != 0) {
                md.largeStrings = (heapSizes & 0x01) != 0;
                md.largeGUID = (heapSizes & 0x02) != 0;
                md.largeBlob = (heapSizes & 0x04) != 0;
            }
            if (Diag.DiagOn) {
                if (md.largeStrings) Console.WriteLine("LARGE strings index");
                if (md.largeGUID) Console.WriteLine("LARGE GUID index");
                if (md.largeBlob) Console.WriteLine("LARGE blob index");
            }
            int res = ReadByte(); // check if 1
            ulong valid = ReadUInt64();
            ulong sorted = this.ReadUInt64();
            if (Diag.DiagOn) Console.WriteLine("Valid = " + Hex.Long(valid));
            for (int i=0; i < MetaData.NumMetaDataTables; i++) {
                if ((valid & FileImage.bitmasks[i]) != 0) {
                    tableLengths[i] = ReadUInt32();
                    tables[i] = new TableRow[tableLengths[i]];
                    md.largeIx[i] = tableLengths[i] > MetaData.maxSmlIxSize;
                    if (Diag.DiagOn)
                        Console.WriteLine("Table Ix " + Hex.Short(i) + " has length " + tableLengths[i]);
                }
                else tableLengths[i] = 0;
            }
            if (tableLengths[0] != 1) this.MetaDataError("Module table has more than one entry");
            for (int i=0; i < MetaData.CIxTables.Length; i++) {
                for (int j=0; j < MetaData.CIxTables[i].Length; j++) {
                    if (Diag.DiagOn) Console.WriteLine("CIxTables " + i + " " + j + " tableLength = " + tableLengths[MetaData.CIxTables[i][j]] + "  Max = " + MetaData.CIxMaxMap[i]);
                    md.lgeCIx[i] = md.lgeCIx[i] ||
                        (tableLengths[MetaData.CIxTables[i][j]] > MetaData.CIxMaxMap[i]);
                }
                if (Diag.DiagOn) if (md.lgeCIx[i]) Console.WriteLine("LARGE CIx " + i );
            }
        }