KasperskyOS Community Edition 1.1
[Topic libkos_notice]

Маска событий

Маска событий – значение, биты которого интерпретируются как события, которые должны отслеживаться или уже произошли. Маска событий имеет размер 32 бита и состоит из общей и специальной части. Общая часть описывает события, неспецифичные для любых ресурсов (флаги этих событий определены в заголовочном файле handle/event_descr.h). Например, в общей части находится флаг EVENT_OBJECT_DESTROYED, который определяет событие "прекращение существования ресурса". Специальная часть описывает события, специфичные для пользовательского ресурса. Структура специальной части определяется поставщиком ресурса с использованием макроса OBJECT_EVENT_SPEC(), который определен в заголовочном файле handle/event_descr.h. Поставщику ресурса необходимо экспортировать публичные заголовочные файлы с описанием структуры специальной части.

В начало
[Topic event_mask]

EventDesc

Структура, описывающая уведомление, объявлена в файле coresrv/handle/notice_api.h.

typedef struct {

rtl_uintptr_t eventId;

rtl_uint32_t eventMask;

} EventDesc;

eventId – идентификатор записи "ресурс – маска событий" в приемнике уведомлений.

eventMaskмаска событий, которые произошли.

В начало
[Topic event_desc]

KnNoticeCreate()

Функция объявлена в файле coresrv/handle/notice_api.h.

Retcode KnNoticeCreate(Notice *notice);

Функция создает приемник уведомлений notice (объект, в котором накапливаются уведомления).

В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.

В начало
[Topic notice_create]

KnNoticeGetEvent()

Функция объявлена в файле coresrv/handle/notice_api.h.

Retcode KnNoticeGetEvent(Notice notice,

rtl_uint64_t msec,

rtl_size_t countMax,

EventDesc *events,

rtl_size_t *count);

Функция извлекает уведомления из приемника уведомлений notice, ожидая наступления событий в течение msec миллисекунд.

Входной параметр countMax задает максимальное число уведомлений, которое может быть извлечено.

Выходной параметр events содержит набор извлеченных уведомлений типа EventDesc.

Выходной параметр count содержит число уведомлений, которые были извлечены.

В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.

Пример

const int maxEventsPerNoticeCall = 10;

Retcode rc;

EventDesc events[maxEventsPerNoticeCall];

rtl_size_t eventCount;

rc = KnNoticeGetEvent(notice, INFINITE_TIMEOUT, rtl_countof(events),

&events[0], &eventCount);

В начало
[Topic notice_get_event]

KnNoticeSetObjectEvent()

Функция объявлена в файле coresrv/handle/notice_api.h.

Retcode KnNoticeSetObjectEvent(Handle object, rtl_uint32_t evMask);

Функция сигнализирует, что события из маски событий evMask произошли с ресурсом object.

Нельзя устанавливать флаги общей части маски событий, так как о событиях из общей части маски событий может сигнализировать только ядро KasperskyOS.

В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.

В начало
[Topic notice_set_object_event]

KnNoticeSubscribeToObject()

Функция объявлена в файле coresrv/handle/notice_api.h.

Retcode KnNoticeSubscribeToObject(Notice notice,

Handle object,

rtl_uint32_t evMask,

rtl_uintptr_t evId);

Функция добавляет запись вида "ресурс – маска событий" в приемник уведомлений notice, чтобы он принимал уведомления о событиях, которые происходят с ресурсом object и соответствуют маске событий evMask.

Входной параметр evId задает идентификатор записи, который назначается пользователем и используется, чтобы идентифицировать запись в полученных уведомлениях.

В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.

Пример использования – см. KnHandleCreateUserObject().

В начало
[Topic notice_subscribe_to_object]