KasperskyOS Community Edition 1.0

Описания интерфейсов сущности (EDL, CDL, IDL)

Для контроля взаимодействий между сущностями необходимо, чтобы структура пересылаемых IPC-сообщений была прозрачна для модуля безопасности. В KasperskyOS это достигается с помощью статического декларирования интерфейсов сущностей. Для этого используются специальные языки: Entity Definition Language (EDL), Component Definition Language (CDL) и Interface Definition Language (IDL). Если IPC-сообщение не соответствует описанию интерфейса, оно будет отклонено модулем безопасности.

Описание интерфейсов сущности определяет допустимые структуры IPC-сообщений. Так задается явная связь между реализацией каждого метода и тем, как вызов этого метода представлен для модуля безопасности. Почти все инструменты сборки решения явно или косвенно используют описания интерфейсов сущностей.

Виды статических описаний

Описание интерфейсов сущности строится по модели "сущность-компонент-интерфейс":

  • IDL‑описание декларирует интерфейс, а также пользовательские типы и константы (опционально). В сумме все IDL-описания решения охватывают все реализуемые в решении интерфейсы.
  • В CDL-описании перечислены интерфейсы, реализуемые компонентом. Компоненты дают возможность группировать реализации интерфейсов. Компоненты могут включать в себя другие компоненты.
  • В EDL-описании сущности декларируются экземпляры компонентов, входящие в эту сущность. В частности, сущность может не включать в себя ни один компонент.

Пример

Ниже приведены статические описания решения, состоящего из сущности Client, не реализующей ни одного интерфейса, и сущности Server, реализующей интерфейс FileOps.

Client.edl

// Статическое описание состоит только из имени сущности

entity Client

Server.edl

// Сущность Server содержит экземпляр компонента Operations

entity Server

components {

OpsComp: Operations

}

Operations.cdl

// Компонент Operations реализует интерфейс FileOps

component Operations

interfaces {

FileOpsImpl: FileOps

}

FileOps.idl

package FileOps

// Объявление пользовательского типа String

typedef array <UInt8, 256> String;

// Интерфейс FileOps содержит единственный метод Open с входным аргументом name и выходным аргументом h

interface {

Open(in String name, out UInt32 h);

}

См. подробнее о синтаксисе статических описаний.