Функция KeInitializeEvent (wdm.h)
Подпрограмма KeInitializeEvent инициализирует объект события как событие синхронизации (один официант) или событие типа уведомлений и задает для него сигнальное или не сигнализированное состояние.
Синтаксис
void KeInitializeEvent(
[out] PRKEVENT Event,
[in] EVENT_TYPE Type,
[in] BOOLEAN State
);
Параметры
[out] Event
Указатель на объект события, для которого вызывающий объект предоставляет хранилище.
[in] Type
Указывает тип события NotificationEvent или SynchronizationEvent.
[in] State
Указывает начальное состояние события. TRUE указывает сигнальное состояние.
Возвращаемое значение
Никакой
Замечания
Хранилище для объекта события должно быть резидентом: в расширении устройства созданного драйвером объекта устройства, в расширении контроллера объекта контроллера, созданного драйвером, или в непакованном пуле, выделенном вызывающим объектом. Если вы выделяете событие в стеке, необходимо указать KernelMode ожидания при вызове KeWaitForSingleObject, KeWaitForMutexObjectили KeWaitForMultipleObjects. Во время ожидания KernelMode стек, содержащий событие, не будет выстраивается.
Драйверы обычно используют NotificationEvent для ожидания завершения операции ввода-вывода. Если для события уведомления задано сигнальное состояние, все потоки, ожидающие установки события в сигнальное состояние, станут допустимыми для выполнения. Событие остается в сигнальном состоянии, пока поток не вызывает KeResetEvent или KeClearEvent, чтобы задать событие в состоянии без сигнала.
SynchronizationEvent также называется событием автозапуска или автоматического. При установке такого события один поток ожидания становится допустимым для выполнения. Ядро автоматически сбрасывает событие в состояние без сигнала при каждом выполнении ожидания. Драйвер может использовать событие синхронизации для защиты общего ресурса, используемого при синхронизации операций нескольких потоков.
Дополнительные сведения об объектах событий см. в объектов событий.