private void RefreshTable(RezultRefreshType refreshType) { if (!InitProcessManager()) { return; } var memory = PManager.GetMemoryForProcess(); var comparer = Scanner.GetValueReaderByDataType(ViewModel.SelectedDataType, memory, ViewModel); var startPointer = new IntPtr(ViewModel.StartSearchAddress); var convertedCompareValue = comparer.ConvertToComparableValue(ViewModel.ScanValue); foreach (var pointer in ViewModel.VisibleResults.ToList()) { if (!comparer.CheckTableRezult(pointer, startPointer, convertedCompareValue, refreshType)) { ViewModel.VisibleResults.Remove(pointer); } } }
public bool CheckTableRezult(VisibleResult rezult, IntPtr baseAddress, IComparable compareValue, RezultRefreshType refreshType) { var processingPointer = baseAddress; for (var i = 0; i < rezult.Offsets.Count; i++) { var offset = rezult.Offsets[i]; //if (offset == rezult.Offsets.Last()) //I nade huge nistake -_\ if (i == rezult.Offsets.Count - 1) { processingPointer += offset; break; } processingPointer = M.ReadPointer(processingPointer + offset); if (M.CheckPointer(processingPointer) != SectionCategory.HEAP) { if (refreshType == RezultRefreshType.DeleteBroken || refreshType == RezultRefreshType.FilterValues) { return(false); } else if (refreshType == RezultRefreshType.RefreshValues) { rezult.Value = "-"; rezult.Address = "-"; return(true); } else { ThrowRefreshTypeException(refreshType); } } } if (refreshType == RezultRefreshType.DeleteBroken) { return(true); } if (refreshType == RezultRefreshType.FilterValues) { if (MVM.SelectedDataType == DataType.String || MVM.SelectedDataType == DataType.StringU) { var readDisplayValue = ReadDisplayString(processingPointer); var compareString = (string)compareValue; if (MVM.StringIgnoreCase) { compareString = compareString.ToLower(); readDisplayValue = readDisplayValue.ToLower(); } if (MVM.StringCompareType == StringCompareType.Contains) { if (!readDisplayValue.Contains(compareString)) { return(false); } } else if (MVM.StringCompareType == StringCompareType.StartWith) { if (!readDisplayValue.StartsWith(compareString)) { return(false); } } else if (MVM.StringCompareType == StringCompareType.EndsWith) { if (!readDisplayValue.EndsWith(compareString)) { return(false); } } else if (MVM.StringCompareType == StringCompareType.Equal) { if (compareString != readDisplayValue) { return(false); } } } else { var compValue = ReadComparable(processingPointer); if (!CheckSatisfies(compareValue, compValue)) { return(false); } var readDisplayValue = ReadDisplayString(processingPointer); rezult.Value = readDisplayValue; rezult.Address = processingPointer.ToString("x"); } } else if (refreshType == RezultRefreshType.RefreshValues) { var readDisplayValue = ReadDisplayString(processingPointer); rezult.Value = readDisplayValue; rezult.Address = processingPointer.ToString("x"); } else { ThrowRefreshTypeException(refreshType); } return(true); }
public static void ThrowRefreshTypeException(RezultRefreshType refreshType) { throw new NotImplementedException("Result refresh type is not implemented in code: " + refreshType); }