78 lines
2.4 KiB
C#
78 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.MemoryRegions: return _monitor.Config.MemoryRegionScanTimeout;
|
|
case ScanTarget.Modules: return _monitor.Config.ModuleScanTimeout;
|
|
case ScanTarget.Threads: return _monitor.Config.ThreadScanTimeout;
|
|
default: return _monitor.Config.ProcessScanInterval;
|
|
}
|
|
}
|
|
|
|
public IScannable CreateScanTask()
|
|
{
|
|
return new ProcessScanner(this, _monitor.Processes);
|
|
}
|
|
|
|
async public Task<IScannable> CreateFullScanTaskAsync(ScanTarget target = ScanTarget.ProcessDetails)
|
|
{
|
|
if (target.HasFlag(ScanTarget.Processes))
|
|
{
|
|
await CreateScanTask().ScanAsync();
|
|
target &= ~ScanTarget.Processes;
|
|
}
|
|
|
|
var scanner = new ScanQueue();
|
|
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.MemoryRegions))
|
|
{
|
|
scanner.Add(new MemoryRegionScanner(this, process.MemoryRegionsContainer, process.PID));
|
|
}
|
|
|
|
if (target.HasFlag(ScanTarget.Modules))
|
|
{
|
|
scanner.Add(new ModuleScanner(this, process.ModulesContainer, process.PID));
|
|
}
|
|
|
|
if (target.HasFlag(ScanTarget.Threads))
|
|
{
|
|
scanner.Add(new ThreadScanner(this, process.ThreadsContainer, process.PID));
|
|
}
|
|
|
|
return scanner;
|
|
}
|
|
|
|
public ScanProvider(ProcessMonitor monitoringService)
|
|
{
|
|
_monitor = monitoringService;
|
|
}
|
|
}
|
|
}
|