Компонент 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:
StaticConnect().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;
}
// ...
}
В начало