Запуск процессов с помощью системной программы ExecutionManager
Компонент ExecutionManager предоставляет интерфейс на языке C++ для создания, запуска и остановки процессов в решениях, построенных на базе KasperskyOS.
Интерфейс компонента ExecutionManager не подходит для использования в коде, написанном на языке C. Для управления процессами на языке C используйте интерфейс task.h библиотеки libkos.
API компонента ExecutionManager представляет собой надстройку над IPC, которая позволяет упростить процесс разработки программ. ExecutionManager является отдельной системной программой, доступ к которой осуществляется через IPC, но при этом разработчикам предоставляется клиентская библиотека, которая скрывает необходимость использования IPC-вызовов напрямую.
Программный интерфейс компонента ExecutionManager описан в статье "Компонент ExecutionManager".
Сценарий использования компонента ExecutionManager
Здесь и далее клиентом называется приложение, использующее API компонента ExecutionManager для управления другими приложениями.
Типовой сценарий использования компонента ExecutionManager включает следующие шаги:
- Добавление программы ExecutionManager в решение. Чтобы добавить ExecutionManager в решение, необходимо:
- Добавить следующие команды в корневой файл CMakeLists.txt:
find_package (execution_manager REQUIRED) include_directories (${execution_manager_INCLUDE}) add_subdirectory (execution_manager)Для работы программы ExecutionManager необходима программа
BlobContainer
. Эта программа автоматически добавляется в решение при добавлении ExecutionManager.- Компонент ExecutionManager поставляется в составе SDK в виде набора статических библиотек и заголовочных файлов и собирается под конкретное решение с помощью CMake-команды
create_execution_manager_entity()
из CMake-библиотекиexecution_manager
.Чтобы собрать программу ExecutionManager, необходимо в корневой директории проекта создать директорию с именем
execution_manager
, а в ней создать файлCMakeLists.txt
, в котором содержится командаcreate_execution_manager_entity()
.CMake-команда
create_execution_manager_entity()
принимает следующие параметры:Обязательный параметр
ENTITY
, в котором указывается имя исполняемого файла для программы ExecutionManager.Опциональные параметры:
DEPENDS
- дополнительные зависимости для сборки программы ExecutionManager.MAIN_CONN_NAME
- имя IPC-канала для соединения с процессом ExecutionManager. Должно совпадать со значением переменнойmainConnection
при обращении к API ExecutionManager в коде клиента.ROOT_PATH
- путь к корневой директории для служебных файлов программы ExecutionManager, по умолчанию"/ROOT"
.VFS_CLIENT_LIB
- имя клиентской транспортной библиотеки для подключения программы ExecutionManager к программеVFS
.
include (execution_manager/create_execution_manager_entity) create_execution_manager_entity( ENTITY ExecMgrEntity MAIN_CONN_NAME ${ENTITY_NAME} ROOT_PATH "/root" VFS_CLIENT_LIB ${vfs_CLIENT_LIB})- При сборке решения (файл CMakeLists.txt для программы Einit) добавить следующие исполняемые файлы в образ решения:
- исполняемый файл программы ExecutionManager;
- исполняемый файл программы
BlobContainer
.
- Компоновка исполняемого файла клиента с клиентской прокси-библиотекой ExecutionManager, для чего необходимо в файле
CMakeLists.txt
для сборки клиента добавить следующую команду:target_link_libraries (<имя CMake-цели для сборки клиента> ${execution_manager_EXECMGR_PROXY}) - Добавление разрешений для необходимых событий в описание политики безопасности решения:
- Чтобы программа ExecutionManager могла запускать другие процессы, политика безопасности решения должна разрешать следующие взаимодействия для класса процессов
execution_manager.ExecMgrEntity
:- События безопасности вида
execute
для всех классов запускаемых процессов. - Доступ ко всем службам программы
VFS
. - Доступ ко всем службам программы
BlobContainer
. - Доступ к службам ядра
Sync
,Task
,VMM
,Thread
,HAL
,Handle
,FS
,Notice
,CM
иProfiler
(их описания находятся в директорииsysroot-*-kos/include/kl/core
из состава SDK).
- События безопасности вида
- Чтобы клиент мог обращаться к программе ExecutionManager, политика безопасности решения должна разрешать следующие взаимодействия для класса клиентского процесса:
- Доступ к соответствующим службам программы ExecutionManager (их описания находятся в директории
sysroot-*-kos/include/kl/execution_manager
из состава SDK).
- Доступ к соответствующим службам программы ExecutionManager (их описания находятся в директории
- Чтобы программа ExecutionManager могла запускать другие процессы, политика безопасности решения должна разрешать следующие взаимодействия для класса процессов
- Использование API программы ExecutionManager в коде клиента.
Для этого необходимо использовать заголовочный файл
component/package_manager/kos_ipc/package_manager_proxy.h
. Подробнее см. "Компонент ExecutionManager".