Компонент ExecutionManager

12 января 2026

ID execmgr_component

Компонент ExecutionManager предоставляет интерфейсы для управления жизненным циклом процессов через IPC-механизмы и позволяет:

  • запускать процесс;
  • получать сведения о процессе;
  • останавливать процесс;
  • завершать работу системы.

Сценарий использования компонента ExecutionManager и его описание представлены в статье "Запуск процессов с помощью системной программы ExecutionManager".

API компонента ExecutionManager определен в заголовочных файлах, расположенных в директории sysroot-*-kos/include/component/execution_manager/ из состава KasperskyOS Community Edition.

Интерфейс execution_manager_proxy.h

API определен в заголовочном файле sysroot-*-kos/include/component/execution_manager/kos_ipc/execution_manager_proxy.h из состава KasperskyOS Community Edition.

Интерфейс содержит функции для получения указателя на экземпляр интерфейса IExecutionManager, необходимого для работы с компонентом ExecutionManager.

Сведения о функциях API приведены в таблице ниже.

API предоставляет два способа получения указателя на интерфейс IExecutionManager через подключение к процессу ExecutionManager с использованием статических методов объекта ExecutionManagerConnector:

  • Статическое создание IPC-канала в функции StaticConnect().
  • Динамическое создание IPC-канала в функции DcmConnect(). Этот способ использует системную программу DCM.

Через входной параметр cfg функция CreateExecutionManager() принимает параметры конфигурации в виде структуры ExecutionManagerConfig. Все поля этой структуры опциональны для заполнения.

struct ExecutionManagerConfig

{

// Имя IPC-канала для соединения с процессом ExecutionManager

char const* const mainConnection = KOS_EXECMGR_CONN_MAIN;

// Имя службы, реализующей интерфейс IApplicationController

char const* const appControlInterface = KOS_EXECMGR_IFACE_AC;

// Имя службы, реализующей интерфейс IStateProvider

char const* const appStateInterface = KOS_EXECMGR_IFACE_AS;

// Имя службы, реализующей интерфейс ISystemController

char const* const systemControlInterface = KOS_EXECMGR_IFACE_SC;

// Имя службы, реализующей интерфейс IProcessControl

char const* const processControlInterface = KOS_EXECMGR_IFACE_PC;

// Имя класса процесса ExecutionManager

char const* const execmgrServerName = KOS_EXECMGR_SERVER_NAME;

};

Функции execution_manager_proxy.h

Пример использования:

client.cpp

#include <component/execution_manager/kos_ipc/execution_manager_proxy.h>

int main(int argc, const char *argv[])

{

// ...

execmgr::IExecutionManagerPtr ptr = execution_manager::ipc::ExecutionManagerConnector::DcmConnect();

// ...

}

Интерфейс IExecutionManager

API определен в заголовочном файле sysroot-*-kos/include/component/execution_manager/i_execution_manager.h из состава KasperskyOS Community Edition.

Интерфейс IExecutionManager позволяет получить доступ к указателям на следующие интерфейсы:

  • IProcessControl – интерфейс, который позволяет запускать процесс из исполняемого файла, установленного компонентом PackageManager из KPA-пакета в решение на базе KasperskyOS, а также получать сведения о процессе (включая информацию о его завершении) и останавливать его.
  • IApplicationController – интерфейс, который позволяет запускать процесс из любого исполняемого файла, чье расположение в файловой системе известно, а также останавливать этот процесс.
  • IStateProvider – интерфейс для получения сведений о процессе, запущенном с использованием интерфейса IApplicationController.
  • ISystemController – интерфейс для получения сведений о процессах, запущенных с использованием компонента ExecutionManager, а также для завершения работы системы.

Пример использования:

client.cpp

int main(int argc, const char *argv[])

{

// ...

alm::execution_manager::IProcessControlPtr pc;

res = emPtr->GetProcessController(pc);

if (res != kos::Ok)

{

std::cerr << fmt::format("[{}] Failed to create process controller. res=0x{:x}\n", selfName, res);

return EXIT_FAILURE;

}

execmgr::IApplicationControllerPtr ac;

if (ptr->GetApplicationController(ac) != kos::Ok)

{

std::cerr << "Can not get application controller" << std::endl;

return EXIT_FAILURE;

}

execmgr::ISystemControllerPtr sc;

if (ptr->GetSystemController(sc) != kos::Ok)

{

std::cerr << "Cannot get system controller" << std::endl;

return EXIT_FAILURE;

}

// ...

}

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!