/// <summary> /// Begins the value collection. /// </summary> private void CollectValues() { DataType dataType = ScanResultsViewModel.GetInstance().ActiveType; TrackableTask <Snapshot> valueCollectTask = ValueCollector.CollectValues( SnapshotManager.GetSnapshot(Snapshot.SnapshotRetrievalMode.FromActiveSnapshotOrPrefilter, dataType), TrackableTask.UniversalIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectTask); SnapshotManager.SaveSnapshot(valueCollectTask.Result); }
/// <summary> /// Initializes a new instance of the <see cref="ManualScanner"/> class. /// </summary> public ManualScanner() { this.InitializeComponent(); // Windows Forms hosting -- TODO: Phase this out this.ValueHexDecBox = new HexDecTextBox(); this.ValueHexDecBox.TextChanged += this.ValueUpdated; this.valueHexDecBox.Children.Add(WinformsHostingHelper.CreateHostedControl(this.ValueHexDecBox)); Task.Run(() => ScanResultsViewModel.GetInstance().Subscribe(this)); }
/// <summary> /// Begins the value collection. /// </summary> private void CollectValues() { DataTypeBase dataType = ScanResultsViewModel.GetInstance().ActiveType; TrackableTask <Snapshot> valueCollectTask = ValueCollector.CollectValues( SessionManager.Session?.OpenedProcess, SessionManager.Session.SnapshotManager.GetActiveSnapshotCreateIfNone(SessionManager.Session.OpenedProcess), TrackableTask.UniversalIdentifier ); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectTask); SessionManager.Session.SnapshotManager.SaveSnapshot(valueCollectTask.Result); }
/// <summary> /// Returns the memory regions associated with the current snapshot. If none exist, a query will be done. Will not read any memory. /// </summary> /// <returns>The current active snapshot of memory in the target process.</returns> private Snapshot GetActiveSnapshotCreateIfNone() { lock (this.AccessLock) { if (this.Snapshots.Count == 0 || this.Snapshots.Peek() == null || this.Snapshots.Peek().ElementCount == 0) { Snapshot snapshot = Prefilter.GetInstance().GetPrefilteredSnapshot(); snapshot.Alignment = SettingsViewModel.GetInstance().Alignment; snapshot.ElementDataType = ScanResultsViewModel.GetInstance().ActiveType; return(snapshot); } // Return the snapshot return(this.Snapshots.Peek()); } }
/// <summary> /// Starts the scan using the current constraints. /// </summary> private void StartScan() { // Create a constraint manager that includes the current active constraint DataTypeBase dataType = ScanResultsViewModel.GetInstance().ActiveType; ScanConstraints scanConstraints = new ScanConstraints(dataType, this.ActiveConstraint?.Clone()); if (!scanConstraints.IsValid()) { Logger.Log(LogLevel.Warn, "Unable to start scan with given constraints"); return; } try { // Collect values TrackableTask <Snapshot> valueCollectorTask = ValueCollector.CollectValues( SessionManager.Session.OpenedProcess, SessionManager.Session.SnapshotManager.GetActiveSnapshotCreateIfNone(SessionManager.Session.OpenedProcess), TrackableTask.UniversalIdentifier ); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectorTask); // Perform manual scan on value collection complete valueCollectorTask.OnCompletedEvent += ((completedValueCollectionTask) => { Snapshot snapshot = valueCollectorTask.Result; TrackableTask <Snapshot> scanTask = ManualScanner.Scan( snapshot, scanConstraints, TrackableTask.UniversalIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(scanTask); SessionManager.Session.SnapshotManager.SaveSnapshot(scanTask.Result); }); } catch (TaskConflictException) { } }
/// <summary> /// Starts the scan using the current constraints. /// </summary> private void StartScan() { // Create a constraint manager that includes the current active constraint ConstraintNode scanConstraints = this.ActiveConstraint.Clone(); if (!scanConstraints.IsValid()) { Logger.Log(LogLevel.Warn, "Unable to start scan with given constraints"); return; } DataType dataType = ScanResultsViewModel.GetInstance().ActiveType; try { // Collect values TrackableTask <Snapshot> valueCollectorTask = ValueCollector.CollectValues( SnapshotManager.GetSnapshot(Snapshot.SnapshotRetrievalMode.FromActiveSnapshotOrPrefilter, dataType), TrackableTask.UniversalIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectorTask); // Perform manual scan on value collection complete valueCollectorTask.OnCompletedEvent += ((completedValueCollectionTask) => { Snapshot snapshot = valueCollectorTask.Result; TrackableTask <Snapshot> scanTask = ManualScanner.Scan( snapshot, scanConstraints, TrackableTask.UniversalIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(scanTask); SnapshotManager.SaveSnapshot(scanTask.Result); }); } catch (TaskConflictException) { } }
/// <summary> /// Returns the memory regions associated with the current snapshot. If none exist, a query will be done. /// </summary> /// <param name="createIfNone">Creates a snapshot if none exists.</param> /// <returns>The current active snapshot of memory in the target process.</returns> public Snapshot GetActiveSnapshot(Boolean createIfNone = true) { lock (this.AccessLock) { // Take a snapshot if there are none, or the current one is empty if (this.Snapshots.Count == 0 || this.Snapshots.Peek() == null || this.Snapshots.Peek().ElementCount == 0) { if (createIfNone) { Snapshot snapshot = Prefilter.GetInstance().GetPrefilteredSnapshot(); snapshot.UpdateSettings(ScanResultsViewModel.GetInstance().ActiveType, SettingsViewModel.GetInstance().Alignment); return(snapshot); } else { return(null); } } // Return the snapshot return(this.Snapshots.Peek()); } }
/// <summary> /// Updates the active type. /// </summary> /// <param name="activeType">The new active type.</param> public void Update(Type activeType) { this.GetActiveSnapshot(createIfNone: false)?.UpdateSettings(ScanResultsViewModel.GetInstance().ActiveType, SettingsViewModel.GetInstance().Alignment); }
/// <summary> /// Initializes a new instance of the <see cref="SnapshotRegion" /> class. /// </summary> /// <param name="baseAddress">The base address of this snapshot region.</param> /// <param name="regionSize">The size of this snapshot region.</param> public SnapshotRegion(IntPtr baseAddress, Int32 regionSize) : base(baseAddress, regionSize) { this.TimeSinceLastRead = DateTime.MinValue; this.Alignment = SettingsViewModel.GetInstance().Alignment; this.ElementType = ScanResultsViewModel.GetInstance().ActiveType; }