Интерфейс IPackageManifest

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

API позволяет получать значения ключей манифеста KPA-пакета. Подробнее о доступных ключах манифеста KPA-пакета см. "Манифест KPA-пакета"

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

Получение идентификатора программы

Чтобы получить идентификатор программы, установленной из KPA-пакета, нужно вызвать функцию GetPackageID().

Получение сведений о компонентах KPA-пакета

Чтобы получить сведения о компонентах KPA-пакета, нужно вызвать функцию GetApplicationsInfo(). Через выходной параметр applications функция возвращает сведения о компонентах KPA-пакета в виде вектора структур ApplicationInfo.

struct ApplicationInfo

{

// Имя компонента KPA-пакета.

std::string name;

// Путь к директории относительно пути /<имя пакета>/res,

// в которую установлен компонент KPA-пакета.

std::string path;

// Неиспользуемый параметр.

std::string iconPath;

// Неиспользуемый параметр.

std::string containerPath;

// Неиспользуемый параметр.

std::string etcPath;

// Хеш-сумма файла компонента KPA-пакета.

std::string digest;

// Объект формата JSON.

ManifestType extensions;

// Тип компонента KPA-пакета.

std::string type;

};

Элемент структуры extensions описывает объект формата JSON. ManifestType является псевдонимом типа nlohmann:json.

Получение конфигураций запуска программы

Чтобы получить сведения о конфигурациях запуска программы, установленной из KPA-пакета, нужно вызвать функцию GetRunConfigurationsInfo(). Через выходной параметр runConfigurations функция возвращает сведения о конфигурациях запуска программы в виде вектора структур RunConfigurationInfo.

struct RunConfigurationInfo

{

// Уникальный в рамках данного KPA-пакета идентификатор конфигурации запуска.

std::string id;

// Имя конфигурации запуска.

std::string name;

// Класс безопасности программы.

std::string eiid;

// Путь к файлу компонента KPA-пакета.

std::string path;

// Список аргументов в виде массива строк.

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

// Список переменных окружения.

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

// Указывает, является эта конфигурация запуска первичной при старте программы:

// true – является первичной, false – не является.

bool primary{false};

// Указывает, является эта конфигурация запускаемой автоматически:

// true – является запускаемой автоматически, false – не является.

bool autorun{false};

};

Получение сведений о программе

Чтобы получить сведения о программе, установленной из KPA-пакета, нужно вызвать функцию GetPackageInfo(). Через выходной параметр packageInfo функция возвращает сведения о конфигурациях запуска в виде структуры PackageInfo.

struct PackageInfo

{

// Уникальный идентификатор программы.

std::string id;

// Название программы.

std::string name;

// Версия программы.

std::string version;

// Неиспользуемый параметр.

std::string title;

// Неиспользуемый параметр.

std::string summary;

// Описание программы.

std::string description;

// Номер сборки программы.

std::string buildNumber;

// Логическое значение, указывающее на то, является ли программа системной:

// true – является, false – не является.

bool systemApplication;

// Объект произвольного формата.

ManifestType extensions;

};

Получение сведений об изолированном хранилище программы

Чтобы получить сведения об изолированном хранилище программы, нужно вызвать функцию GetPrivateStorageInfo(). Через выходной параметр packageInfo функция возвращает сведения о конфигурациях запуска в виде структуры PrivateStorage.

struct PrivateStorage

{

// Размер хранилища данных программы в МБ.

size_t size;

// Тип файловой системы хранилища данных программы.

std::string fsType;

};

Получение сведений об объектах произвольного формата

Чтобы получить сведения об объектах произвольного формата, которые добавлены разработчиком KPA-пакета (ключ extensions из манифеста KPA-пакета), нужно вызвать функцию Get().

Функции i_package_manifest.h

Функция

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

GetPackageID()

Назначение

Получает уникальный идентификатор программы, установленной из KPA-пакета.

Параметры

  • [out] id – уникальный идентификатор программы.

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

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

GetApplicationsInfo()

Назначение

Получает сведения о компонентах KPA-пакета.

Параметры

  • [out] applications – вектор структур ApplicationInfo, содержащих сведения о компонентах KPA-пакета.

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

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

GetRunConfigurationsInfo()

Назначение

Получает сведения о конфигурациях запуска программы, установленной из KPA-пакета.

Параметры

  • [out] runConfigurations – вектор структур RunConfigurationInfo, содержащих сведения о конфигурациях запуска.

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

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

GetPackageInfo()

Назначение

Получает сведения о программе, установленной из KPA-пакета.

Параметры

  • [out] packageInfo – структура PackageInfo, содержащая сведения о программе.

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

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

GetPrivateStorageInfo()

Назначение

Получает сведения об изолированно хранилище программы.

Параметры

  • [out] packageInfo – структура PrivateStorage, содержащая сведения об изолированном хранилище программы.

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

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

Get()

Назначение

Получает сведения об объектах произвольного формата, который добавлены в манифест разработчиком KPA-пакета.

Параметры

Нет.

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

Возвращает указатель на объект типа pkgmgr::IPackageManifest::ManifestType.

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

client.cpp

#include <component/package_manager/kos_ipc/package_manager_proxy.h>

namespace pkgmgr = package_manager;

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

{

// ...

// Получить указатель на экземпляр интерфейса IPackageManifest

// для KPA-пакета с уникальным идентификатором uid1.

pkgmgr::IPackageManifestPtr manifest;

if (pkgc->GetManifest(uid1, manifest) != kos::rtl::Ok)

return EXIT_FAILURE;

// Получить уникальный идентификатор программы.

std::string packageID;

if (manifest->GetPackageID(packageID) != kos::rtl::Ok)

return EXIT_FAILURE;

std::cout << packageID << '\n';

// Получить сведения о компонентах KPA-пакета.

std::vector<package_manager::IPackageManifest::ApplicationInfo> infos;

manifest->GetApplicationsInfo(infos);

for (auto &info: infos)

{

std::cout << info.name << " " << info.path << "\n";

}

// Получить сведения об объектах произвольного формата.

pkgmgr::IPackageManifest::ManifestType jsonManifest = manifest->Get();

std::cout << jsonManifest["package"]["description"] << '\n';

// Получить сведения о конфигурациях запуска программы, установленной из KPA-пакета.

std::vector<package_manager::IPackageManifest::RunConfigurationInfo> runConfigurationInfos;

manifest->GetRunConfigurationsInfo(runConfigurationInfos);

for (auto &runConfigurationInfo : runConfigurationInfos)

{

std::cout << "RunConfiguration.id = " << runConfigurationInfo.id << ", autorun = " << runConfigurationInfo.autorun << "\n";

}

// ...

}

В начало