/[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 525 by william, Wed Jun 5 07:37:37 2013 UTC revision 526 by william, Wed Jun 5 08:03:28 2013 UTC
# Line 1802  namespace RomCheater.Docking Line 1802  namespace RomCheater.Docking
1802                      {                      {
1803                          provider.OpenProvider();                          provider.OpenProvider();
1804                          int count = (int)((MemoryRangeSize - MemoryRangeStart) / STEP_SIZE);                          int count = (int)((MemoryRangeSize - MemoryRangeStart) / STEP_SIZE);
1805                          SearchResultWriter writer = new SearchResultWriter((int)(count), SearchGuid);                          SearchResultWriter writer = new SearchResultWriter((int)(count), SearchGuid);                                            
                         //provider.OnBytesRead += new BaseEventHandler<OnBytesReadEventArgs>(search_provider_OnBytesRead);  
                         //provider.ReadProcessMemoryAtOnce(MemoryRangeStart, (MemoryRangeSize - MemoryRangeStart), writer);  
   
   
                         Stopwatch st_profiler = new Stopwatch();  
                         st_profiler.Start();  
1806                          int Last_Whole_Percent_Done = 0;                          int Last_Whole_Percent_Done = 0;
1807                          uint size = STEP_SIZE * 4096;                          uint size = STEP_SIZE * 4096;
1808                          for (uint i = MemoryRangeStart; i < MemoryRangeSize; i+=size)                          for (uint i = MemoryRangeStart; i < MemoryRangeSize; i+=size)
# Line 1816  namespace RomCheater.Docking Line 1810  namespace RomCheater.Docking
1810                                                        
1811                              int bytesRead=0;                              int bytesRead=0;
1812                              byte[] data = new byte[size];                              byte[] data = new byte[size];
                             //provider.ReadProcessMemory(i, size, out bytesRead, out data);  
   
1813                              provider.ReadProcessMemoryAtOnce(i, size, out bytesRead, out data);                              provider.ReadProcessMemoryAtOnce(i, size, out bytesRead, out data);
   
                             //OnBytesReadEventArgs t_args = new OnBytesReadEventArgs(this, writer, data, i, MemoryRangeSize, true);  
                             //search_provider_OnBytesRead(t_args);  
                             //t_args = null;  
   
1814                              string message = string.Format(" -> Reading Address: 0x{0:x8}", (i + MemoryRangeStart));                              string message = string.Format(" -> Reading Address: 0x{0:x8}", (i + MemoryRangeStart));
1815                              double double_percent_done = 100.0 * (double)((double)i / (double)MemoryRangeSize);                              double double_percent_done = 100.0 * (double)((double)i / (double)MemoryRangeSize);
1816                              int int_percent_done = (int)double_percent_done;                              int int_percent_done = (int)double_percent_done;
1817                              if ( (int_percent_done != Last_Whole_Percent_Done) && (i % 10000) == 0)                              if ( (int_percent_done != Last_Whole_Percent_Done) && (i % 10000) == 0)
1818                              {                              {
1819                                  UpdateProgress((int)double_percent_done, message);                                  UpdateProgress((int)double_percent_done, message);
                                 logger.Profiler.WriteLine("Memory Search Operation Profiler: search operation has taken {0} seconds", st_profiler.Elapsed.TotalSeconds.ToString());  
1820                                  Last_Whole_Percent_Done = int_percent_done;                                  Last_Whole_Percent_Done = int_percent_done;
1821                              }                              }
1822    
1823                                uint address_index = i;
1824                              #region comparison and serialization                              #region comparison and serialization
1825                              switch (sdt)                              switch (sdt)
1826                              {                              {
# Line 1846  namespace RomCheater.Docking Line 1832  namespace RomCheater.Docking
1832                                          foreach (var Value in t_data)                                          foreach (var Value in t_data)
1833                                          {                                          {
1834                                              if (SearchWorkerThread.CancellationPending) { break; }                                              if (SearchWorkerThread.CancellationPending) { break; }
1835                                              using (_8bit_unsigned_comparer_ comparer = new _8bit_unsigned_comparer_(SearchArgs, i))                                              using (_8bit_unsigned_comparer_ comparer = new _8bit_unsigned_comparer_(SearchArgs, address_index))
1836                                              {                                              {
1837                                                  byte value = 0;                                                  byte value = 0;
1838                                                  if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                  if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 1856  namespace RomCheater.Docking Line 1842  namespace RomCheater.Docking
1842                                                          try                                                          try
1843                                                          {                                                          {
1844                                                              gmp.OpenProvider();                                                              gmp.OpenProvider();
1845                                                              gmp.ReadMemory(i, out value);                                                              gmp.ReadMemory(address_index, out value);
1846                                                              gmp.CloseProvider();                                                              gmp.CloseProvider();
1847                                                          }                                                          }
1848                                                          catch (Exception ex)                                                          catch (Exception ex)
# Line 1876  namespace RomCheater.Docking Line 1862  namespace RomCheater.Docking
1862                                                      writer.WriteResult<byte>(comparer.Address, comparer.Value);                                                      writer.WriteResult<byte>(comparer.Address, comparer.Value);
1863                                                  }                                                  }
1864                                              }                                              }
1865                                                address_index += STEP_SIZE;
1866                                          }                                          }
1867                                          #endregion                                          #endregion
1868                                      }                                      }
# Line 1886  namespace RomCheater.Docking Line 1873  namespace RomCheater.Docking
1873                                          foreach (var Value in t_data)                                          foreach (var Value in t_data)
1874                                          {                                          {
1875                                              if (SearchWorkerThread.CancellationPending) { break; }                                              if (SearchWorkerThread.CancellationPending) { break; }
1876                                              using (_8bit_signed_comparer_ comparer = new _8bit_signed_comparer_(SearchArgs, i))                                              using (_8bit_signed_comparer_ comparer = new _8bit_signed_comparer_(SearchArgs, address_index))
1877                                              {                                              {
1878                                                  sbyte value = 0;                                                  sbyte value = 0;
1879                                                  if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                  if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 1896  namespace RomCheater.Docking Line 1883  namespace RomCheater.Docking
1883                                                          try                                                          try
1884                                                          {                                                          {
1885                                                              gmp.OpenProvider();                                                              gmp.OpenProvider();
1886                                                              gmp.ReadMemory(i, out value);                                                              gmp.ReadMemory(address_index, out value);
1887                                                              gmp.CloseProvider();                                                              gmp.CloseProvider();
1888                                                          }                                                          }
1889                                                          catch (Exception ex)                                                          catch (Exception ex)
# Line 1916  namespace RomCheater.Docking Line 1903  namespace RomCheater.Docking
1903                                                      writer.WriteResult<sbyte>(comparer.Address, comparer.Value);                                                      writer.WriteResult<sbyte>(comparer.Address, comparer.Value);
1904                                                  }                                                  }
1905                                              }                                              }
1906                                                address_index += STEP_SIZE;
1907                                          }                                          }
1908                                          #endregion                                          #endregion
1909                                      } break;                                      } break;
# Line 1927  namespace RomCheater.Docking Line 1915  namespace RomCheater.Docking
1915                                            foreach (var Value in t_data)                                            foreach (var Value in t_data)
1916                                            {                                            {
1917                                                if (SearchWorkerThread.CancellationPending) { break; }                                                if (SearchWorkerThread.CancellationPending) { break; }
1918                                                using (_16bit_unsigned_comparer_ comparer = new _16bit_unsigned_comparer_(SearchArgs, i))                                                using (_16bit_unsigned_comparer_ comparer = new _16bit_unsigned_comparer_(SearchArgs, address_index))
1919                                                {                                                {
1920                                                    ushort value = 0;                                                    ushort value = 0;
1921                                                    if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                    if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 1937  namespace RomCheater.Docking Line 1925  namespace RomCheater.Docking
1925                                                            try                                                            try
1926                                                            {                                                            {
1927                                                                gmp.OpenProvider();                                                                gmp.OpenProvider();
1928                                                                gmp.ReadMemory(i, out value);                                                                gmp.ReadMemory(address_index, out value);
1929                                                                gmp.CloseProvider();                                                                gmp.CloseProvider();
1930                                                            }                                                            }
1931                                                            catch (Exception ex)                                                            catch (Exception ex)
# Line 1957  namespace RomCheater.Docking Line 1945  namespace RomCheater.Docking
1945                                                        writer.WriteResult<ushort>(comparer.Address, comparer.Value);                                                        writer.WriteResult<ushort>(comparer.Address, comparer.Value);
1946                                                    }                                                    }
1947                                                }                                                }
1948                                                  address_index += STEP_SIZE;
1949                                            }                                            }
1950                                          #endregion                                          #endregion
1951                                      }                                      }
# Line 1967  namespace RomCheater.Docking Line 1956  namespace RomCheater.Docking
1956                                           foreach (var Value in t_data)                                           foreach (var Value in t_data)
1957                                           {                                           {
1958                                               if (SearchWorkerThread.CancellationPending) { break; }                                               if (SearchWorkerThread.CancellationPending) { break; }
1959                                               using (_16bit_signed_comparer_ comparer = new _16bit_signed_comparer_(SearchArgs, i))                                               using (_16bit_signed_comparer_ comparer = new _16bit_signed_comparer_(SearchArgs, address_index))
1960                                               {                                               {
1961                                                   short value = 0;                                                   short value = 0;
1962                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 1977  namespace RomCheater.Docking Line 1966  namespace RomCheater.Docking
1966                                                           try                                                           try
1967                                                           {                                                           {
1968                                                               gmp.OpenProvider();                                                               gmp.OpenProvider();
1969                                                               gmp.ReadMemory(i, out value);                                                               gmp.ReadMemory(address_index, out value);
1970                                                               gmp.CloseProvider();                                                               gmp.CloseProvider();
1971                                                           }                                                           }
1972                                                           catch (Exception ex)                                                           catch (Exception ex)
# Line 1997  namespace RomCheater.Docking Line 1986  namespace RomCheater.Docking
1986                                                       writer.WriteResult<short>(comparer.Address, comparer.Value);                                                       writer.WriteResult<short>(comparer.Address, comparer.Value);
1987                                                   }                                                   }
1988                                               }                                               }
1989                                                 address_index += STEP_SIZE;
1990                                           }                                           }
1991                                          #endregion                                          #endregion
1992                                      } break;                                      } break;
# Line 2008  namespace RomCheater.Docking Line 1998  namespace RomCheater.Docking
1998                                           foreach (var Value in t_data)                                           foreach (var Value in t_data)
1999                                           {                                           {
2000                                               if (SearchWorkerThread.CancellationPending) { break; }                                               if (SearchWorkerThread.CancellationPending) { break; }
2001                                               using (_32bit_unsigned_comparer_ comparer = new _32bit_unsigned_comparer_(SearchArgs, i))                                               using (_32bit_unsigned_comparer_ comparer = new _32bit_unsigned_comparer_(SearchArgs, address_index))
2002                                               {                                               {
2003                                                   uint value = 0;                                                   uint value = 0;
2004                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 2018  namespace RomCheater.Docking Line 2008  namespace RomCheater.Docking
2008                                                           try                                                           try
2009                                                           {                                                           {
2010                                                               gmp.OpenProvider();                                                               gmp.OpenProvider();
2011                                                               gmp.ReadMemory(i, out value);                                                               gmp.ReadMemory(address_index, out value);
2012                                                               gmp.CloseProvider();                                                               gmp.CloseProvider();
2013                                                           }                                                           }
2014                                                           catch (Exception ex)                                                           catch (Exception ex)
# Line 2038  namespace RomCheater.Docking Line 2028  namespace RomCheater.Docking
2028                                                       writer.WriteResult<uint>(comparer.Address, comparer.Value);                                                       writer.WriteResult<uint>(comparer.Address, comparer.Value);
2029                                                   }                                                   }
2030                                               }                                               }
2031                                                 address_index += STEP_SIZE;
2032                                           }                                           }
2033                                          #endregion                                          #endregion
2034                                      }                                      }
# Line 2048  namespace RomCheater.Docking Line 2039  namespace RomCheater.Docking
2039                                           foreach (var Value in t_data)                                           foreach (var Value in t_data)
2040                                           {                                           {
2041                                               if (SearchWorkerThread.CancellationPending) { break; }                                               if (SearchWorkerThread.CancellationPending) { break; }
2042                                               using (_32bit_signed_comparer_ comparer = new _32bit_signed_comparer_(SearchArgs, i))                                               using (_32bit_signed_comparer_ comparer = new _32bit_signed_comparer_(SearchArgs, address_index))
2043                                               {                                               {
2044                                                   int value = 0;                                                   int value = 0;
2045                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 2058  namespace RomCheater.Docking Line 2049  namespace RomCheater.Docking
2049                                                           try                                                           try
2050                                                           {                                                           {
2051                                                               gmp.OpenProvider();                                                               gmp.OpenProvider();
2052                                                               gmp.ReadMemory(i, out value);                                                               gmp.ReadMemory(address_index, out value);
2053                                                               gmp.CloseProvider();                                                               gmp.CloseProvider();
2054                                                           }                                                           }
2055                                                           catch (Exception ex)                                                           catch (Exception ex)
# Line 2078  namespace RomCheater.Docking Line 2069  namespace RomCheater.Docking
2069                                                       writer.WriteResult<int>(comparer.Address, comparer.Value);                                                       writer.WriteResult<int>(comparer.Address, comparer.Value);
2070                                                   }                                                   }
2071                                               }                                               }
2072                                                 address_index += STEP_SIZE;
2073                                           }                                           }
2074                                          #endregion                                          #endregion
2075                                      } break;                                      } break;
# Line 2089  namespace RomCheater.Docking Line 2081  namespace RomCheater.Docking
2081                                           foreach (var Value in t_data)                                           foreach (var Value in t_data)
2082                                           {                                           {
2083                                               if (SearchWorkerThread.CancellationPending) { break; }                                               if (SearchWorkerThread.CancellationPending) { break; }
2084                                               using (_64bit_unsigned_comparer_ comparer = new _64bit_unsigned_comparer_(SearchArgs, i))                                               using (_64bit_unsigned_comparer_ comparer = new _64bit_unsigned_comparer_(SearchArgs, address_index))
2085                                               {                                               {
2086                                                   ulong value = 0;                                                   ulong value = 0;
2087                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 2099  namespace RomCheater.Docking Line 2091  namespace RomCheater.Docking
2091                                                           try                                                           try
2092                                                           {                                                           {
2093                                                               gmp.OpenProvider();                                                               gmp.OpenProvider();
2094                                                               gmp.ReadMemory(i, out value);                                                               gmp.ReadMemory(address_index, out value);
2095                                                               gmp.CloseProvider();                                                               gmp.CloseProvider();
2096                                                           }                                                           }
2097                                                           catch (Exception ex)                                                           catch (Exception ex)
# Line 2119  namespace RomCheater.Docking Line 2111  namespace RomCheater.Docking
2111                                                       writer.WriteResult<ulong>(comparer.Address, comparer.Value);                                                       writer.WriteResult<ulong>(comparer.Address, comparer.Value);
2112                                                   }                                                   }
2113                                               }                                               }
2114                                                 address_index += STEP_SIZE;
2115                                           }                                           }
2116                                          #endregion                                          #endregion
2117                                      }                                      }
# Line 2129  namespace RomCheater.Docking Line 2122  namespace RomCheater.Docking
2122                                           foreach (var Value in t_data)                                           foreach (var Value in t_data)
2123                                           {                                           {
2124                                               if (SearchWorkerThread.CancellationPending) { break; }                                               if (SearchWorkerThread.CancellationPending) { break; }
2125                                               using (_64bit_signed_comparer_ comparer = new _64bit_signed_comparer_(SearchArgs, i))                                               using (_64bit_signed_comparer_ comparer = new _64bit_signed_comparer_(SearchArgs, address_index))
2126                                               {                                               {
2127                                                   long value = 0;                                                   long value = 0;
2128                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                                   if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
# Line 2139  namespace RomCheater.Docking Line 2132  namespace RomCheater.Docking
2132                                                           try                                                           try
2133                                                           {                                                           {
2134                                                               gmp.OpenProvider();                                                               gmp.OpenProvider();
2135                                                               gmp.ReadMemory(i, out value);                                                               gmp.ReadMemory(address_index, out value);
2136                                                               gmp.CloseProvider();                                                               gmp.CloseProvider();
2137                                                           }                                                           }
2138                                                           catch (Exception ex)                                                           catch (Exception ex)
# Line 2159  namespace RomCheater.Docking Line 2152  namespace RomCheater.Docking
2152                                                       writer.WriteResult<long>(comparer.Address, comparer.Value);                                                       writer.WriteResult<long>(comparer.Address, comparer.Value);
2153                                                   }                                                   }
2154                                               }                                               }
2155                                                 address_index += STEP_SIZE;
2156                                           }                                           }
2157                                          #endregion                                          #endregion
2158                                      } break;                                      } break;
2159                                        
2160                              }                              }
                               
                             //using (MemoryStream ms = new MemoryStream(data))  
                             //{  
                             //    using (BinaryReader br = new BinaryReader(ms))  
                             //    {  
                             //        while (br.BaseStream.Position < br.BaseStream.Length)  
                             //        {  
                             //            if (SearchWorkerThread.CancellationPending)  
                             //            {  
                             //                break;  
                             //            }                                        
                             //        }  
                             //    }  
                             //}  
