Функция KePulseEvent (ntddk.h)
Подпрограмма KePulseEvent атомарно устанавливает объект события в состояние сигнала, пытается удовлетворить как можно больше ожиданий, а затем сбрасывает объект события в состояние без сигнала.
Синтаксис
LONG KePulseEvent(
[in, out] PRKEVENT Event,
[in] KPRIORITY Increment,
[in] BOOLEAN Wait
);
Параметры
[in, out] Event
Указатель на объект диспетчера типа KEVENT.
[in] Increment
Указывает повышение для применения к приоритету потоков, которые готовы в результате пульсации события. Обычно устанавливается равным нулю, но может быть задано значение 1.
[in] Wait
Указывает логическое значение, указывающее, будет ли вызов KePulseEvent немедленно сопровождаться вызовом одной из подпрограмм KeWaitXxx . Если задано значение TRUE, за вызовом KePulseEvent сразу же следует вызов KeWaitForMultipleObjects, KeWaitForMutexObject или KeWaitForSingleObject. Дополнительные сведения см. в разделе "Примечания".
Возвращаемое значение
Предыдущее состояние сигнала объекта события.
Комментарии
Дополнительные сведения об объектах событий см. в разделе Объекты событий.
Подпрограмма KePulseEvent может временно вызвать IRQL. Если параметр Wait имеет значение FALSE, подпрограмма перед возвратом восстанавливает irQL до исходного значения, которое было в начале вызова.
Если значение Wait = TRUE, подпрограмма возвращает без понижения значения IRQL. В этом случае за вызовом KePulseEvent должен следовать вызов KeWaitXxx . Установив значение Wait = TRUE, вызывающий объект может предотвратить ненужное переключение контекста между вызовом KePulseEvent и вызовом KeWaitXxx . Подпрограмма KeWaitXxx перед возвратом восстанавливает исходное значение IRQL в начале вызова KePulseEvent . Хотя IRQL отключает переключения контекста между двумя вызовами, эти вызовы нельзя надежно использовать в качестве начала и окончания атомарной операции. Например, между этими двумя вызовами поток, выполняющийся одновременно на другом процессоре, может изменить состояние объекта события или целевого объекта ожидания.
Если вызывающий объект выполняется в irQL = DISPATCH_LEVEL или в произвольном контексте потока, параметр Timeout для KeWaitXxx должен быть равен нулю.
Предупреждение
Если поток, ожидающий события, в настоящее время выполняет ядро APC, то при вызове KePulseEvent ожидание этого потока не выполняется. После завершения APC ядра поток остается в состоянии ожидания.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 2000. |
Целевая платформа | Универсальное |
Верхняя часть | ntddk.h (включая Ntddk.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm) |