В KasperskyOS все взаимодействия между сущностями статически типизированы. Допустимые структуры IPC-сообщения определяются idl-описанием интерфейсов сущности-получателя сообщения (сервера).
Корректное IPC-сообщение (как запрос, так и ответ) содержит фиксированную часть и арену.
Фиксированная часть сообщения
Фиксированная часть сообщения содержит аргументы фиксированного размера, а также RIID и MID.
Аргументы фиксированного размера – это аргументы любых idl-типов, кроме типа sequence.
RIID и MID идентифицируют вызываемый интерфейс и метод:
Тип фиксированной части сообщения генерируется компилятором NK на основе idl-описания интерфейса. Для каждого метода интерфейса генерируется отдельная структура. Также генерируются типы union для хранения любого запроса к серверу, компоненту или интерфейсу.
Например, для метода Ping интерфейса IPing (компонент ping сущности server в примере echo) компилятор NK создаст тип фиксированной части запроса IPing_Ping_req и фиксированной части ответа IPing_Ping_res. Также будут сгенерированы следующие типы union:
IPing_req и IPing_res – фиксированные части запроса и ответа для любого метода интерфейса IPing;ping_component_req и ping_component_res – фиксированные части запроса и ответа для любого метода компонента ping;server_entity_req и server_entity_res – фиксированные части запроса и ответа для любого метода сущности server.Арена
Арена представляет собой буфер для хранения аргументов переменного размера (idl‑тип sequence).
Проверка сообщения в Kaspersky Security System
Проверку структуры отправляемого сообщения на корректность выполняет подсистема Kaspersky Security System. Проверяются как запросы, так и ответы. Если сообщение имеет некорректную структуру, оно будет отклонено без вызова связанных с ним политик безопасности.
Формирование структуры сообщения
В составе KasperskyOS Starter Kit поставляются следующие инструменты, позволяющие упростить для разработчика создание и упаковку IPC-сообщения:
transport-kos для работы с транспортом NkKosTransport.Формирование простейшего IPC-сообщения показано в примере echo.