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()
. Через выходной параметр pkgEvent
s функция возвращает статус 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;
// ...
}
В начало