// dnlib: See LICENSE.txt for more info using dnlib.DotNet.MD; using dnlib.Protection; using dnlib.Utils; namespace dnlib.DotNet.Writer { /// /// Writes s /// public static class MDTableWriter { /// /// Writes a Module table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var columns3 = columns[3]; var columns4 = columns[4]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Generation); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, row.Mvid); columns3.Write24(writer, row.EncId); columns4.Write24(writer, row.EncBaseId); } } /// /// Writes a TypeRef table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.ResolutionScope); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, stringsHeap.GetOffset(row.Namespace)); } } /// /// Writes a TypeDef table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var columns3 = columns[3]; var columns4 = columns[4]; var columns5 = columns[5]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; EncryptionUtil.WriteWithNotSegmentEncIfNeed(writer, w => { w.WriteUInt32(row.Flags); columns1.Write24(w, stringsHeap.GetOffset(row.Name)); columns2.Write24(w, stringsHeap.GetOffset(row.Namespace)); columns3.Write24(w, row.Extends); columns4.Write24(w, row.FieldList); columns5.Write24(w, row.MethodList); }, enc => enc.LazyTableEnc); //writer.WriteUInt32(row.Flags); //columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); //columns2.Write24(writer, stringsHeap.GetOffset(row.Namespace)); //columns3.Write24(writer, row.Extends); //columns4.Write24(writer, row.FieldList); //columns5.Write24(writer, row.MethodList); } } /// /// Writes a FieldPtr table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Field); } } /// /// Writes a Field table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Flags); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, row.Signature); } } /// /// Writes a MethodPtr table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Method); } } /// /// Writes a Method table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns3 = columns[3]; var columns4 = columns[4]; var columns5 = columns[5]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.RVA); writer.WriteUInt16(row.ImplFlags); writer.WriteUInt16(row.Flags); columns3.Write24(writer, stringsHeap.GetOffset(row.Name)); columns4.Write24(writer, row.Signature); columns5.Write24(writer, row.ParamList); } } /// /// Writes a ParamPtr table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Param); } } /// /// Writes a Param table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Flags); writer.WriteUInt16(row.Sequence); columns2.Write24(writer, stringsHeap.GetOffset(row.Name)); } } /// /// Writes a InterfaceImpl table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Class); columns1.Write24(writer, row.Interface); } } /// /// Writes a MemberRef table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Class); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, row.Signature); } } /// /// Writes a Constant table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; var columns3 = columns[3]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteByte(row.Type); writer.WriteByte(row.Padding); columns2.Write24(writer, row.Parent); columns3.Write24(writer, row.Value); } } /// /// Writes a CustomAttribute table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Parent); columns1.Write24(writer, row.Type); columns2.Write24(writer, row.Value); } } /// /// Writes a FieldMarshal table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Parent); columns1.Write24(writer, row.NativeType); } } /// /// Writes a DeclSecurity table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteInt16(row.Action); columns1.Write24(writer, row.Parent); columns2.Write24(writer, row.PermissionSet); } } /// /// Writes a ClassLayout table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.PackingSize); writer.WriteUInt32(row.ClassSize); columns2.Write24(writer, row.Parent); } } /// /// Writes a FieldLayout table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.OffSet); columns1.Write24(writer, row.Field); } } /// /// Writes a StandAloneSig table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Signature); } } /// /// Writes a EventMap table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Parent); columns1.Write24(writer, row.EventList); } } /// /// Writes a EventPtr table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Event); } } /// /// Writes a Event table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.EventFlags); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, row.EventType); } } /// /// Writes a PropertyMap table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Parent); columns1.Write24(writer, row.PropertyList); } } /// /// Writes a PropertyPtr table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Property); } } /// /// Writes a Property table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.PropFlags); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, row.Type); } } /// /// Writes a MethodSemantics table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Semantic); columns1.Write24(writer, row.Method); columns2.Write24(writer, row.Association); } } /// /// Writes a MethodImpl table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Class); columns1.Write24(writer, row.MethodBody); columns2.Write24(writer, row.MethodDeclaration); } } /// /// Writes a ModuleRef table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, stringsHeap.GetOffset(row.Name)); } } /// /// Writes a TypeSpec table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Signature); } } /// /// Writes a ImplMap table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var columns3 = columns[3]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.MappingFlags); columns1.Write24(writer, row.MemberForwarded); columns2.Write24(writer, stringsHeap.GetOffset(row.ImportName)); columns3.Write24(writer, row.ImportScope); } } /// /// Writes a FieldRVA table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.RVA); columns1.Write24(writer, row.Field); } } /// /// Writes a ENCLog table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Token); writer.WriteUInt32(row.FuncCode); } } /// /// Writes a ENCMap table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Token); } } /// /// Writes a Assembly table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns6 = columns[6]; var columns7 = columns[7]; var columns8 = columns[8]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.HashAlgId); writer.WriteUInt16(row.MajorVersion); writer.WriteUInt16(row.MinorVersion); writer.WriteUInt16(row.BuildNumber); writer.WriteUInt16(row.RevisionNumber); writer.WriteUInt32(row.Flags); columns6.Write24(writer, row.PublicKey); columns7.Write24(writer, stringsHeap.GetOffset(row.Name)); columns8.Write24(writer, stringsHeap.GetOffset(row.Locale)); } } /// /// Writes a AssemblyProcessor table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Processor); } } /// /// Writes a AssemblyOS table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.OSPlatformId); writer.WriteUInt32(row.OSMajorVersion); writer.WriteUInt32(row.OSMinorVersion); } } /// /// Writes a AssemblyRef table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns5 = columns[5]; var columns6 = columns[6]; var columns7 = columns[7]; var columns8 = columns[8]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.MajorVersion); writer.WriteUInt16(row.MinorVersion); writer.WriteUInt16(row.BuildNumber); writer.WriteUInt16(row.RevisionNumber); writer.WriteUInt32(row.Flags); columns5.Write24(writer, row.PublicKeyOrToken); columns6.Write24(writer, stringsHeap.GetOffset(row.Name)); columns7.Write24(writer, stringsHeap.GetOffset(row.Locale)); columns8.Write24(writer, row.HashValue); } } /// /// Writes a AssemblyRefProcessor table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Processor); columns1.Write24(writer, row.AssemblyRef); } } /// /// Writes a AssemblyRefOS table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns3 = columns[3]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.OSPlatformId); writer.WriteUInt32(row.OSMajorVersion); writer.WriteUInt32(row.OSMinorVersion); columns3.Write24(writer, row.AssemblyRef); } } /// /// Writes a File table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns1 = columns[1]; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Flags); columns1.Write24(writer, stringsHeap.GetOffset(row.Name)); columns2.Write24(writer, row.HashValue); } } /// /// Writes a ExportedType table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; var columns3 = columns[3]; var columns4 = columns[4]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Flags); writer.WriteUInt32(row.TypeDefId); columns2.Write24(writer, stringsHeap.GetOffset(row.TypeName)); columns3.Write24(writer, stringsHeap.GetOffset(row.TypeNamespace)); columns4.Write24(writer, row.Implementation); } } /// /// Writes a ManifestResource table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; var columns3 = columns[3]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt32(row.Offset); writer.WriteUInt32(row.Flags); columns2.Write24(writer, stringsHeap.GetOffset(row.Name)); columns3.Write24(writer, row.Implementation); } } /// /// Writes a NestedClass table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.NestedClass); columns1.Write24(writer, row.EnclosingClass); } } /// /// Writes a GenericParam table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; var columns3 = columns[3]; var stringsHeap = metadata.StringsHeap; if (columns.Length >= 5) { var columns4 = columns[4]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Number); writer.WriteUInt16(row.Flags); columns2.Write24(writer, row.Owner); columns3.Write24(writer, stringsHeap.GetOffset(row.Name)); columns4.Write24(writer, row.Kind); } } else { for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Number); writer.WriteUInt16(row.Flags); columns2.Write24(writer, row.Owner); columns3.Write24(writer, stringsHeap.GetOffset(row.Name)); } } } /// /// Writes a MethodSpec table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Method); columns1.Write24(writer, row.Instantiation); } } /// /// Writes a GenericParamConstraint table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Owner); columns1.Write24(writer, row.Constraint); } } /// /// Writes a Document table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; var columns3 = columns[3]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Name); columns1.Write24(writer, row.HashAlgorithm); columns2.Write24(writer, row.Hash); columns3.Write24(writer, row.Language); } } /// /// Writes a MethodDebugInformation table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Document); columns1.Write24(writer, row.SequencePoints); } } /// /// Writes a LocalScope table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; var columns3 = columns[3]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Method); columns1.Write24(writer, row.ImportScope); columns2.Write24(writer, row.VariableList); columns3.Write24(writer, row.ConstantList); writer.WriteUInt32(row.StartOffset); writer.WriteUInt32(row.Length); } } /// /// Writes a LocalVariable table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns2 = columns[2]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; writer.WriteUInt16(row.Attributes); writer.WriteUInt16(row.Index); columns2.Write24(writer, stringsHeap.GetOffset(row.Name)); } } /// /// Writes a LocalConstant table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var stringsHeap = metadata.StringsHeap; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, stringsHeap.GetOffset(row.Name)); columns1.Write24(writer, row.Signature); } } /// /// Writes a ImportScope table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Parent); columns1.Write24(writer, row.Imports); } } /// /// Writes a StateMachineMethod table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.MoveNextMethod); columns1.Write24(writer, row.KickoffMethod); } } /// /// Writes a CustomDebugInformation table /// /// Writer /// Metadata /// Table public static void Write(this DataWriter writer, Metadata metadata, MDTable table) { var columns = table.TableInfo.Columns; var columns0 = columns[0]; var columns1 = columns[1]; var columns2 = columns[2]; for (int i = 0; i < table.Rows; i++) { var row = table[(uint)i + 1]; columns0.Write24(writer, row.Parent); columns1.Write24(writer, row.Kind); columns2.Write24(writer, row.Value); } } } }