KasperskyOS Community Edition 1.3

Интерфейс 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; } // ... }