Содержание
Маска событий
Маска событий – значение, биты которого интерпретируются как события, которые должны отслеживаться или уже произошли. Маска событий имеет размер 32 бита и состоит из общей и специальной части. Общая часть описывает события, неспецифичные для любых ресурсов (флаги этих событий определены в заголовочном файле handle/event_descr.h
). Например, в общей части находится флаг EVENT_OBJECT_DESTROYED
, который определяет событие "прекращение существования ресурса". Специальная часть описывает события, специфичные для пользовательского ресурса. Структура специальной части определяется поставщиком ресурса с использованием макроса OBJECT_EVENT_SPEC()
, который определен в заголовочном файле handle/event_descr.h
. Поставщику ресурса необходимо экспортировать публичные заголовочные файлы с описанием структуры специальной части.
EventDesc
Структура, описывающая уведомление, объявлена в файле coresrv/handle/notice_api.h
.
typedef struct {
rtl_uintptr_t eventId;
rtl_uint32_t eventMask;
} EventDesc;
eventId
– идентификатор записи "ресурс – маска событий" в приемнике уведомлений.
eventMask
– маска событий, которые произошли.
KnNoticeCreate()
Функция объявлена в файле coresrv/handle/notice_api.h
.
Retcode KnNoticeCreate(Notice *notice);
Функция создает приемник уведомлений notice
(объект, в котором накапливаются уведомления).
В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.
В начало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);
KnNoticeSetObjectEvent()
Функция объявлена в файле coresrv/handle/notice_api.h
.
Retcode KnNoticeSetObjectEvent(Handle object, rtl_uint32_t evMask);
Функция сигнализирует, что события из маски событий evMask
произошли с ресурсом object
.
Нельзя устанавливать флаги общей части маски событий, так как о событиях из общей части маски событий может сигнализировать только ядро KasperskyOS.
В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.
В начало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()
.