//#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
}
}