Ke PulseeEvent 函式 (ntddk.h)
Ke PulseeEvent 例程會以不可部分完成的方式將事件對象設定為訊號狀態、嘗試滿足盡可能多的等候,然後將事件物件重設為未發出訊號的狀態。
語法
LONG KePulseEvent(
[in, out] PRKEVENT Event,
[in] KPRIORITY Increment,
[in] BOOLEAN Wait
);
參數
[in, out] Event
KEVENT 類型的發送器物件的指標。
[in] Increment
指定提升,以套用至線程的優先順序,這些線程會因事件被推動而準備好。 通常設定為零,但可以設定為1。
[in] Wait
指定布爾值,這個值表示 呼叫 Ke PulseeEvent 是否會緊接在呼叫其中一個 KeWaitXxx 例程之後。 如果 為 TRUE,KePulseeEvent 呼叫會緊接著呼叫 KeWaitForMultipleObjects、 KeWaitForMutexObject 或 KeWaitForSingleObject。 如需詳細資訊,請參閱接下來的<備註>一節。
傳回值
事件物件的先前訊號狀態。
備註
如需事件對象的詳細資訊,請參閱 Event Objects。
Ke PulseeEvent 例程可能會暫時引發 IRQL。 如果 Wait 參數為 FALSE,則例程在傳回之前,會將 IRQL 還原至它在呼叫開始時所擁有的原始值。
如果 為 Wait = TRUE,則例程會傳回而不降低 IRQL。 在此情況下, KePulseEvent 呼叫必須緊接 在 KeWaitXxx 呼叫之後。 藉由設定 Wait = TRUE,呼叫端可以防止 KePulseEvent 呼叫與 KeWaitXxx 呼叫之間發生不必要的內容切換。 KeWaitXxx 例程在傳回之前,會在 KePulseEvent 呼叫開始時,將 IRQL 還原為其原始值。 雖然 IRQL 會停用兩個呼叫之間的內容切換,但這些呼叫無法可靠地當做不可部分完成作業的開始和結束。 例如,在這兩個呼叫之間,在另一個處理器上同時執行的線程可能會變更事件物件或等候目標的狀態。
如果呼叫端在 IRQL = DISPATCH_LEVEL或在任意線程內容中執行,則 KeWaitXxx 的 Timeout 參數必須是零。
警告
如果等候 事件的 線程目前正在執行核心 APC,則呼叫 KePulseEvent 時,無法滿足此線程的等候。 核心 APC 完成之後,線程會維持在等候狀態。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | ntddk.h (包含 Ntddk.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 IrqlKeDispatchLte (wdm) |