Функция 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 указывает на состояние сигнала.
Возвращаемое значение
None
Remarks
Хранилище для объекта события должно быть резидентным: в расширении устройства объекта устройства, созданного драйвером, в расширении контроллера созданного драйвером объекта контроллера или в невыгваемом пуле, выделенном вызывающим объектом. При выделении события в стеке необходимо указать значение ожидания KernelMode при вызове KeWaitForSingleObject, KeWaitForMutexObject или KeWaitForMultipleObjects. Во время ожидания KernelMode стек, содержащий событие, не будет выложен на страницу.
Драйверы обычно используют NotificationEvent для ожидания завершения операции ввода-вывода. Если для события уведомления задано состояние сигнала, все потоки, ожидающие передачи события в состояние сигнала, становятся доступными для выполнения. Событие остается в состоянии сигнала до тех пор, пока поток не вызовет KeResetEvent или KeClearEvent , чтобы установить событие в состоянии без сигнала.
Событие SynchronizationEvent также называется событием автозабора или автоматического стирания . Если такое событие задано, один ожидающий поток становится допустимым для выполнения. Ядро автоматически сбрасывает событие в состояние без сигнала каждый раз, когда выполняется ожидание. Драйвер может использовать событие синхронизации для защиты общего ресурса, который используется при синхронизации операций нескольких потоков.
Дополнительные сведения об объектах событий см. в разделе Объекты событий.