//#define DISABLE_VERBOSE_LOGGING_FOR_PERFORMANCE_BOOST // when defined will disable verbose logging for performance speed-up #define DISALLOW_VERBOSE_LOGGING // when defined will disallow verbose logging for performance reasons 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() { // loggerflags flags = logger.GetLoggingFlags(); //#if DISABLE_VERBOSE_LOGGING_FOR_PERFORMANCE_BOOST // ushort performance_flags = flags.Value; // if (flags.HasFlag(loggerflags.VERBOSE_DEBUG)) // { // performance_flags = (ushort)(performance_flags &~ loggerflags.VERBOSE_DEBUG.Value); // } // if (flags.HasFlag(loggerflags.VERBOSE_ERROR)) // { // performance_flags = (ushort)(performance_flags &~ loggerflags.VERBOSE_ERROR.Value); // } //#endif // logger.SetLoggingFlags(performance_flags); 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) { #if !DISALLOW_VERBOSE_LOGGING logger.VerboseDebug.WriteLine(" not adding process {0} because it is a system process", proc_name); #endif continue; } ProcContainer container = null; try { container = new ProcContainer(proc); #if !DISALLOW_VERBOSE_LOGGING logger.VerboseDebug.WriteLine(" adding process {0} ", proc_name); #endif proc_list.Add(container); } catch (FileNotFoundException) { } catch (Exception ex) { //throw; #if !DISALLOW_VERBOSE_LOGGING logger.VerboseError.WriteLine(" not adding process {0} because it thew an exception [{1}]", proc_name, ex.ToString()); #endif //continue; } } catch (System.ComponentModel.Win32Exception ex) { if (!((uint)ex.ErrorCode == 0x80004005)) { #if !DISALLOW_VERBOSE_LOGGING logger.VerboseError.WriteLine(" not adding process {0} because it thew an exception [{1}]", proc_name, ex.ToString()); #endif } //continue; } catch (Exception ex) { #if !DISALLOW_VERBOSE_LOGGING logger.VerboseError.WriteLine(" not adding process {0} because it thew an exception [{1}]", proc_name, ex.ToString()); #endif //continue; } } proc_list = proc_list.OrderBy(p => p.Name).ToList(); Predicate predicate = new Predicate(IsNotValidProcess); proc_list.RemoveAll(predicate); ValidProcessesForPlugin = proc_list; //logger.SetLoggingFlags(flags); // reset flags } 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 } }