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