IDataSource — основа версии 0.3
Реализованы B1/B2: внутренний интерфейс источника данных и встроенный
LocalDataSource. SDK 0.3 сохраняет совместимость с 0.1/0.2.
Отдельный внешний scalar telemetry IPC описан в EXTERNAL_SOURCE_RU.md.
Поток вызовов
AngelScript → проверки разрешений Runtime → IDataSource → LocalDataSource
→ существующие Windows ProcessReader / ProcessTools.
Все обращения Runtime к процессу проходят через IDataSource. Скрипт не получает
дескрипторы Windows и не выбирает реализацию источника.
Контракт и срок жизни
- Один источник принадлежит одному worker-сеансу и фиксированному выбранному PID.
- LocalDataSource владеет отдельно выданными дескрипторами чтения и записи.
При уничтожении источника оба закрываются; запись без второго дескриптора запрещена.
- Разрешения manifest и явное согласие пользователя проверяются перед dispatch.
IDataSource не является новым разрешением и не расширяет права Windows.
- Автоматического переключения источника или повторного открытия другого PID нет.
- reset_budget сбрасывает существующие квоты чтения и toolkit на границе callback.
Внутренние операции
read(address, output, size), write(pid, address, bytes, size), get_regions(pid),
get_modules(pid, source), get_threads(pid), get_handles(pid).
Для модулей сохраняются источники system / peb и diff_modules.
Также через интерфейс проходят module_base, orphan_threads, patterns, rip и profile.
Сканирование и построение профилей пока выполняются внутри локальной реализации:
это сохраняет поведение 0.2, но ещё не делает эти алгоритмы независимыми от backend.
Ошибки и ограничения
Сохранены отдельные каналы read_error и toolkit_error и прежний process::last_error.
Неудачное корректно ограниченное чтение обнуляет выходной буфер.
Запись не транзакционная: частичная запись не откатывается автоматически.
Protected write сохраняет ограничения одной страницы и восстановление защиты.
Все лимиты размеров, времени и числа операций из PROCESS_API_RU.md действуют.
Завершение выбранного процесса возвращает ошибку, а не переключает источник.
Что ещё не реализовано
Произвольный внешний backend Process API не реализован. Новый source API
регистрирует один manifest-declared источник скалярных данных, проверяет PID,
capabilities snapshot/update и явные разрешения. Он не передаёт read(addr),
write(addr), regions/modules/threads/handles. Реализованные элементы GUI
описаны отдельно в GUI_03_RU.md. Этот слой не предоставляет
доступ к защищённым процессам и не содержит обхода античита.
Проверки: tests/datasource.ps1 проверяет полиморфный контракт на собственном
процессе и закрытие дескрипторов; tests/process_tools.ps1 проверяет публичный API
через worker, включая разрешения, запись, сканирование, профили и диагностику.