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

Следующие варианты сохранены как примеры интеграции с
LCProcess. Нужны отдельно установленная совместимая MPFS/LeechCore-сборка, её нативные библиотеки и настроенное устройство/драйвер. Реализация этого backend не подтверждена в рассматриваемом срезе исходников; одна замена класса не доказывает готовность окружения.
Использование LeechCore PMEM-драйвера
Теперь мы используем другой подход — вместо LocalProcess как точки входа, мы вызовем LCProcess (LeechCore). LeechCore — это отличная библиотека, разработанная Ulf Frisk.
Внутри у неё реализованы различные методы чтения памяти целевой (не только локальной) системы, включая, конечно, информацию о процессах.
Для конечного пользователя переключение между методами чтения памяти сводится к замене одного класса, добавлению пространства имён и указанию аргументов запуска.
В этом примере мы передадим библиотеке командную строку -device pmem, что заставит её загрузить и использовать драйвер WinPMEM.
using EyeAuras.Memory;
using EyeAuras.Memory.MPFS; // обратите внимание на новое пространство имён — LCProcess находится здесь
var processes = LCProcess.GetProcesses("-device", "pmem");
Log.Info(processes.DumpToNamedTable("Processes"));
Источник списка и набор видимых процессов зависят от устройства и прав доступа; совпадение с локальным списком не гарантируется.
Использование LeechCore Hyper-V
Сделаем кое-что интересное — попробуем получить список процессов, запущенных ВНУТРИ виртуальной машины Hyper-V (гостевой системы) из хостовой.
Для простоты я выберу ID первой попавшейся виртуалки (id=0), в вашем случае может понадобиться другой ID.
using EyeAuras.Memory;
using EyeAuras.Memory.MPFS;
var processes = LCProcess.GetProcesses("-device", "hvmm://id=0");
Log.Info(processes.DumpToNamedTable("Processes"));

Настройка Hyper-V машины
Здесь приведу только самый важный момент — не забудьте отключить Dynamic Memory в настройках виртуальной машины.

Получение списка виртуальных машин Hyper-V
На данный момент это требует запуска MemProcFS (основанного на LeechCore) отдельно.
MemProcFS.exe -device hvmm://listvm
Вот как может выглядеть вывод в случае простой конфигурации с одной виртуальной машиной:
Microsoft Hyper-V Virtual Machine plugin 1.2.20240329(beta) for MemProcFS (by Ulf Frisk).
plugin parameters:
hvmm://id=<vm id number>
hvmm://id=<vm id number>,unix
hvmm://listvm
hvmm://enumguestosbuild
hvmm://loglevel=<log level number>
Example: MemProcFS.exe -device hvmm://listvm
Virtual Machines:
--> [id = 0] ShadowForge (PartitionId = 0x2, Full VM)
You selected the following virtual machine: ShadowForge
Дальше
Контекст скрипта · Процессы и память · Примитивы памяти
Контракты сверены со срезом EyeAuras 20fd3d4 и PoeEye 0e02c98. Полные сигнатуры смотрите в SDK/XML своей версии; наличие символа не подтверждает доступность внешнего пакета или нативного компонента. Пример здесь не проверялся компиляцией или запуском.