API определены в следующих заголовочных файлах из состава KasperskyOS SDK:
sysroot-*-kos/include/coresrv/cm/cm_api.h;sysroot-*-kos/include/coresrv/ns/ns_api.h.API позволяют динамически создавать IPC-каналы.
Сведения о функциях API приведены в таблицах ниже.
Использование API
Чтобы серверы могли сообщать клиентам о предоставляемых службах, нужно включить в решение сервер имен, то есть системную программу NameServer (исполняемый файл sysroot-*-kos/bin/ns из состава KasperskyOS SDK). IPC-каналы от клиентов и серверов к серверу имен можно создать статически (эти IPC-каналы должны иметь имя kl.core.NameServer). Если этого не сделать, то при вызове клиентами и серверами функции NsCreate() будут выполнены попытки динамического создания этих IPC-каналов. Сервер имен не требуется включать в решение, если у клиентов изначально есть сведения об именах серверов и предоставляемых этими серверами служб.
Имена служб и интерфейсов нужно задавать в соответствии с формальными спецификациями компонентов решения. (О квалифицированном имени службы см. "Привязка методов моделей безопасности к событиям безопасности".) Вместо квалифицированного имени службы можно использовать какое-либо условное название этой службы. Имена клиентов и серверов задаются в init-описании. Также имя процесса можно получить вызовом функции KnTaskGetName() из API task_api.h.
Динамическое создание IPC-канала на стороне сервера включает следующие шаги:
NsCreate().NsPublishService().Чтобы отменить публикацию службы, нужно вызвать функцию NsUnPublishService().
KnCmListen().Функция KnCmListen() позволяет получить первый запрос в очереди, но при этом не удаляет этот запрос, а помещает в конец очереди. Если в очереди всего один запрос, то вызов функции KnCmListen() несколько раз подряд дает один и тот же результат. Запрос удаляется из очереди при вызове функции KnCmAccept() или KnCmDrop().
KnCmAccept().Чтобы отклонить запрос клиента, нужно вызвать функцию KnCmDrop().
Слушающий дескриптор создается при вызове функции KnCmAccept() со значением INVALID_HANDLE в параметре listener. Если указать слушающий дескриптор, то созданный серверный IPC-дескриптор обеспечит возможность получать IPC-запросы по всем IPC-каналам, ассоциированным с этим слушающим дескриптором. (Первый IPC-канал, ассоциированный со слушающим дескриптором, создается при вызове функции KnCmAccept() со значением INVALID_HANDLE в параметре listener. Второй и последующие IPC-каналы, ассоциированные со слушающим дескриптором, создаются при втором и последующих вызовах функции KnCmAccept() с указанием дескриптора, полученного при первом вызове.) В параметре listener функции KnCmAccept() можно указать слушающий дескриптор, полученный с использованием функций KnHandleConnect(), KnHandleConnectEx() и KnHandleCreateListener() из API handle_api.h, а также функции ServiceLocatorRegister(), объявленной в заголовочном файле sysroot-*-kos/include/coresrv/sl/sl_api.h из состава KasperskyOS SDK. В параметре rsid функции KnCmAccept() нужно указать идентификатор службы (RIID), который является константой в автоматически генерируемом транспортном коде (например, FsDriver_operationsComp_fileOperations_iid).
Динамическое создание IPC-канала на стороне клиента включает следующие шаги:
NsCreate().NsEnumServices().Чтобы получить полный список служб с заданным интерфейсом, нужно вызвать функцию несколько раз, инкрементируя индекс, пока не будет получена ошибка rcResourceNotFound.
KnCmConnect().К серверу имен можно подключить несколько клиентов и серверов. Каждый клиент и сервер может создать несколько подключений к серверу имен. Сервер может отменить публикацию службы, выполненную другим сервером.
Чтобы удалить подключение к серверу имен, нужно вызвать функцию NsDestroy().
Удаление динамически созданных IPC-каналов
Динамически созданный IPC-канал будет удален при закрытии его клиентского и серверного IPC-дескрипторов.
Сведения о функциях API
Функции ns_api.h
Функция  | 
Сведения о функции  | 
|---|---|
  | 
Назначение Создает подключение к серверу имен. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Удаляет подключение к серверу имен. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Публикует службу на сервере имен. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Отменяет публикацию службы на сервере имен. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Перечисляет службы, опубликованные на сервере имен. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
Функции cm_api.h
Функция  | 
Сведения о функции  | 
|---|---|
  | 
Назначение Выполняет запрос на создание IPC-канала с сервером для использования заданной службы. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Позволяет получить запрос клиента на создание IPC-канала для использования службы. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Отклоняет запрос клиента на создание IPC-канала для использования заданной службы. Параметры 
 Возвращаемые значения В случае успеха возвращает   | 
  | 
Назначение Принимает запрос клиента на создание IPC-канала для использования заданной службы. Параметры 
 Возвращаемые значения В случае успеха возвращает   |