Интерфейс IPackageController

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

API позволяет:

Сведения о функциях 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;

// ...

}

В начало