Динамическое создание IPC-каналов (cm_api.h, ns_api.h)
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()
. - Получить запрос клиента на создание IPC-канала вызовом функции
KnCmListen()
.Функция
KnCmListen()
позволяет получить первый запрос в очереди, но при этом не удаляет этот запрос, а помещает в конец очереди. Если в очереди всего один запрос, то вызов функцииKnCmListen()
несколько раз подряд дает один и тот же результат. Запрос удаляется из очереди при вызове функцииKnCmAccept()
илиKnCmDrop()
. - Принять запрос клиента на создание IPC-канала вызовом функции
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.
Динамическое создание IPC-канала на стороне клиента включает следующие шаги:
- Подключиться к серверу имен вызовом функции
NsCreate()
. - Найти сервер, предоставляющий требуемую службу, используя функцию
NsEnumServices()
.Чтобы получить полный список служб с заданным интерфейсом, нужно вызвать функцию несколько раз, инкрементируя индекс, пока не будет получена ошибка
rcResourceNotFound
. - Выполнить запрос на создание IPC-канала с требуемым сервером вызовом функции
KnCmConnect()
.
К серверу имен можно подключить несколько клиентов и серверов. Каждый клиент и сервер может создать несколько подключений к серверу имен. Сервер может отменить публикацию службы, выполненную другим сервером.
Удаление динамически созданных IPC-каналов
Динамически созданный IPC-канал будет удален при закрытии его клиентского и серверного IPC-дескрипторов.
Сведения о функциях API
Функции ns_api.h
Функция |
Сведения о функции |
---|---|
|
Назначение Создает подключение к серверу имен. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Публикует службу на сервере имен. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Отменяет публикацию службы на сервере имен. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Перечисляет службы, опубликованные на сервере имен. Параметры
Возвращаемые значения В случае успеха возвращает |
Функции cm_api.h
Функция |
Сведения о функции |
---|---|
|
Назначение Выполняет запрос на создание IPC-канала с сервером для использования заданной службы. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Позволяет получить запрос клиента на создание IPC-канала для использования службы. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Отклоняет запрос клиента на создание IPC-канала для использования заданной службы. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Принимает запрос клиента на создание IPC-канала для использования заданной службы. Параметры
Возвращаемые значения В случае успеха возвращает |