Компонент ExecutionManager

Компонент 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:

Через входной параметр 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

Функция

Сведения о функции

StaticConnect()

Назначение

Получение указателя на экземпляр интерфейса IExecutionManager с использованием статического IPC-канала для соединения с процессом ExecutionManager.

Параметры

  • [in] connName – имя IPC-канала.

Возвращаемые значения

Указатель на экземпляр интерфейса IExecutionManager.

DcmConnect()

Назначение

Получение указателя на экземпляр интерфейса IExecutionManager с использованием системной программы DCM для соединения с процессом ExecutionManager.

Параметры

  • [in] timeout – время ожидания создания подключения к серверу имен в миллисекундах. Значение по умолчанию: 30 сек.

Возвращаемые значения

Указатель на экземпляр интерфейса IExecutionManager.

CreateExecutionManager()

Назначение

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

Устаревшая функция, рекомендуется использовать другие функции из этой таблицы.

Параметры

  • [in] cfg – структура ExecutionManagerConfig с параметрами конфигурации для соединения с процессом ExecutionManager.
  • [out] emp – указатель на экземпляр интерфейса IExecutionManager.

Возвращаемые значения

В случае успеха возвращает kos::rtl::Ok, иначе возвращает код ошибки.

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

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 позволяет получить доступ к указателям на следующие интерфейсы:

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

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;

}

// ...

}

В начало