Интерфейс IApplicationController

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

API позволяет запускать процесс из исполняемого файла, а также останавливать процесс.

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

Чтобы запустить процесс, нужно вызвать функцию StartEntity(). Через входной параметр info эта функция принимает параметры для запуска процесса в виде структуры StartEntityInfo. Все поля этой структуры являются опциональными для инициализации. Через выходной параметр resInfo эта функция возвращает ссылку на структуру StartEntityResultInfo с результатами запуска процесса.

Чтобы остановить процесс, нужно вызвать функцию ShutdownEntity() или StopEntity(). Через входной параметр entId эти функции принимают дескриптор, идентифицирующий запущенный процесс.

struct IApplicationController

{

struct StartEntityInfo

{

// Имя процесса. Если не указано, то будет использовано имя класса процесса.

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

std::string entityName;

// Класс процесса. Если не указан, то будет использовано имя процесса.

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

std::string eiid;

// Аргументы командной строки.

std::vector<std::string> args;

// Переменные окружения.

std::vector<std::string> envs;

// Политика перезапуска процесса при его аварийном завершении. Возможные значения:

// EntityRestartPolicy::DoNotRestart - не перезапускать.

// EntityRestartPolicy::AlwaysRestart - всегда перезапускать.

EntityRestartPolicy restartPolicy { EntityRestartPolicy::DoNotRestart };

};

struct StartEntityResultInfo

{

// Класс безопасности, присвоенный процессу.

std::string eiid;

// Дескриптор, идентифицирующий запущенный процесс.

EntityId entId;

// Идентификатор безопасности запущенного процесса.

Uid sid;

// Имя запущенного процесса.

std::string taskName;

};

};

Функции i_application_control.h

Функция

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

StartEntity()

Назначение

Запускает процесс.

Параметры

  • [in] runPath – путь к исполняемому файлу, который нужно запустить.
  • [in] info – структура с параметрами запуска процесса StartEntityInfo.
  • [out] resInfo – структура с результатами запуска процесса StartEntityResultInfo.
  • [out] containerPath – путь к изолированному хранилищу данных процесса.

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

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

ShutdownEntity()

Назначение

Отправляет процессу сигнал на завершение.

Параметры

  • [in] entId – дескриптор, идентифицирующий запущенный процесс.

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

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

StopEntity()

Назначение

Немедленно останавливает исполнение процесса.

Параметры

  • [in] entId – дескриптор, идентифицирующее запущенный процесс.

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

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

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

client.cpp

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

{

// ...

const fs::path appPath{"/application"};

execmgr::IApplicationController::StartEntityResultInfo result;

execmgr::IApplicationController::StartEntityInfo info;

info.entityName = std::string{"application.Application"};

info.eiid = std::string{"application.Application"};

info.args = std::vector<std::string>{"1", "ARG1", "ARG2" , "ARG3"};

info.envs = std::vector<std::string>{"ENV1=10", "ENV2=envStr"};

std::cout << "Starting application from elf\n";

if (ac->StartEntity(appPath, info, result) != kos::Ok)

{

std::cerr << "Can not start application from " << appPath << std::endl;

return EXIT_FAILURE;

}

std::cout << "Application started with process sid " << result.sid << "\n";

auto AppId = result.entId;

if (ac->StopEntity(AppId) != kos::Ok)

{

std::cerr << "Cannot stop process " << appPath << std::endl;

return EXIT_FAILURE;

}

// ...

}

В начало