Интерфейс IPackageController

12 января 2026

ID pm_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

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

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;

// ...

}

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!