IDL-описание
IDL-описания помещаются в отдельные файлы *.idl
и содержат декларации на языке IDL (Interface Definition Language):
- Имя пакета. Используется декларация:package <имя пакета>
- [Опционально] Пакеты, из которых импортируются типы данных для параметров интерфейсных методов. Используется декларация:import <имя пакета>
- [Опционально] Определения типов данных для параметров интерфейсных методов.
- [Опционально] Сигнатуры интерфейсных методов. Используется декларация:interface { <имя интерфейсного метода([параметры])>; [...] }
Каждая сигнатура метода указывается отдельной строкой. Имя метода не может содержать символов подчеркивания
_
. Каждый метод в списке имеет уникальное имя. Параметры методов разделяются на входные (in
), выходные (out
) и параметры для передачи сведений об ошибках (error
). Порядок описания параметров важен: сначала указываются входные, затем выходные и, далее, error-параметры. Методы интерфейса безопасности не могут иметь выходные и error-параметры.Входные и выходные параметры передаются в IPC-запросах и IPC-ответах соответственно. Error-параметры передаются в IPC-ответах, если сервер не может корректно обработать соответствующие IPC-запросы.
Сервер может информировать клиента об ошибках обработки IPC-запросов как через error-параметры, так и через выходные параметры интерфейсных методов. Если при возникновении ошибки сервер устанавливает флаг ошибки в IPC-ответе, то этот IPC-ответ содержит error-параметры и не содержит выходных параметров. В противном случае этот IPC-ответ содержит выходные параметры так же, как и при корректной обработке запросов. (Для установки флага ошибки в IPC-ответах используется макрос
nk_err_reset()
, определенный в заголовочном файлеnk/types.h
из состава KasperskyOS SDK.)Отправка IPC-ответа с установленным флагом ошибки и отправка IPC-ответа со снятым флагом ошибки являются разными видами событий для модуля безопасности Kaspersky Security Module. При описании политики безопасности решения это позволяет удобно разделять обработку событий, которые связаны с корректным и некорректным выполнением IPC-запросов. Если сервер не устанавливает флаг ошибки в IPC-ответах, то для обработки событий, связанных с некорректным выполнением IPC-запросов, модулю безопасности требуется проверять значения выходных параметров, которые сигнализируют об ошибках. (Клиент может проверить состояние флага ошибки в IPC-ответе, даже если соответствующий интерфейсный метод не содержит error-параметров. Для этого клиент использует макрос
nk_msg_check_err()
, определенный в заголовочном файлеnk/types.h
из состава KasperskyOS SDK.)Сигнатуры интерфейсных методов не могут импортироваться из других IDL-файлов.
Язык IDL чувствителен к регистру символов.
В IDL-описании могут использоваться однострочные и многострочные комментарии.
В IDL-описании используется как минимум одна опциональная декларация. Если в IDL-описании не использовать ни одной опциональной декларации, то этому описанию будет соответствовать "пустой" пакет, который не задает ни интерфейсных методов, ни типов данных (в том числе из других IDL-описаний).
Некоторые IDL-файлы из состава KasperskyOS SDK не описывают интерфейсные методы, а только содержат определения типов данных. Такие IDL-файлы используются только как экспортеры типов данных.
Если пакет содержит описание интерфейсных методов, то имя интерфейса соответствует имени пакета.
Примеры IDL-файлов
Env.idl
Kpm.idl
MessageBusSubs.idl
WaylandTypes.idl