using System; using System.Collections.Generic; using System.Linq; using System.Text; using RomCheater.PluginFramework.Interfaces; using System.Diagnostics; using libWin32.Win32.Threading; using RomCheater.Logging; using System.IO; namespace RomCheater.PluginFramework.Core { /// /// Base class for all configuration plugins /// public abstract class ConfigPlugin : PluginBase, IConfigPlugin { public ConfigPlugin() : this(false) { } public ConfigPlugin(bool doinit) : base() { this.ValidProcessesForPlugin = new List(); if(doinit) init(); } public override void Reload() { logger.Debug.WriteLine(" Loading config for {0}...", this.ToString()); init(); logger.Debug.WriteLine(" Loaded config for {0}.", this.ToString()); } private void init() { List proc_list = new List(); foreach (Process proc in Process.GetProcesses()) { string proc_name = proc.ProcessName.ToLower(); try { bool isSystem = false; string proc_user = ThreadControl.GetProcessOwner(proc.Handle, out isSystem).ToLower(); if (isSystem) { logger.VerboseDebug.WriteLine(" not adding process {0} because it is a system process", proc_name); continue; } ProcContainer container = null; try { container = new ProcContainer(proc); logger.VerboseDebug.WriteLine(" adding process {0} ", proc_name); proc_list.Add(container); } catch (FileNotFoundException) { } catch (Exception ex) { //throw; logger.VerboseError.WriteLine(" not adding process {0} because it thew an exception [{1}]", proc_name, ex.ToString()); //continue; } } catch (System.ComponentModel.Win32Exception ex) { if (!((uint)ex.ErrorCode == 0x80004005)) { logger.VerboseError.WriteLine(" not adding process {0} because it thew an exception [{1}]", proc_name, ex.ToString()); } //continue; } catch (Exception ex) { logger.VerboseError.WriteLine(" not adding process {0} because it thew an exception [{1}]", proc_name, ex.ToString()); //continue; } } proc_list = proc_list.OrderBy(p => p.Name).ToList(); Predicate predicate = new Predicate(IsNotValidProcess); proc_list.RemoveAll(predicate); ValidProcessesForPlugin = proc_list; } protected abstract bool IsNotValidProcess(ProcContainer p); #region IConfigPlugin Members public List ValidProcessesForPlugin { get; protected set; } public override Guid ID { get { return new Guid(); } } public override string Name { get { return "Unknown Config Plugin"; } } public override string Description { get { return ""; } } #endregion } }