KasperskyOS Community Edition 1.3

Интерфейс IPackageController

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

API позволяет:

  • устанавливать KPA-пакет в решение на базе KasperskyOS и удалять KPA-пакет;
  • получать сведения об установленном KPA-пакете: уникальный идентификатор, данные из манифеста KPA-пакета, статус KPA-пакета (установлен или удален).

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

Установка KPA-пакета

Чтобы установить KPA-пакет, нужно вызвать функцию InstallPackage(). Через входной параметр pkgInfo эта функция принимает данные для проверки сертификатов устанавливаемого KPA-пакета в виде структуры InstallPackageInfo. Все поля этой структуры являются опциональными для заполнения.

struct InstallPackageInfo { // Полное имя файла внешней подписи KPA-пакета. std::filesystem::path signaturePath = ""; // Полное имя файла индексного файла KPA-пакета. std::filesystem::path indexPath = ""; // Проверять ли сертификаты устанавливаемого KPA-пакета. bool signatureVerify = false; };

Если параметр signatureVerify установлен в значение true (проверять сертификаты устанавливаемого KPA-пакета), а имена файлов не указаны, то при установке KPA-пакета будут использованы значения по умолчанию: <имя_пакета>.kcat для файла внешней подписи KPA-пакета и <имя_пакета>.kidx для индексного файла KPA-пакета.

Удаление KPA-пакета

Чтобы удалить KPA-пакет, нужно вызвать функцию UninstallPackage().

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

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

Чтобы получить данные о манифесте KPA-пакета, нужно вызвать функцию GetManifest(). Через выходной параметр manifest функция возвращает указатель на экземпляр интерфейса IPackageManifest, используя который можно получить доступ к значениям ключей манифеста KPA-пакета. Подробнее см. "Интерфейс IPackageManifest".

Уведомления о статусах KPA-пакетов в решении на базе KasperskyOS

Компонент PackageManager реализует механизм уведомлений о статусах KPA-пакетов в решении на базе KasperskyOS, позволяя отслеживать изменения в их состоянии. Для получения уведомлений нужно создать очередь уведомлений используя функцию CreateEventQueue().

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

struct PackageEvent { enum class Type { // KPA-пакет установлен. INSTALL, // KPA-пакет удален. UNINSTALL, // Очередь уведомлений переполнена. OVERFLOWED, }; // Статус KPA-пакета. Type type; // Уникальный идентификатор KPA-пакета. std::string uid; };

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

Функции i_package_control.h

Функция

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

InstallPackage()

Назначение

Устанавливает KPA-пакет.

Параметры

  • [in] pkgName – имя KPA-пакета, который требуется установить.
  • [out] pkgUID – уникальный идентификатор установленного KPA-пакета.
  • [in] pkgInfo – структура InstallPackageInfo, которая содержит данные для проверки сертификатов устанавливаемого KPA-пакета.

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

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

UninstallPackage()

Назначение

Удаляет KPA-пакет.

Параметры

  • [in] pkgUID – уникальный идентификатор KPA-пакета, который требуется удалить.

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

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

ListInstalledPackages()

Назначение

Получает уникальные идентификаторы установленных KPA-пакетов.

Параметры

  • [out] pkgUIDs – массив уникальных идентификаторов установленных KPA-пакетов.

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

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

GetManifest()

Назначение

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

Параметры

  • [in] pkgUID – уникальный идентификатор KPA-пакета, о манифесте которого требуется получить данные.
  • [out] manifest – указатель на экземпляр интерфейса IPackageManifest.

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

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

GetItemDigest()

Назначение

Получает хеш-сумму файла компонента KPA-пакета из базы данных компонента PackageManager.

Параметры

  • [in] itemPath – полное имя файла компонента KPA-пакета, хеш-сумму которого требуется получить.
  • [out] digest – хеш-сумма файла компонента KPA-пакета.

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

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

GetArtifactBlob()

Назначение

Получает содержимое компонента KPA-пакета.

Параметры

  • [in] pkgUID – уникальный идентификатор KPA-пакета, частью которого является запрашиваемый компонент.
  • [in] artifactType – тип компонента KPA-пакета. Подробнее см. "Список объектов components"
  • [in] artifactName – имя компонента KPA-пакета.
  • [out] blob – массив байтов, представляющий содержимое компонента KPA-пакета.

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

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

CreateEventQueue()

Назначение

Создает очередь уведомлений о статусах KPA-пакетов.

Параметры

  • [out] queueHandle – ссылка на дескриптор очереди уведомлений.

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

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

DestroyEventQueue()

Назначение

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

Параметры

  • [in] queueHandle – дескриптор очереди уведомлений.

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

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

GetEvents()

Назначение

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

Параметры

  • [in] queueHandle – дескриптор очереди уведомлений.
  • [out] pkgEvents – структура PackageEvent со статусами KPA-пакетов.

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

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

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

client.cpp

#include <component/package_manager/kos_ipc/package_manager_proxy.h> namespace pkgmgr = package_manager; int main(int argc, const char *argv[]) { // ... // Создать очередь уведомлений о статусах KPA-пакетов. Handle eventQueue; if (pkgc->CreateEventQueue(eventQueue) != kos::rtl::Ok) return EXIT_FAILURE; // Установить KPA-пакет с именем test1. std::string uid1; const std::string pkgName1{"test1"}; const package_manager::InstallPackageInfo pkgInfo1{"", "", true}; if (pkgc->InstallPackage(pkgName1, uid1, pkgInfo1) != kos::rtl::Ok) return EXIT_FAILURE; // Установить KPA-пакет с именем test2. std::string uid2; const std::string pkgName2{"test2"}; const package_manager::InstallPackageInfo pkgInfo2{"/test2.kcat", "/test2.kidx", true}; if (pkgc->InstallPackage(pkgName2, uid2, pkgInfo2) != kos::rtl::Ok) return EXIT_FAILURE; // Получить указатель на экземпляр интерфейса IPackageManifest // для KPA-пакета с именем test1. pkgmgr::IPackageManifestPtr manifest; if (pkgc->GetManifest(uid1, manifest) != kos::rtl::Ok) return EXIT_FAILURE; // Получить уникальные идентификаторы установленных KPA-пакетов. std::vector<std::string> pkgUIDs; if (pkgc->ListInstalledPackages(pkgUIDs) != kos::rtl::Ok) return EXIT_FAILURE; // Удалить KPA-пакет с именем test1. if (pkgc->UninstallPackage(uid1) != kos::rtl::Ok) return EXIT_FAILURE; // Удалить KPA-пакет с именем test2. if (pkgc->UninstallPackage(uid2) != kos::rtl::Ok) return EXIT_FAILURE; // Получить из очереди уведомлений статусы KPA-пакетов. std::vector<package_manager::PackageEvent> pkgEvents; if (pkgc->GetEvents(eventQueue, pkgEvents) != kos::rtl::Ok) return EXIT_FAILURE; // Удалить очередь уведомлений. if (pkgc->DestroyEventQueue(eventQueue) != kos::rtl::Ok) return EXIT_FAILURE; if (KnHandleClose(eventQueue) != rcOk) return EXIT_FAILURE; // ... }