79 lines
2.4 KiB
C#
79 lines
2.4 KiB
C#
// File: Services/Scanners/ScanProvider.cs
|
|
|
|
using WebmrAPI.Models;
|
|
|
|
namespace WebmrAPI.Services.Scanners
|
|
{
|
|
public class ScanProvider : IScanProvider
|
|
{
|
|
private ProcessMonitor _monitor;
|
|
public bool ProcessReadAccess { get => _monitor.Config.AllowProcessReadAccess; }
|
|
public ILogger Logger { get => _monitor.Logger; }
|
|
|
|
public int GetTimeout(ScanTarget target)
|
|
{
|
|
switch (target)
|
|
{
|
|
case ScanTarget.Processes: return _monitor.Config.MemoryRegionScanTimeout;
|
|
case ScanTarget.Modules: return _monitor.Config.MemoryRegionScanTimeout;
|
|
case ScanTarget.Threads: return _monitor.Config.MemoryRegionScanTimeout;
|
|
default: return _monitor.Config.ProcessScanInterval;
|
|
}
|
|
}
|
|
|
|
public IScannable CreateScanTask()
|
|
{
|
|
return new ProcessScanner(this, _monitor.Processes);
|
|
}
|
|
|
|
private IScannable CreateScanTask(ScanTarget target)
|
|
{
|
|
var scanner = new ScanQueue();
|
|
|
|
CreateScanTask().Scan();
|
|
var data = _monitor.Processes.Values;
|
|
|
|
if (data != null)
|
|
{
|
|
foreach (var process in data)
|
|
{
|
|
scanner.Add(CreateScanTask(process, target));
|
|
}
|
|
}
|
|
return scanner;
|
|
}
|
|
|
|
public IScannable CreateScanTask(ProcessInfo? process, ScanTarget target = ScanTarget.ProcessDetails)
|
|
{
|
|
var scanner = new ScanQueue();
|
|
|
|
if (target.HasFlag(ScanTarget.Processes))
|
|
{
|
|
return CreateScanTask(target^ScanTarget.Processes);
|
|
}
|
|
|
|
if (target.HasFlag(ScanTarget.MemoryRegions) && process != null)
|
|
{
|
|
scanner.Add(new MemoryRegionScanner(this, process.MemoryRegionsContainer, process.PID));
|
|
}
|
|
|
|
if (target.HasFlag(ScanTarget.Modules) && process != null)
|
|
{
|
|
scanner.Add(new ModuleScanner(this, process.ModulesContainer, process.PID));
|
|
}
|
|
|
|
if (target.HasFlag(ScanTarget.Threads) && process != null)
|
|
{
|
|
scanner.Add(new ThreadScanner(this, process.ThreadsContainer, process.PID));
|
|
}
|
|
|
|
return scanner;
|
|
}
|
|
|
|
public ScanProvider(ProcessMonitor monitoringService)
|
|
{
|
|
_monitor = monitoringService;
|
|
}
|
|
}
|
|
}
|