Example #1
0
        public override void VisitModuleDefinitionCollection(ModuleDefinitionCollection modules)
        {
            ModuleTable mt = m_tableReader.GetModuleTable();

            if (mt == null || mt.Rows.Count != 1)
            {
                throw new ReflectionException("Can not read main module");
            }

            ModuleRow        mr   = mt.Rows [0] as ModuleRow;
            string           name = ReadString(mr.Name);
            ModuleDefinition main = new ModuleDefinition(name, m_asmDef, this, true);

            main.Mvid          = m_streams.GuidHeap [mr.Mvid];
            main.MetadataToken = new MetadataToken(TokenType.Module, 1);
            modules.Add(main);
            m_module = main;
            m_module.Accept(this);

            FileTable ftable = m_tableReader.GetFileTable();

            if (ftable != null && ftable.Rows.Count > 0)
            {
                foreach (FileRow frow in ftable.Rows)
                {
                    if (frow.Flags == Mono.Cecil.FileAttributes.ContainsMetaData)
                    {
                        name = ReadString(frow.Name);
                        FileInfo location = new FileInfo(Path.Combine(m_img.FileInformation.DirectoryName, name));
                        if (!File.Exists(location.FullName))
                        {
                            throw new FileNotFoundException("Module not found : " + name);
                        }

                        try {
                            ImageReader module = ImageReader.Read(location.FullName);
                            mt = module.Image.MetadataRoot.Streams.TablesHeap [ModuleTable.RId] as ModuleTable;
                            if (mt == null || mt.Rows.Count != 1)
                            {
                                throw new ReflectionException("Can not read module : " + name);
                            }

                            mr = mt.Rows [0] as ModuleRow;
                            ModuleDefinition modext = new ModuleDefinition(name, m_asmDef,
                                                                           new StructureReader(module, m_manifestOnly), false);
                            modext.Mvid = module.Image.MetadataRoot.Streams.GuidHeap [mr.Mvid];

                            modules.Add(modext);
                        } catch (ReflectionException) {
                            throw;
                        } catch (Exception e) {
                            throw new ReflectionException("Can not read module : " + name, e);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Computes the ModuleIdentifier of the PE File as if the module belong to given assembly.
        /// </summary>
        /// <param name="peFileReader"></param>
        /// <param name="containingAssemblyIdentity"></param>
        /// <returns></returns>
        internal ModuleIdentity GetModuleIdentifier(PEFileReader peFileReader, AssemblyIdentity containingAssemblyIdentity)
        //^ requires peFileReader.ReaderState >= ReaderState.Metadata;
        //^ ensures (result.Location != null && result.Location.Length != 0);
        {
            ModuleRow moduleRow  = peFileReader.ModuleTable[1];
            IName     moduleName = this.metadataReaderHost.NameTable.GetNameFor(peFileReader.StringStream[moduleRow.Name]);

            return(new ModuleIdentity(moduleName, peFileReader.BinaryDocumentMemoryBlock.BinaryDocument.Location, containingAssemblyIdentity));
        }
Example #3
0
 public override void FromRawData(byte [] buff, int offs, int numRows)
 {
     for (int i = numRows; --i >= 0;)
     {
         Row row = new ModuleRow(this);
         row.FromRawData(buff, offs);
         Add(row);
         offs += ModuleRow.LogicalSize;
     }
 }
Example #4
0
        /// <summary>
        /// Reads the specified token.
        /// </summary>
        /// <param name="token">The token.</param>
        /// <param name="result">The result.</param>
        public void Read(TokenTypes token, out ModuleRow result)
        {
            if ((token & TokenTypes.TableMask) != TokenTypes.Module)
            {
                throw new ArgumentException("Invalid token type for ModuleRow.", "token");
            }

            using (BinaryReader reader = CreateReaderForToken(token))
            {
                result = new ModuleRow(reader.ReadUInt16(), ReadIndexValue(reader, IndexType.StringHeap), ReadIndexValue(reader, IndexType.GuidHeap), ReadIndexValue(reader, IndexType.GuidHeap), ReadIndexValue(reader, IndexType.GuidHeap));
            }
        }
Example #5
0
        void DrawModuleDependencies(ModuleRow row)
        {
            using (new EditorGUI.IndentLevelScope())
            {
                using (new EditorGUI.DisabledScope(true))
                {
                    var script = row.script;
                    if (script)
                    {
                        EditorGUILayout.ObjectField(row.script, typeof(MonoScript), false);
                    }
                }

                var dependencies = row.dependencies;
                if (dependencies.Count > 0)
                {
                    var showDependencies = row.showDependencies;
                    showDependencies     = EditorGUILayout.Foldout(showDependencies, "Dependencies", true);
                    row.showDependencies = showDependencies;
                    if (showDependencies)
                    {
                        using (new EditorGUI.IndentLevelScope())
                        {
                            foreach (var moduleType in dependencies)
                            {
                                DrawModule(moduleType);
                            }
                        }
                    }
                }

                var dependentModules = row.dependentModules;
                if (dependentModules.Count > 0)
                {
                    var showDependentModules = row.showDependentModules;
                    showDependentModules     = EditorGUILayout.Foldout(showDependentModules, "Dependent Modules", true);
                    row.showDependentModules = showDependentModules;
                    if (showDependentModules)
                    {
                        using (new EditorGUI.IndentLevelScope())
                        {
                            foreach (var moduleType in dependentModules)
                            {
                                DrawModule(moduleType);
                            }
                        }
                    }
                }
            }
        }
Example #6
0
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            if (dgvModules.SelectedRows.Count <= 0)
            {
                return;
            }

            DialogResult dr = MessageBox.Show("確定要更新選擇的模組?", "ischool", MessageBoxButtons.YesNo);

            if (dr == System.Windows.Forms.DialogResult.No)
            {
                return;
            }

            MultiTaskingRunner_up runner = new MultiTaskingRunner_up();
            ModuleRow             mr     = dgvModules.SelectedRows[0].DataBoundItem as ModuleRow;
            string udmName = mr.Name;

            RunnerDic = new Dictionary <string, BitTask>();
            foreach (ConnectionHelper conn in Connections)
            {
                TestAddTask(runner, conn, udmName);
            }
            runner.ExecuteTasks();


            for (int x = 0; x < 1; x--)
            {
                if (RunnerDic.Count > 0)
                {
                    bool Succeed = ReNewTask();
                    if (Succeed)
                    {
                        break;
                    }
                }
            }
            //try
            //{
            //    InitConnections();
            //    LoadAllModuleConfig();
            //    GroupByToDataGrid();
            //}
            //catch { Close(); } //爆了就關吧。
        }
Example #7
0
        public override void VisitModuleDefinition(ModuleDefinition module)
        {
            if (module.Main)
            {
                ModuleTable modTable = m_tableWriter.GetModuleTable();
                ModuleRow   modRow   = m_rowWriter.CreateModuleRow(
                    (ushort)0,
                    m_mdWriter.AddString(module.Name),
                    m_mdWriter.AddGuid(module.Mvid),
                    (uint)0,
                    (uint)0);

                modTable.Rows.Add(modRow);
            }
            else
            {
                // multiple module assemblies
                throw new NotImplementedException();
            }
        }
Example #8
0
        public override void VisitModuleDefinition(ModuleDefinition module)
        {
            if (module.Main)
            {
                ModuleTable modTable = m_tableWriter.GetModuleTable();
                ModuleRow   modRow   = m_rowWriter.CreateModuleRow(
                    0,
                    m_mdWriter.AddString(module.Name),
                    m_mdWriter.AddGuid(module.Mvid),
                    0,
                    0);

                modTable.Rows.Add(modRow);
                module.MetadataToken = new MetadataToken(TokenType.Module, 1);
            }
            else
            {
                // multiple module assemblies
                throw new NotImplementedException();
            }
        }
Example #9
0
        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dgvModules.SelectedRows.Count <= 0)
            {
                return;
            }

            DialogResult dr = MessageBox.Show("確定要刪除選擇的模組?", "ischool", MessageBoxButtons.YesNo);

            if (dr == System.Windows.Forms.DialogResult.No)
            {
                return;
            }

            MultiTaskingRunner runner = new MultiTaskingRunner();
            ModuleRow          mr     = dgvModules.SelectedRows[0].DataBoundItem as ModuleRow;
            string             modUrl = mr.Url;

            foreach (ConnectionHelper conn in Connections)
            {
                string name = Program.GlobalSchoolCache[conn.UID].Title;
                runner.AddTask(string.Format("{0}({1})", name, conn.UID), (x) =>
                {
                    object[] obj       = x as object[];
                    ConnectionHelper c = obj[0] as ConnectionHelper;
                    string xurl        = (string)obj[1];
                    RemoveDesktopModule(c, xurl);
                }, new object[] { conn, modUrl }, new System.Threading.CancellationTokenSource());
            }
            runner.ExecuteTasks();

            try
            {
                InitConnections();
                LoadAllModuleConfig();
                GroupByToDataGrid();
            }
            catch { Close(); } //爆了就關吧。
        }
 public virtual void VisitModuleRow(ModuleRow row)
 {
 }
Example #11
0
        public static ModuleDefinition Resolve(uint rid, ModuleRow row, MetadataSystem metadata)
        {
            var resolver = new ModuleDefinitionResolver(rid, row, metadata);

            return(new ModuleDefinition(resolver));
        }
Example #12
0
 private ModuleDefinitionResolver(uint rid, ModuleRow row, MetadataSystem metadata)
 {
     _token    = new MetadataToken(MetadataTokenType.Module, rid);
     _row      = row;
     _metadata = metadata;
 }
Example #13
0
        void IMetadataProvider.Read(TokenTypes token, out ModuleRow result)
        {
            TableHeap theap = (TableHeap)_streams[(int)HeapType.Tables];

            theap.Read(token, out result);
        }
Example #14
0
        public ModuleLoaderSettingsEditor()
        {
            foreach (var moduleType in k_ModuleTypes)
            {
                var moduleNamespace = moduleType.Namespace;
                var group           = m_RootNamespaceGroup;
                if (!string.IsNullOrEmpty(moduleNamespace))
                {
                    var namespaceParts = moduleNamespace.Split('.');
                    foreach (var part in namespaceParts)
                    {
                        var lastGroup = group;
                        if (!group.children.TryGetValue(part, out group))
                        {
                            group = new NamespaceGroup();
                            lastGroup.children.Add(part, group);
                        }
                    }
                }

                var moduleRow = new ModuleRow(moduleType);
                group.modules.Add(moduleRow);
                m_ModuleRows[moduleType] = moduleRow;
            }

            m_RootNamespaceGroup.SortModulesRecursively();

            foreach (var moduleType in k_ModuleTypes)
            {
                foreach (var @interface in moduleType.GetInterfaces())
                {
                    if (@interface.IsGenericType && @interface.GetGenericTypeDefinition() == typeof(IModuleDependency <>))
                    {
                        var genericArguments = @interface.GetGenericArguments();
                        if (genericArguments.Length != 1)
                        {
                            Debug.LogErrorFormat("Error drawing module row. {0} must have exactly one generic argument", @interface.Name);
                            continue;
                        }

                        var       dependency = genericArguments[0];
                        ModuleRow row;
                        if (m_ModuleRows.TryGetValue(moduleType, out row))
                        {
                            row.dependencies.Add(dependency);
                        }
                    }
                }
            }

            var scripts = MonoImporter.GetAllRuntimeMonoScripts();

            foreach (var script in scripts)
            {
                var type = script.GetClass();
                if (type == null)
                {
                    continue;
                }

                ModuleRow row;
                if (m_ModuleRows.TryGetValue(type, out row))
                {
                    row.script = script;
                }
            }
        }
 public virtual void VisitModuleRow(ModuleRow row)
 {
 }
 public ModuleRowChangeEvent(ModuleRow row, global::System.Data.DataRowAction action) {
     this.eventRow = row;
     this.eventAction = action;
 }
 public SettingsRow AddSettingsRow(ModuleRow parentModuleRowByModule_Settings) {
     SettingsRow rowSettingsRow = ((SettingsRow)(this.NewRow()));
     object[] columnValuesArray = new object[] {
             null,
             null};
     if ((parentModuleRowByModule_Settings != null)) {
         columnValuesArray[1] = parentModuleRowByModule_Settings[0];
     }
     rowSettingsRow.ItemArray = columnValuesArray;
     this.Rows.Add(rowSettingsRow);
     return rowSettingsRow;
 }
 public void RemoveModuleRow(ModuleRow row) {
     this.Rows.Remove(row);
 }
 public void AddModuleRow(ModuleRow row) {
     this.Rows.Add(row);
 }