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或任意线程上下文中执行调用方,则 超时 参数 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