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 调用紧接着对 KeWaitForMultipleObjectsKeWaitForMutexObjectKeWaitForSingleObject 的调用。 有关更多信息,请参见下面的“备注”部分。

返回值

事件对象的上一个信号状态。

注解

有关事件对象的详细信息,请参阅 事件对象

KePulseEvent 例程可能会暂时引发 IRQL。 如果 Wait 参数为 FALSE,则例程在返回之前会将 IRQL 还原到调用开始时的原始值。

如果 等待 = TRUE,则例程返回而不降低 IRQL。 在这种情况下, KePulseEvent 调用必须紧跟 KeWaitXxx 调用。 通过设置 Wait = TRUE,调用方可以防止 KePulseEvent 调用和 KeWaitXxx 调用之间发生不必要的上下文切换。 KeWaitXxx 例程在返回之前,会将 IRQL 还原到 KePulseEvent 调用开始时的原始值。 尽管 IRQL 禁用两个调用之间的上下文切换,但这些调用不能可靠地用作原子操作的开始和结束。 例如,在这两次调用之间,在另一个处理器上同时运行的线程可能会更改事件对象或等待目标的状态。

如果调用方在 IRQL = DISPATCH_LEVEL 或在任意线程上下文中执行,则 KeWaitXxxTimeout 参数必须为零。

警告

如果等待 事件的 线程当前正在运行内核 APC,则在调用 KePulseEvent 时,不满足此线程的等待。 内核 APC 完成后,线程将保持等待状态。

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 ntddk.h (包括 Ntddk.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlKeDispatchLte (wdm)

另请参阅

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject