Компонент ExecutionManager

27 января 2025

ID execmgr_component

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

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

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

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

Интерфейс содержит функцию CreateExecutionManager() для получения указателя на экземпляр интерфейса IExecutionManager, необходимого для работы с компонентом ExecutionManager. Через входной параметр cfg эта функция принимает параметры конфигурации в виде структуры 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[])

{

// ...

execution_manager::ipc::ExecutionManagerConfig emCfg

{

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

// Должно совпадать со значением MAIN_CONN_NAME в файле

// CMakeLists.txt для сборки компонента ExecutionManager.

.mainConnection = "ExecMgrEntity",

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

.execmgrServerName = "kl.ExecMgrEntity"

};

execution_manager::IExecutionManagerPtr emPtr;

kos::Result res = CreateExecutionManager(emCfg, emPtr);

if (res != kos::Ok)

{

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

return EXIT_FAILURE;

}

// ...

}

Интерфейс IExecutionManager

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

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

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

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

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;

}

// ...

}

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