Поделиться через


Функция 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)

См. также раздел

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject