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

Теперь мы используем другой подход — вместо 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"));
Результат можно опустить — он должен быть точно таким же, как и ранее.
Сделаем кое-что интересное — попробуем получить список процессов, запущенных ВНУТРИ виртуальной машины 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"));

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

На данный момент это требует запуска 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