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
Функция
Сведения о функции
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>intmain(int argc, constchar *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
intmain(int argc, constchar *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;
}
// ...
}