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 还原到调用开始时的原始值。
如果 等待 = TRUE,则例程返回而不降低 IRQL。 在这种情况下, KePulseEvent 调用必须紧跟 KeWaitXxx 调用。 通过设置 Wait = TRUE,调用方可以防止 KePulseEvent 调用和 KeWaitXxx 调用之间发生不必要的上下文切换。 KeWaitXxx 例程在返回之前,会将 IRQL 还原到 KePulseEvent 调用开始时的原始值。 尽管 IRQL 禁用两个调用之间的上下文切换,但这些调用不能可靠地用作原子操作的开始和结束。 例如,在这两次调用之间,在另一个处理器上同时运行的线程可能会更改事件对象或等待目标的状态。
如果调用方在 IRQL = DISPATCH_LEVEL 或在任意线程上下文中执行,则 KeWaitXxx 的 Timeout 参数必须为零。
警告
如果等待 事件的 线程当前正在运行内核 APC,则在调用 KePulseEvent 时,不满足此线程的等待。 内核 APC 完成后,线程将保持等待状态。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 通用 |
标头 | ntddk.h (包括 Ntddk.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) , IrqlKeDispatchLte (wdm) |