Таблица 10.26. Функции для работы с объектами событий
Что необходимо сделать... | Какой вызов нужно использовать... |
Создать событие | KeInitializeEvent |
Создать именованное событие | IoCreateSynchronizationEvent IoCreateNotificationEvent |
Изменить состояние события | KeSetEvent KeClearEvent KeResetEvent |
Запросить состояние |
KeReadStateEvent |
Для использования объекта события сначала необходимо получить память для его хранения размером sizeof(KEVENT), и только после этого можно выполнять вызовы функций, перечисленные выше. Рассмотрим некоторые из них.
Несигнальное состояние объекта событий можно установить при помощи вызовов KeResetEvent и KeClearEvent. Разница между ними заключается в том, что функция KeResetEvent еще и возвращает состояние объекта, в котором тот пребывал перед данным вызовом. Функция KeClearEvent
работает несколько быстрее, поэтому в тех случаях, когда нет необходимости знать предыдущее состояние объекта, следует использовать этот вызов.
Таблица 10.27. Прототип вызова KeInitializeEvent
VOID KeInitializeEvent | IRQL == PASSIVE_LEVEL |
Параметры | Инициализация объекта события и установка его начального состояния |
IN PKEVENT pEvent | Указатель на область памяти для объекта события |
IN EVENT_TYPE Type | Одно из двух значений • NotificationEvent • SynchronizationEvent |
IN BOOLEAN bInitalState | Начальное состояние объекта • TRUE — сигнальное состояние • FALSE — несигнальное состояние |
Возвращаемое значение | void |
Таблица 10.28. Прототип вызовов KeClearEvent
u KeResetEvent
VOID KeClearEvent LONG KeResetEvent |
IRQL <= DISPATCH_LEVEL |
Параметры | Установка объекта события в несигнальное состояния |
IN PKEVENT pEvent | Указатель на инициализированный объект события |
Возвращаемое значение |
KeResetEvent возвращает предыдущее состояние объекта события |
Таблица 10.29. Прототип вызова KeSetEvent
LONG KeSetEvent | IRQL <= DISPATCH_LEVEL |
Параметры | Переводит объект события в сигнальное состояние |
IN PKEVENT pEvent | Указатель на инициализированный объект события |
IN KPRIORITY Increment | Обычно используется значение IO_NO_INCREMENT |
IN BOOLEAN bWait | Обычно используется значение FALSE |
Возвращаемое значение |
Возвращает ненулевое значение, если предыдущее состояние объекта события было сигнальным |