void CreateStream(string name) { MetadataStream stream = new MetadataStream(); stream.Header.Name = name; stream.Heap = MetadataHeap.HeapFactory(stream); m_root.Streams.Add(stream); }
public override void VisitMetadataStreamCollection(MetadataStreamCollection coll) { MetadataStream tables = new MetadataStream(); tables.Header.Name = MetadataStream.Tables; tables.Heap = MetadataHeap.HeapFactory(tables); TablesHeap th = tables.Heap as TablesHeap; th.Tables = new TableCollection(th); m_root.Streams.Add(tables); }
public override void VisitMetadataStreamHeader(MetadataStream.MetadataStreamHeader header) { header.Offset = m_binaryReader.ReadUInt32(); header.Size = m_binaryReader.ReadUInt32(); StringBuilder buffer = new StringBuilder(); while (true) { char cur = (char)m_binaryReader.ReadSByte(); if (cur == '\0') { break; } buffer.Append(cur); } header.Name = buffer.ToString(); if (header.Name.Length == 0) { throw new MetadataFormatException("Invalid stream name"); } long rootpos = m_root.GetImage().ResolveVirtualAddress( m_root.GetImage().CLIHeader.Metadata.VirtualAddress); long curpos = m_binaryReader.BaseStream.Position; if (header.Size != 0) { curpos -= rootpos; } curpos += 3; curpos &= ~3; if (header.Size != 0) { curpos += rootpos; } m_binaryReader.BaseStream.Position = curpos; header.Stream.Heap = MetadataHeap.HeapFactory(header.Stream); }