Интерфейс ISystemController

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

API позволяет получать сведения о процессах, запущенных с использованием компонента ExecutionManager, а также завершать работу системы.

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

Получение сведений о процессах

Чтобы запросить сведения о процессах, нужно вызвать функцию GetSystemInfo(). Через выходной параметр ProcessInfos функция возвращает сведения о процессах в виде вектора структур ProcessInfo.

struct ProcessInfo

{

// Имя процесса.

std::string name;

// Имя класса процесса.

std::string eiid;

// Состояние процесса.

ProcessState state;

};

Перечисление state является компонентом структуры ProcessInfo и описывает состояние процесса.

enum class ProcessState : uint32_t

{

// Служебная константа.

None = 0,

// Процесс создан.

Created,

// Процесс инициализирован.

Prepared,

// Процесс запущен.

Running,

// Процесс аварийно остановлен.

Failed,

// Процесс остановлен, но данные о процессе доступны

// для функции GetProcessState() интерфейса IProcessControl.

Finished,

// Процесс завершен и не существует в системе.

NotExisting,

};

Завершение работы системы

Чтобы завершить работу системы, нужно вызвать функцию StopAllEntities(). Эта функция не имеет параметров.

Функции i_system_control.h

Функция

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

StopAllEntities()

Назначение

Останавливает все запущенные процессы, затем завершает процесс ExecutionManager и отправляет в ядро запрос на выключение устройства.

Параметры

Нет.

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

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

GetSystemInfo()

Назначение

Получает сведения о процессах, запущенных с использованием компонента ExecutionManager.

Параметры

  • [out] ProcessInfos – вектор структур ProcessInfo, содержащих сведения о процессах.

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

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

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

client.cpp

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

{

// ...

alm::execution_manager::ProcessInfos infos{};

res = sysCtl->GetSystemInfo(infos);

if (res != kos::Ok)

{

std::cerr << fmt::format("[{}] Failed to get system info. res=0x{:x}\n", selfName, res);

return EXIT_FAILURE;

}

if (sc->StopAllEntities() != kos::Ok)

{

std::cerr << "Cannot stop all processes\n";

return EXIT_FAILURE;

}

// ...

}

В начало