Получение списка запущенных процессов
Получение списка запущенных процессов в системе
Получение списка запущенных процессов
Локальный пример ниже выполняется в C# Script EyeAuras с загруженным модулем EyeAuras.Memory. LocalProcess.GetProcesses() возвращает дескрипторы ProcessInformation, а не открытые читатели памяти; освобождать каждую запись через Dispose не нужно. Для встроенного SDK-хоста модуль подключают через UseMemory() и ждут EnsureReadyAsync() — это отдельная настройка приложения, не строка обычного скрипта.
Начнём с очень простой задачи: как получить список процессов, запущенных на локальной машине?
В классическом C# для этого обычно используют Process.GetProcesses().
Но так как мы работаем через API EyeAuras, у нас есть дополнительные возможности. Выбор backend меняет источник данных и требования к окружению.
Использование .NET-примитивов — аналог работы через Process
using EyeAuras.Memory;
var processes = LocalProcess.GetProcesses();
Log.Info(processes.DumpToNamedTable("Processes"));
После запуска этого скрипта в EventLog вы увидите примерно такой результат — список процессов с самой базовой информацией: ProcessId (или PID) и ProcessName.

Следующие варианты сохранены как примеры интеграции с
LCProcess. Нужны отдельно установленная совместимая MPFS/LeechCore-сборка, её нативные библиотеки и настроенное устройство/драйвер. Реализация этого backend не подтверждена в рассматриваемом срезе исходников; одна замена класса не доказывает готовность окружения.
Использование LeechCore
Теперь воспользуемся другим подходом: вместо LocalProcess в качестве точки входа будем использовать LCProcess ([LeechCore](https://github.com/ufrisk/LeechCore) Process). LeechCore — отличная библиотека, разработанная Ulf Frisk.
В LeechCore доступны так называемые acquisition device. Полный список аргументов и параметров можно найти в его Wiki.
using EyeAuras.Memory;
using EyeAuras.Memory.MPFS; //LCProcess is inside MPFS
var processes = LCProcess.WinPMEM().GetProcesses(); //use kernel driver
Log.Info(processes.DumpToNamedTable("Processes"));
Билдеры LeechCore для конкретных устройств
using EyeAuras.Memory;
using EyeAuras.Memory.MPFS;
LCProcess.WinPMEM().GetProcesses(); //use WinPMEM Kernel driver
LCProcess.WinPMEM().WithAdditionalArguments("-printf", "-v").GetProcesses(); //same, but with verbose logging
//using other acquisition devices
LCProcess.FPGA().GetProcesses(); //use FPGA DMA PCI-E
LCProcess.HyperV().GetProcesses(); //read info from the first system Hyper-V VM
//or go full-custom with LeechCore args
LCProcess.Custom("-device", "pmem").GetProcesses(); //allows to supply any custom arguments
Использование DMA-устройств
DMA поддерживается через интеграцию с LeechCore — просто используйте тип LCProcess с .FPGA().
using EyeAuras.Memory;
using EyeAuras.Memory.MPFS;
var processList = LCProcess.FPGA().GetProcesses(); //get list of processes by reading it via DMA device
Log.Info($"Processes: \n\t{processList.DumpToTable()}"); // dump process list to the log
Несмотря на имя URL rpm-read, эта страница перечисляет процессы. Для чтения значения откройте известный PID через using var process = LocalProcess.ByProcessId(pid) и используйте process.Memory.Read<T>(address) с известными типом и абсолютным адресом; здесь нет самостоятельного примера чтения неизвестной памяти.
Дальше
Контекст скрипта · Процессы и память · Примитивы памяти
Контракты сверены со срезом EyeAuras 20fd3d4 и PoeEye 0e02c98. Полные сигнатуры смотрите в SDK/XML своей версии; наличие символа не подтверждает доступность внешнего пакета или нативного компонента. Пример здесь не проверялся компиляцией или запуском.