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
Функция  | 
Сведения о функции  | 
|---|---|
  | 
Назначение Устанавливает KPA-пакет. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Удаляет KPA-пакет. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Получает уникальные идентификаторы установленных KPA-пакетов. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Получает указатель на экземпляр интерфейса  Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Получает хеш-сумму файла компонента KPA-пакета из базы данных компонента PackageManager. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Получает содержимое компонента KPA-пакета. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Создает очередь уведомлений о статусах KPA-пакетов. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Удаляет очередь уведомлений о статусах KPA-пакетов. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Получает из очереди уведомлений статусы KPA-пакетов. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
Пример использования:
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;
// ...
}
В начало