/[RomCheater]/trunk/RomCheater/Docking/FloatingMemorySearcher.cs
ViewVC logotype

Diff of /trunk/RomCheater/Docking/FloatingMemorySearcher.cs

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

revision 464 by william, Mon Jun 3 04:42:38 2013 UTC revision 471 by william, Mon Jun 3 07:13:44 2013 UTC
# Line 45  namespace RomCheater.Docking Line 45  namespace RomCheater.Docking
45  {  {
46      public partial class FloatingMemorySearcher : DockContent,      public partial class FloatingMemorySearcher : DockContent,
47         IAcceptsPlugin<IConfigPlugin>,         IAcceptsPlugin<IConfigPlugin>,
48          IAcceptsProcess<Process>,          IAcceptsProcess,
49          IAcceptsProcessAndConfig,          IAcceptsProcessAndConfig,
50          ISearchInProgress,          ISearchInProgress,
51          IAcceptsBrowseMemoryRegion,          IAcceptsBrowseMemoryRegion,
# Line 60  namespace RomCheater.Docking Line 60  namespace RomCheater.Docking
60          const bool USE_OLD_SEARCH_RESULTS_COMPRATOR_CODE = false;          const bool USE_OLD_SEARCH_RESULTS_COMPRATOR_CODE = false;
61          const bool USE_NONRANGE_SEARCH_RESULT_READER = false;          const bool USE_NONRANGE_SEARCH_RESULT_READER = false;
62          private bool DefaultUnsignedState = true; // set unsigned to true          private bool DefaultUnsignedState = true; // set unsigned to true
63          public FloatingMemorySearcher() { InitializeComponent(); this.AcceptedPlugin = null; OnBrowseMemoryRegion = null; this.AcceptedProcess = null; SearchInProgess = false; Reload(); }          public FloatingMemorySearcher() { InitializeComponent(); this.AcceptedPlugin = null; OnBrowseMemoryRegion = null; this.ProcessPID = 0; SearchInProgess = false; Reload(); }
64          public FloatingMemorySearcher(IConfigPlugin config) : this() { this.AcceptedPlugin = config; }          public FloatingMemorySearcher(IConfigPlugin config) : this() { this.AcceptedPlugin = config; }
65          public FloatingMemorySearcher(IConfigPlugin config, Process process) : this() { this.AcceptedPlugin = config; this.AcceptedProcess = process; }          public FloatingMemorySearcher(IConfigPlugin config, int pid) : this() { this.AcceptedPlugin = config; this.ProcessPID = pid; }
66    
67          //new Action<int, string>(UpdateProgress) to use this as a delegate          //new Action<int, string>(UpdateProgress) to use this as a delegate
68          private void UpdateProgress(int value, string message)          private void UpdateProgress(int value, string message)
# Line 72  namespace RomCheater.Docking Line 72  namespace RomCheater.Docking
72          }          }
73    
74          #region IAcceptsProcess<Process> Members          #region IAcceptsProcess<Process> Members
75          private Process _AcceptedProcess;          private int _ProcessPID;
76          public Process AcceptedProcess { get { return _AcceptedProcess; } set { _AcceptedProcess = value; UpdateAcceptedProcess(value); } }          public int ProcessPID { get { return _ProcessPID; } set { _ProcessPID = value; UpdateProcessPID(value); } }
77          #endregion          #endregion
78          #region IAcceptsPlugin<IConfigPlugin> Members          #region IAcceptsPlugin<IConfigPlugin> Members
79          private IConfigPlugin _AcceptedPlugin;          private IConfigPlugin _AcceptedPlugin;
# Line 93  namespace RomCheater.Docking Line 93  namespace RomCheater.Docking
93                  MemoryRangeSize = AcceptedPlugin.MemoryRangeStart + AcceptedPlugin.MemoryRangeSize;                  MemoryRangeSize = AcceptedPlugin.MemoryRangeStart + AcceptedPlugin.MemoryRangeSize;
94              }              }
95          }          }
96          private void UpdateAcceptedProcess(Process process)          private void UpdateProcessPID(int pid)
97          {                      {
98              this.lstResults.AcceptedProcess = process;                          this.lstResults.ProcessPID = pid;
99              this.lstPatchList.AcceptedProcess = process;              this.lstPatchList.ProcessPID = pid;
100  #if USE_AUTOMATIC_MEMORY_SEARCH_RANGE && FORCE_USE_OF_MEMORYSIZECONSTANTS  #if USE_AUTOMATIC_MEMORY_SEARCH_RANGE && FORCE_USE_OF_MEMORYSIZECONSTANTS
101              logger.Warn.WriteLine("FloatingMemorySearcher.UpdateAcceptedProcessAndConfig(IConfigPlugin config, Process process):");              logger.Warn.WriteLine("FloatingMemorySearcher.UpdateAcceptedProcessAndConfig(IConfigPlugin config, Process process):");
102              logger.Warn.WriteLine("Both USE_AUTOMATIC_MEMORY_SEARCH_RANGE and FORCE_USE_OF_MEMORYSIZECONSTANTS are defined");              logger.Warn.WriteLine("Both USE_AUTOMATIC_MEMORY_SEARCH_RANGE and FORCE_USE_OF_MEMORYSIZECONSTANTS are defined");
# Line 418  namespace RomCheater.Docking Line 418  namespace RomCheater.Docking
418          }          }
419          private bool ShouldUpdateResults()          private bool ShouldUpdateResults()
420          {          {
421              if (this.AcceptedProcess == null) return false;              if (this.ProcessPID == 0) return false;
422              if (SearchWorkerThread.IsBusy) return false;              if (SearchWorkerThread.IsBusy) return false;
423              //if (JokerSearchWorker.IsBusy) return false;              //if (JokerSearchWorker.IsBusy) return false;
424              if (this.IsResultsUpdateFrozen) return false;              if (this.IsResultsUpdateFrozen) return false;
425              if (mnuAddedResults.Visible) return false;              if (mnuAddedResults.Visible) return false;
426              if (mnuResults.Visible) return false;              if (mnuResults.Visible) return false;
427              if (Process.GetProcessById(this.AcceptedProcess.Id) == null) return false;              if (Process.GetProcessById(this.ProcessPID) == null) return false;
428              if (lstResults.Items.Count > 0) return true;              if (lstResults.Items.Count > 0) return true;
429              if (lstPatchList.Items.Count > 0) return true;              if (lstPatchList.Items.Count > 0) return true;
430              return false;              return false;
# Line 672  namespace RomCheater.Docking Line 672  namespace RomCheater.Docking
672          private void ThawResultsUpdate()          private void ThawResultsUpdate()
673          {          {
674              this.IsResultsUpdateFrozen = false;              this.IsResultsUpdateFrozen = false;
675              if (this.AcceptedProcess != null)              if (this.ProcessPID != 0)
676              {              {
677  #if !DO_NOT_SUSPEND_RESUME_THREAD_ON_FREEZE  #if !DO_NOT_SUSPEND_RESUME_THREAD_ON_FREEZE
678                      ThreadControl.ResumeProcess(this.AcceptedProcess.Id);                  ThreadControl.ResumeProcess(this.ProcessPID);
679  #endif  #endif
680              }              }
681          }          }
# Line 684  namespace RomCheater.Docking Line 684  namespace RomCheater.Docking
684          {          {
685              this.IsResultsUpdateFrozen = true;              this.IsResultsUpdateFrozen = true;
686              //this.IsResultsUpdateFrozen = false;              //this.IsResultsUpdateFrozen = false;
687              if (this.AcceptedProcess != null)              if (this.ProcessPID != 0)
688              {              {
689  #if !DO_NOT_SUSPEND_RESUME_THREAD_ON_FREEZE  #if !DO_NOT_SUSPEND_RESUME_THREAD_ON_FREEZE
690                  ThreadControl.SuspendProcess(this.AcceptedProcess.Id);                  ThreadControl.SuspendProcess(this.ProcessPID);
691  #endif  #endif
692              }              }
693          }          }
# Line 1014  namespace RomCheater.Docking Line 1014  namespace RomCheater.Docking
1014              //if (SearchArgs == null) return;              //if (SearchArgs == null) return;
1015              try              try
1016              {              {
1017                  lstPatchList.ProcessID = this.AcceptedProcess.Id;                  lstPatchList.ProcessID = this.ProcessPID;
1018                  this.FreezeResultsUpdate();                  this.FreezeResultsUpdate();
1019                  for (int i = 0; i < lstPatchList.SelectedIndices.Count; i++)                  for (int i = 0; i < lstPatchList.SelectedIndices.Count; i++)
1020                  {                  {
# Line 1036  namespace RomCheater.Docking Line 1036  namespace RomCheater.Docking
1036              //if (SearchArgs == null) return;              //if (SearchArgs == null) return;
1037              try              try
1038              {              {
1039                  lstPatchList.ProcessID = this.AcceptedProcess.Id;                  lstPatchList.ProcessID = this.ProcessPID;
1040                  this.FreezeResultsUpdate();                  this.FreezeResultsUpdate();
1041                  for (int i = 0; i < lstPatchList.SelectedIndices.Count; i++)                  for (int i = 0; i < lstPatchList.SelectedIndices.Count; i++)
1042                  {                  {
# Line 1460  namespace RomCheater.Docking Line 1460  namespace RomCheater.Docking
1460                          {                                                  {                        
1461                              byte[] guid = SearchGuid.ToByteArray();                              byte[] guid = SearchGuid.ToByteArray();
1462                              guid[guid.Length-1]++; // increment the search guid by 1                              guid[guid.Length-1]++; // increment the search guid by 1
1463                              Guid new_SearchGuid = new Guid(guid);                              Guid new_SearchGuid = new Guid(guid);                          
                             provider.OpenProvider();  
1464                              //provider.OnBytesRead += new BaseEventHandler<OnBytesReadEventArgs>(search_provider_OnBytesRead);                              //provider.OnBytesRead += new BaseEventHandler<OnBytesReadEventArgs>(search_provider_OnBytesRead);
1465                              int count = 0;                              int count = 0;
1466                              //int Last_Whole_Percent_Done = 0;                              //int Last_Whole_Percent_Done = 0;
1467                              foreach (var item in reader.GetResults(SearchArgs.IsUnsignedDataType, SearchArgs.DataType, new Action<int, string>(UpdateProgress)))                              var results = reader.GetResults(SearchArgs.IsUnsignedDataType, SearchArgs.DataType, new Action<int, string>(UpdateProgress));
1468    
1469                                using (SearchResultWriter writer = new SearchResultWriter((int)(results.Count()), new_SearchGuid))
1470                              {                              {
1471                                  using (SearchResultWriter writer = new SearchResultWriter((int)(reader.ResultCount), new_SearchGuid))                                  foreach (var item in results)
1472                                  {                                  {
1473                                                                             provider.OpenProvider();
1474                                      //provider.ReadProcessMemoryAtOnce(item.Address, STEP_SIZE, writer);                                      int bytesRead = 0;
                                     int bytesRead =0;  
1475                                      byte[] data = new byte[STEP_SIZE];                                      byte[] data = new byte[STEP_SIZE];
1476                                      provider.ReadProcessMemory(item.Address, STEP_SIZE, out bytesRead, out data);                                                                          provider.ReadProcessMemory(item.Address, STEP_SIZE, out bytesRead, out data);
1477                                      new BaseEventHandler<OnBytesReadEventArgs>(search_provider_OnBytesRead).Invoke(new OnBytesReadEventArgs(this, writer, data, item.Address, (uint)reader.ResultCount));                                      BaseEventHandler<OnBytesReadEventArgs> t = new BaseEventHandler<OnBytesReadEventArgs>(search_provider_OnBytesRead);
1478                                        OnBytesReadEventArgs t_args = new OnBytesReadEventArgs(this, writer, data, item.Address, (uint)reader.ResultCount);
1479                                        t.Invoke(t_args);
1480                                        t = null;
1481                                        t_args=null;
1482                                      double percent_done = 100.0 * ((double)count / (double)reader.ResultCount);                                      double percent_done = 100.0 * ((double)count / (double)reader.ResultCount);
1483                                      new Action<int, string>(UpdateProgress).Invoke((int)percent_done, string.Format(" -> Reading Address: 0x{0:x8}", item.Address));                                                                        new Action<int, string>(UpdateProgress).Invoke((int)percent_done, string.Format(" -> Reading Address: 0x{0:x8}", item.Address));
1484                                        count++;
1485                                        data = null;
1486                                        provider.CloseProvider();
1487                                  }                                  }
1488                                  count++;                              }                            
                             }  
                             provider.CloseProvider();  
1489                              SearchGuid = new_SearchGuid;                              SearchGuid = new_SearchGuid;
1490                          }                          }
1491                      }                      }
# Line 2154  namespace RomCheater.Docking Line 2158  namespace RomCheater.Docking
2158              new Action<int, string>(UpdateProgress).Invoke(0, string.Empty);              new Action<int, string>(UpdateProgress).Invoke(0, string.Empty);
2159              grpDataType.Enabled = false;              grpDataType.Enabled = false;
2160              // resume process on reset, incase it was suspended              // resume process on reset, incase it was suspended
2161              ThreadControl.ResumeProcess(this.AcceptedProcess.Id);              ThreadControl.ResumeProcess(this.ProcessPID);
2162              //Application.DoEvents();              //Application.DoEvents();
2163              this.Refresh();              this.Refresh();
2164          }          }
# Line 2176  namespace RomCheater.Docking Line 2180  namespace RomCheater.Docking
2180          }          }
2181          private void search_progress_updater_Tick(object sender, EventArgs e)          private void search_progress_updater_Tick(object sender, EventArgs e)
2182          {          {
2183              if ((this.AcceptedProcess ==null) || Process.GetProcessById(this.AcceptedProcess.Id) == null)              if ((this.ProcessPID == 0) || Process.GetProcessById(this.ProcessPID) == null)
2184              {              {
2185                  SearchWorkerThread.CancelAsync();                  SearchWorkerThread.CancelAsync();
2186                  //JokerSearchWorker.CancelAsync();                  //JokerSearchWorker.CancelAsync();

Legend:
Removed from v.464  
changed lines
  Added in v.471

  ViewVC Help
Powered by ViewVC 1.1.22