2161                              #endregion                              #endregion
2162    
2163    
2164                              if (SearchWorkerThread.CancellationPending)                              if (SearchWorkerThread.CancellationPending)
2165                              {                              {
                                 st_profiler.Stop();  
2166                                  provider_st.Stop();                                  provider_st.Stop();
2167                                  st.Stop();                                  st.Stop();
2168                                  writer.CancelRequest();                                  writer.CancelRequest();
# Line 2190  namespace RomCheater.Docking Line 2170  namespace RomCheater.Docking
2170                                  writer = null;                                  writer = null;
2171                                  e.Result = true;                                  e.Result = true;
2172                                  provider.CloseProvider();                                  provider.CloseProvider();
                                 logger.Profiler.WriteLine("Memory Search Operation Profiler: search operation took {0} seconds", st_profiler.Elapsed.TotalSeconds.ToString());  
2173                                  return;                                  return;
2174                              }                              }
2175                          }                          }
2176    
                         st_profiler.Stop();  
   
                         logger.Profiler.WriteLine("Memory Search Operation Profiler: search operation took {0} seconds", st_profiler.Elapsed.TotalSeconds.ToString());  
   
2177                          if (SearchWorkerThread.CancellationPending)                          if (SearchWorkerThread.CancellationPending)
2178                          {                          {
2179                              provider_st.Stop();                              provider_st.Stop();
# Line 2216  namespace RomCheater.Docking Line 2191  namespace RomCheater.Docking
2191                      }                      }
2192                      else                      else
2193                      {                      {
2194                            // need to get the address list
2195                          #region action_onbytesread :: custom in-line delegate for processing read bytes                          using (SearchResultReader reader = new SearchResultReader(SearchGuid, false)) // delete the file on dispose
                         // custom in-line delegate for processing read bytes  
                         Action<OnBytesReadEventArgs> action_onbytesread = delegate(OnBytesReadEventArgs obre)  
2196                          {                          {
2197                              SearchDataTypes obre_sdt = SearchArgs.DataType;                              #region old-code
2198                              bool obre_unsigned = SearchArgs.IsUnsignedDataType;                              //provider.OpenProvider();
2199                              uint obre_CurrentIndex = obre.CurrentIndex; // this should represent the address                              ////int count = (int)((MemoryRangeSize - MemoryRangeStart) / STEP_SIZE);
2200                              SearchResultReader reader = null;                              ////SearchResultWriter writer = new SearchResultWriter((int)(count), SearchGuid);
2201                              if (obre.UserState != null)                              //provider.OnBytesRead += new BaseEventHandler<OnBytesReadEventArgs>(action_onbytesread);
2202                              {                              //provider.ReadProcessMemoryAtOnce(MemoryRangeStart, (MemoryRangeSize - MemoryRangeStart), reader);
2203                                  reader = (obre.UserState as SearchResultReader);                              //if (SearchWorkerThread.CancellationPending)
2204                                  if (reader == null)                              //{
2205                                      throw new InvalidOperationException("writer cannot be null");                              //    provider_st.Stop();
2206                              }                              //    st.Stop();          
2207                              else                              //    e.Result = true;
2208                              {                              //    provider.CloseProvider();
2209                                  throw new ArgumentNullException("UserState", "UserState cannot be null, it must be an instance of a SearchResultReader");                              //    return;
2210                              }                              //}
2211                              using (MemoryStream ms = new MemoryStream(obre.Data))                              //provider.CloseProvider();
2212                              {  
2213                                  using (BinaryReader br = new BinaryReader(ms))                              //byte[] guid = SearchGuid.ToByteArray();
2214                                //guid[guid.Length - 1]++; // increment the search guid by 1
2215                                //Guid new_SearchGuid = new Guid(guid);
2216                                ////const int item_count = 0x100;
2217                                //using (SearchResultWriter writer = new SearchResultWriter((int)(reader.ResultCount), new_SearchGuid))
2218                                //{
2219                                //    var items = reader.GetSearchAddressValueMatches((IAcceptsProcessAndConfig)this, SearchArgs, new Action<int, string>(UpdateProgress));
2220                                //    reader.Dispose(); // delete the result file, if allowed
2221                                //    foreach (var item in items)
2222                                //    {
2223                                //        switch (SearchArgs.DataType)
2224                                //        {
2225                                //            case SearchDataTypes._8bits:
2226                                //                if (SearchArgs.IsUnsignedDataType)
2227                                //                {
2228                                //                    writer.WriteResult<byte>(item.Address, Convert.ToByte(item.Value));
2229                                //                }
2230                                //                else
2231                                //                {
2232                                //                    writer.WriteResult<sbyte>(item.Address, Convert.ToSByte(item.Value));
2233                                //                }
2234                                //                break;
2235                                //            case SearchDataTypes._16bits:
2236                                //                if (SearchArgs.IsUnsignedDataType)
2237                                //                {
2238                                //                    writer.WriteResult<ushort>(item.Address, Convert.ToUInt16(item.Value));
2239                                //                }
2240                                //                else
2241                                //                {
2242                                //                    writer.WriteResult<short>(item.Address, Convert.ToInt16(item.Value));
2243                                //                }
2244                                //                break;
2245                                //            case SearchDataTypes._32bits:
2246                                //                if (SearchArgs.IsUnsignedDataType)
2247                                //                {
2248                                //                    writer.WriteResult<uint>(item.Address, Convert.ToUInt32(item.Value));
2249                                //                }
2250                                //                else
2251                                //                {
2252                                //                    writer.WriteResult<int>(item.Address, Convert.ToInt32(item.Value));
2253                                //                }
2254                                //                break;
2255                                //            case SearchDataTypes._64bits:
2256                                //                if (SearchArgs.IsUnsignedDataType)
2257                                //                {
2258                                //                    writer.WriteResult<ulong>(item.Address, Convert.ToUInt64(item.Value));
2259                                //                }
2260                                //                else
2261                                //                {
2262                                //                    writer.WriteResult<long>(item.Address, Convert.ToInt64(item.Value));
2263                                //                }
2264                                //                break;
2265                                //        }
2266                                //    }
2267                                //}
2268                                //SearchGuid = new_SearchGuid;
2269                                #endregion
2270    
2271                                byte[] guid = SearchGuid.ToByteArray();
2272                                guid[guid.Length - 1]++; // increment the search guid by 1
2273                                Guid new_SearchGuid = new Guid(guid);
2274    
2275                                foreach(var k in reader.GetResults(SearchArgs.IsUnsignedDataType,SearchArgs.DataType,new Action<int,string>(UpdateProgress)))
2276                                {                                
2277                                    provider.OpenProvider();
2278                                    int bytesRead=0;
2279                                    byte[] data = new byte[STEP_SIZE];
2280                                    provider.ReadProcessMemory(k.Address, STEP_SIZE, out bytesRead, out data);
2281                                    provider.CloseProvider();
2282    
2283                                    uint address_index = k.Address;
2284                                    #region comparison and serialization
2285                                    switch (sdt)
2286                                  {                                  {
2287                                      while (br.BaseStream.Position < br.BaseStream.Length)                                      case SearchDataTypes._8bits:
2288                                      {                                          if (unsigned)
                                         ISerializedResult sr = (reader as ISerializedResult);  
                                         if (sr == null)  
2289                                          {                                          {
2290                                              throw new ArgumentNullException("sr", string.Format("Unable to cast: '{0}' to '{1}'", reader.GetType().Name, typeof(ISerializedResult).Name));                                              #region 8bits - unsigned
2291                                          }                                              var t_data = BitTools.ConvertByteArray<byte>(data);
2292                                          int sr_index = 0;                                              foreach (var Value in t_data)
                                         try  
                                         {  
                                             if (sr.ContainsAddress(obre_CurrentIndex, obre_unsigned, obre_sdt, new Action<int, string>(this.UpdateProgress), out sr_index))  
2293                                              {                                              {
2294                                                  StructResultType<ulong> result = StructResultType<ulong>.Empty;                                                  if (SearchWorkerThread.CancellationPending) { break; }
2295                                                  sr.GetResultAtIndex(sr_index, obre_unsigned, obre_sdt, new Action<int, string>(this.UpdateProgress), out result);                                                  using (_8bit_unsigned_comparer_ comparer = new _8bit_unsigned_comparer_(SearchArgs, address_index))
                                                 if (Debugger.IsAttached)  
2296                                                  {                                                  {
2297                                                      Debugger.Break();                                                      byte value = 0;
2298                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2299                                                        {
2300                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2301                                                            {
2302                                                                try
2303                                                                {
2304                                                                    gmp.OpenProvider();
2305                                                                    gmp.ReadMemory(address_index, out value);
2306                                                                    gmp.CloseProvider();
2307                                                                }
2308                                                                catch (Exception ex)
2309                                                                {
2310                                                                    logger.VerboseError.WriteLine(ex.ToString());
2311                                                                }
2312                                                            }
2313                                                            comparer.Value = value;
2314                                                        }
2315                                                        else
2316                                                        {
2317                                                            value = Convert.ToByte(SearchArgs.CompareStartValue);
2318                                                            comparer.Value = value;
2319                                                        }
2320                                                        if (comparer.Compare(Convert.ToByte(Value), value))
2321                                                        {
2322                                                            writer.WriteResult<byte>(comparer.Address, comparer.Value);
2323                                                        }
2324                                                  }                                                  }
2325                                                    address_index += STEP_SIZE;
2326                                              }                                              }
2327                                                #endregion
2328                                          }                                          }
2329                                          catch (Exception ex)                                          else
2330                                          {                                          {
2331                                              throw ex;                                              #region 8bits - signed
2332                                          }                                              var t_data = BitTools.ConvertByteArray<sbyte>(data);
2333                                          switch (obre_sdt)                                              foreach (var Value in t_data)
2334                                          {                                              {
2335                                              case SearchDataTypes._8bits:                                                  if (SearchWorkerThread.CancellationPending) { break; }
2336                                                  if (obre_unsigned)                                                  using (_8bit_signed_comparer_ comparer = new _8bit_signed_comparer_(SearchArgs, address_index))
2337                                                  {                                                  {
2338                                                      #region 8bit - unsigned                                                      sbyte value = 0;
2339                                                      var new_value = br.ReadByte(); // this should contain the updated value from memory                                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
                                                     using (_8bit_unsigned_comparer_ comparer = new _8bit_unsigned_comparer_(SearchArgs, obre_CurrentIndex))  
2340                                                      {                                                      {
2341                                                          byte value = 0; // this is the vaule we want to compare against                                                          using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
                                                         value = Convert.ToByte(SearchArgs.CompareStartValue);  
                                                         comparer.Value = value;  
                                                         if (comparer.Compare(new_value, value))  
2342                                                          {                                                          {
2343                                                              //writer.WriteResult<byte>(comparer.Address, comparer.Value);                                                              try
2344                                                                {
2345                                                                    gmp.OpenProvider();
2346                                                                    gmp.ReadMemory(address_index, out value);
2347                                                                    gmp.CloseProvider();
2348                                                                }
2349                                                                catch (Exception ex)
2350                                                                {
2351                                                                    logger.VerboseError.WriteLine(ex.ToString());
2352                                                                }
2353                                                          }                                                          }
2354                                                            comparer.Value = value;
2355                                                        }
2356                                                        else
2357                                                        {
2358                                                            value = Convert.ToSByte(SearchArgs.CompareStartValue);
2359                                                            comparer.Value = value;
2360                                                        }
2361                                                        if (comparer.Compare(Convert.ToSByte(Value), value))
2362                                                        {
2363                                                            writer.WriteResult<sbyte>(comparer.Address, comparer.Value);
2364                                                      }                                                      }
                                                     #endregion  
                                                 }  
                                                 else  
                                                 {  
2365                                                  }                                                  }
2366                                                  break;                                                  address_index += STEP_SIZE;
2367                                              case SearchDataTypes._16bits:                                              }
2368                                                  if (obre_unsigned)                                              #endregion
2369                                            } break;
2370                                        case SearchDataTypes._16bits:
2371                                            if (unsigned)
2372                                            {
2373                                                #region 16bits - unsigned
2374                                                var t_data = BitTools.ConvertByteArray<ushort>(data);
2375                                                foreach (var Value in t_data)
2376                                                {
2377                                                    if (SearchWorkerThread.CancellationPending) { break; }
2378                                                    using (_16bit_unsigned_comparer_ comparer = new _16bit_unsigned_comparer_(SearchArgs, address_index))
2379                                                  {                                                  {
2380                                                        ushort value = 0;
2381                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2382                                                        {
2383                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2384                                                            {
2385                                                                try
2386                                                                {
2387                                                                    gmp.OpenProvider();
2388                                                                    gmp.ReadMemory(address_index, out value);
2389                                                                    gmp.CloseProvider();
2390                                                                }
2391                                                                catch (Exception ex)
2392                                                                {
2393                                                                    logger.VerboseError.WriteLine(ex.ToString());
2394                                                                }
2395                                                            }
2396                                                            comparer.Value = value;
2397                                                        }
2398                                                        else
2399                                                        {
2400                                                            value = Convert.ToUInt16(SearchArgs.CompareStartValue);
2401                                                            comparer.Value = value;
2402                                                        }
2403                                                        if (comparer.Compare(Convert.ToUInt16(Value), value))
2404                                                        {
2405                                                            writer.WriteResult<ushort>(comparer.Address, comparer.Value);
2406                                                        }
2407                                                  }                                                  }
2408                                                  else                                                  address_index += STEP_SIZE;
2409                                                }
2410                                                #endregion
2411                                            }
2412                                            else
2413                                            {
2414                                                #region 16bits - signed
2415                                                var t_data = BitTools.ConvertByteArray<short>(data);
2416                                                foreach (var Value in t_data)
2417                                                {
2418                                                    if (SearchWorkerThread.CancellationPending) { break; }
2419                                                    using (_16bit_signed_comparer_ comparer = new _16bit_signed_comparer_(SearchArgs, address_index))
2420                                                  {                                                  {
2421                                                        short value = 0;
2422                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2423                                                        {
2424                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2425                                                            {
2426                                                                try
2427                                                                {
2428                                                                    gmp.OpenProvider();
2429                                                                    gmp.ReadMemory(address_index, out value);
2430                                                                    gmp.CloseProvider();
2431                                                                }
2432                                                                catch (Exception ex)
2433                                                                {
2434                                                                    logger.VerboseError.WriteLine(ex.ToString());
2435                                                                }
2436                                                            }
2437                                                            comparer.Value = value;
2438                                                        }
2439                                                        else
2440                                                        {
2441                                                            value = Convert.ToInt16(SearchArgs.CompareStartValue);
2442                                                            comparer.Value = value;
2443                                                        }
2444                                                        if (comparer.Compare(Convert.ToSByte(Value), value))
2445                                                        {
2446                                                            writer.WriteResult<short>(comparer.Address, comparer.Value);
2447                                                        }
2448                                                  }                                                  }
2449                                                  break;                                                  address_index += STEP_SIZE;
2450                                              case SearchDataTypes._32bits:                                              }
2451                                                  if (obre_unsigned)                                              #endregion
2452                                            } break;
2453                                        case SearchDataTypes._32bits:
2454                                            if (unsigned)
2455                                            {
2456                                                #region 32bits - unsigned
2457                                                var t_data = BitTools.ConvertByteArray<uint>(data);
2458                                                foreach (var Value in t_data)
2459                                                {
2460                                                    if (SearchWorkerThread.CancellationPending) { break; }
2461                                                    using (_32bit_unsigned_comparer_ comparer = new _32bit_unsigned_comparer_(SearchArgs, address_index))
2462                                                  {                                                  {
2463                                                        uint value = 0;
2464                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2465                                                        {
2466                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2467                                                            {
2468                                                                try
2469                                                                {
2470                                                                    gmp.OpenProvider();
2471                                                                    gmp.ReadMemory(address_index, out value);
2472                                                                    gmp.CloseProvider();
2473                                                                }
2474                                                                catch (Exception ex)
2475                                                                {
2476                                                                    logger.VerboseError.WriteLine(ex.ToString());
2477                                                                }
2478                                                            }
2479                                                            comparer.Value = value;
2480                                                        }
2481                                                        else
2482                                                        {
2483                                                            value = Convert.ToUInt32(SearchArgs.CompareStartValue);
2484                                                            comparer.Value = value;
2485                                                        }
2486                                                        if (comparer.Compare(Convert.ToUInt32(Value), value))
2487                                                        {
2488                                                            writer.WriteResult<uint>(comparer.Address, comparer.Value);
2489                                                        }
2490                                                  }                                                  }
2491                                                  else                                                  address_index += STEP_SIZE;
2492                                                }
2493                                                #endregion
2494                                            }
2495                                            else
2496                                            {
2497                                                #region 32bits - signed
2498                                                var t_data = BitTools.ConvertByteArray<int>(data);
2499                                                foreach (var Value in t_data)
2500                                                {
2501                                                    if (SearchWorkerThread.CancellationPending) { break; }
2502                                                    using (_32bit_signed_comparer_ comparer = new _32bit_signed_comparer_(SearchArgs, address_index))
2503                                                  {                                                  {
2504                                                        int value = 0;
2505                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2506                                                        {
2507                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2508                                                            {
2509                                                                try
2510                                                                {
2511                                                                    gmp.OpenProvider();
2512                                                                    gmp.ReadMemory(address_index, out value);
2513                                                                    gmp.CloseProvider();
2514                                                                }
2515                                                                catch (Exception ex)
2516                                                                {
2517                                                                    logger.VerboseError.WriteLine(ex.ToString());
2518                                                                }
2519                                                            }
2520                                                            comparer.Value = value;
2521                                                        }
2522                                                        else
2523                                                        {
2524                                                            value = Convert.ToInt32(SearchArgs.CompareStartValue);
2525                                                            comparer.Value = value;
2526                                                        }
2527                                                        if (comparer.Compare(Convert.ToInt32(Value), value))
2528                                                        {
2529                                                            writer.WriteResult<int>(comparer.Address, comparer.Value);
2530                                                        }
2531                                                  }                                                  }
2532                                                  break;                                                  address_index += STEP_SIZE;
2533                                              case SearchDataTypes._64bits:                                              }
2534                                                  if (obre_unsigned)                                              #endregion
2535                                            } break;
2536                                        case SearchDataTypes._64bits:
2537                                            if (unsigned)
2538                                            {
2539                                                #region 64bits - unsigned
2540                                                var t_data = BitTools.ConvertByteArray<ulong>(data);
2541                                                foreach (var Value in t_data)
2542                                                {
2543                                                    if (SearchWorkerThread.CancellationPending) { break; }
2544                                                    using (_64bit_unsigned_comparer_ comparer = new _64bit_unsigned_comparer_(SearchArgs, address_index))
2545                                                  {                                                  {
2546                                                        ulong value = 0;
2547                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2548                                                        {
2549                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2550                                                            {
2551                                                                try
2552                                                                {
2553                                                                    gmp.OpenProvider();
2554                                                                    gmp.ReadMemory(address_index, out value);
2555                                                                    gmp.CloseProvider();
2556                                                                }
2557                                                                catch (Exception ex)
2558                                                                {
2559                                                                    logger.VerboseError.WriteLine(ex.ToString());
2560                                                                }
2561                                                            }
2562                                                            comparer.Value = value;
2563                                                        }
2564                                                        else
2565                                                        {
2566                                                            value = Convert.ToUInt64(SearchArgs.CompareStartValue);
2567                                                            comparer.Value = value;
2568                                                        }
2569                                                        if (comparer.Compare(Convert.ToUInt64(Value), value))
2570                                                        {
2571                                                            writer.WriteResult<ulong>(comparer.Address, comparer.Value);
2572                                                        }
2573                                                  }                                                  }
2574                                                  else                                                  address_index += STEP_SIZE;
2575                                                }
2576                                                #endregion
2577                                            }
2578                                            else
2579                                            {
2580                                                #region 64bits - signed
2581                                                var t_data = BitTools.ConvertByteArray<long>(data);
2582                                                foreach (var Value in t_data)
2583                                                {
2584                                                    if (SearchWorkerThread.CancellationPending) { break; }
2585                                                    using (_64bit_signed_comparer_ comparer = new _64bit_signed_comparer_(SearchArgs, address_index))
2586                                                  {                                                  {
2587                                                        long value = 0;
2588                                                        if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
2589                                                        {
2590                                                            using (GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this))
2591                                                            {
2592                                                                try
2593                                                                {
2594                                                                    gmp.OpenProvider();
2595                                                                    gmp.ReadMemory(address_index, out value);
2596                                                                    gmp.CloseProvider();
2597                                                                }
2598                                                                catch (Exception ex)
2599                                                                {
2600                                                                    logger.VerboseError.WriteLine(ex.ToString());
2601                                                                }
2602                                                            }
2603                                                            comparer.Value = value;
2604                                                        }
2605                                                        else
2606                                                        {
2607                                                            value = Convert.ToInt64(SearchArgs.CompareStartValue);
2608                                                            comparer.Value = value;
2609                                                        }
2610                                                        if (comparer.Compare(Convert.ToInt64(Value), value))
2611                                                        {
2612                                                            writer.WriteResult<long>(comparer.Address, comparer.Value);
2613                                                        }
2614                                                  }                                                  }
2615                                                  break;                                                  address_index += STEP_SIZE;
2616                                          }                                              }
2617                                          uint size = 0;                                              #endregion
2618                                          BitTools.SizeOf(obre_sdt, out size);                                          } break;
2619                                          obre_CurrentIndex += size;  
                                     }  
2620                                  }                                  }
2621                              }                                  #endregion
                         };  
                         #endregion  
                         // need to get the address list  
                         using (SearchResultReader reader = new SearchResultReader(SearchGuid, false)) // delete the file on dispose  
                         {  
                             
2622    
                             provider.OpenProvider();  
                             //int count = (int)((MemoryRangeSize - MemoryRangeStart) / STEP_SIZE);  
                             //SearchResultWriter writer = new SearchResultWriter((int)(count), SearchGuid);  
                             provider.OnBytesRead += new BaseEventHandler<OnBytesReadEventArgs>(action_onbytesread);  
                             provider.ReadProcessMemoryAtOnce(MemoryRangeStart, (MemoryRangeSize - MemoryRangeStart), reader);  
                             if (SearchWorkerThread.CancellationPending)  
                             {  
                                 provider_st.Stop();  
                                 st.Stop();            
                                 e.Result = true;  
                                 provider.CloseProvider();  
                                 return;  
2623                              }                              }
                             provider.CloseProvider();  
2624    
2625                          //byte[] guid = SearchGuid.ToByteArray();  
2626                          //guid[guid.Length - 1]++; // increment the search guid by 1                              //ISerializedResult sr = (reader as ISerializedResult);
2627                          //Guid new_SearchGuid = new Guid(guid);                              //if (sr == null)
2628                          ////const int item_count = 0x100;                              //{
2629                          //using (SearchResultWriter writer = new SearchResultWriter((int)(reader.ResultCount), new_SearchGuid))                              //    throw new ArgumentNullException("sr", string.Format("Unable to cast: '{0}' to '{1}'", reader.GetType().Name, typeof(ISerializedResult).Name));
2630                          //{                              //}
2631                          //    var items = reader.GetSearchAddressValueMatches((IAcceptsProcessAndConfig)this, SearchArgs, new Action<int, string>(UpdateProgress));                              //int sr_index = 0;
2632                          //    reader.Dispose(); // delete the result file, if allowed                              //try
2633                          //    foreach (var item in items)                              //{
2634                          //    {                              //    if (sr.ContainsAddress(obre_CurrentIndex, obre_unsigned, obre_sdt, new Action<int, string>(this.UpdateProgress), out sr_index))
2635                          //        switch (SearchArgs.DataType)                              //    {
2636                          //        {                              //        StructResultType<ulong> result = StructResultType<ulong>.Empty;
2637                          //            case SearchDataTypes._8bits:                              //        sr.GetResultAtIndex(sr_index, obre_unsigned, obre_sdt, new Action<int, string>(this.UpdateProgress), out result);
2638                          //                if (SearchArgs.IsUnsignedDataType)                              //        if (Debugger.IsAttached)
2639                          //                {                              //        {
2640                          //                    writer.WriteResult<byte>(item.Address, Convert.ToByte(item.Value));                              //            Debugger.Break();
2641                          //                }                              //        }
2642                          //                else                              //    }
2643                          //                {                              //}
2644                          //                    writer.WriteResult<sbyte>(item.Address, Convert.ToSByte(item.Value));  
2645                          //                }  
2646                          //                break;  
                         //            case SearchDataTypes._16bits:  
                         //                if (SearchArgs.IsUnsignedDataType)  
                         //                {  
                         //                    writer.WriteResult<ushort>(item.Address, Convert.ToUInt16(item.Value));  
                         //                }  
                         //                else  
                         //                {  
                         //                    writer.WriteResult<short>(item.Address, Convert.ToInt16(item.Value));  
                         //                }  
                         //                break;  
                         //            case SearchDataTypes._32bits:  
                         //                if (SearchArgs.IsUnsignedDataType)  
                         //                {  
                         //                    writer.WriteResult<uint>(item.Address, Convert.ToUInt32(item.Value));  
                         //                }  
                         //                else  
                         //                {  
                         //                    writer.WriteResult<int>(item.Address, Convert.ToInt32(item.Value));  
                         //                }  
                         //                break;  
                         //            case SearchDataTypes._64bits:  
                         //                if (SearchArgs.IsUnsignedDataType)  
                         //                {  
                         //                    writer.WriteResult<ulong>(item.Address, Convert.ToUInt64(item.Value));  
                         //                }  
                         //                else  
                         //                {  
                         //                    writer.WriteResult<long>(item.Address, Convert.ToInt64(item.Value));  
                         //                }  
                         //                break;  
                         //        }  
                         //    }  
                         //}  
                         //SearchGuid = new_SearchGuid;  
2647                          }                          }
2648                      }                      }
2649                  }                  }

Legend:
Removed from v.525  
changed lines
  Added in v.526

  ViewVC Help
Powered by ViewVC 1.1.22