/[RomCheater]/trunk/RomCheater.PluginFramework/Core/ConfigPlugin.cs
ViewVC logotype

Diff of /trunk/RomCheater.PluginFramework/Core/ConfigPlugin.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

--- trunk/RomCheater.PluginFramework/Core/ConfigPlugin.cs	2012/05/09 17:48:15	83
+++ trunk/RomCheater.PluginFramework/Core/ConfigPlugin.cs	2012/05/28 09:21:52	174
@@ -1,9 +1,15 @@
-´╗┐using System;
+´╗┐//#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
+#define ALLOW_SYSTEM_PROCESSES_TO_BE_INLUCDED // when defined system processes will be included in process list
+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
 {
@@ -12,8 +18,115 @@
     /// </summary>
     public abstract class ConfigPlugin : PluginBase, IConfigPlugin
     {
+        public ConfigPlugin() : this(false) { }
+        public ConfigPlugin(bool doinit) : base() { this.ValidProcessesForPlugin = new List<ProcContainer>(); 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<ProcContainer> proc_list = new List<ProcContainer>();
+            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 !ALLOW_SYSTEM_PROCESSES_TO_BE_INLUCDED
+                    if (isSystem)
+                    {
+#if !DISALLOW_VERBOSE_LOGGING
+                        logger.VerboseDebug.WriteLine("    not adding process {0} because it is a system process", proc_name);
+#endif
+                        continue;
+                    }
+#endif
+                    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<ProcContainer> predicate = new Predicate<ProcContainer>(IsNotValidProcess);
+            proc_list.RemoveAll(predicate);
+            ValidProcessesForPlugin = proc_list;
+            //logger.SetLoggingFlags(flags); // reset flags
+        }
+
+        protected abstract bool IsNotValidProcess(ProcContainer p);
+
         #region IConfigPlugin Members
-        public List<Process> ValidProcessesForPlugin { get; protected set; }
+        public List<ProcContainer> 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
     }
 }

 

  ViewVC Help
Powered by ViewVC 1.1.22