KeSetEvent 函式 (wdm.h)
KeSetEvent 例程會將事件物件設定為尚未發出訊號的事件狀態,並傳回事件物件的先前狀態。
語法
LONG KeSetEvent(
[in, out] PRKEVENT Event,
[in] KPRIORITY Increment,
[in] BOOLEAN Wait
);
參數
[in, out] Event
呼叫端提供記憶體之初始化事件物件的指標。
[in] Increment
指定設定事件時要套用的優先順序遞增,以便滿足等候。
[in] Wait
指定呼叫 KeSetEvent 是否要緊接在呼叫其中一個 KeWaitXxx 例程。 如果 TRUE,KeSetEvent 呼叫必須接著呼叫 KeWaitForMultipleObjects、KeWaitForMutexObject或 KeWaitForSingleObject。 如需詳細資訊,請參閱下列一節。
傳回值
如果事件物件的先前狀態已發出訊號,則會傳回非零值。
言論
呼叫 KeSetEvent 會導致事件達到訊號狀態。 如果事件是通知事件,系統會嘗試滿足事件對象上盡可能多的等候。 事件會保持訊號,直到呼叫 KeClearEvent 或 KeResetEvent 清除它為止。 如果事件是同步處理事件,系統會自動清除事件之前滿足一個等候。
KeSetEvent 例程可能會暫時引發 IRQL。 如果 Wait 參數 FALSE,則例程在傳回之前,會將 IRQL 還原至呼叫開始時的原始值。
如果 Wait = TRUE,則例程會傳回而不降低 IRQL。 在此情況下,KeSetEvent 呼叫必須緊接著 KeWaitXxx 呼叫。 藉由設定 Wait = TRUE,呼叫端可以防止在 KeSetEvent 呼叫與 KeWaitXxx 呼叫之間發生不必要的內容切換。 KeWaitXxx 例程傳回之前,會在 KeSetEvent 呼叫開始時,將 IRQL 還原為其原始值。 雖然 IRQL 會停用兩個呼叫之間的內容切換,但這些呼叫無法可靠地當做不可部分完成作業的開始和結尾使用。 例如,在這兩個呼叫之間,在另一個處理器上同時執行的線程可能會變更事件物件或等候目標的狀態。
在 IRQL = PASSIVE_LEVEL 執行的可分頁線程或可分頁驅動程式例程,絕不應呼叫 KeSetEvent,並將 Wait 參數設定為 TRUE。 如果呼叫端碰巧在呼叫 KeSetEvent 和 KeWaitXxx之間分頁,則這類呼叫會造成嚴重頁面錯誤。
如需事件物件的詳細資訊,請參閱 事件物件。
如果 Wait 設為 FALSE,則呼叫端可以在 IRQL <= DISPATCH_LEVEL 執行。 否則,KeSetEvent 的呼叫端必須在 IRQL <= APC_LEVEL 和非bitrary 線程內容中執行。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 請參閱一節。 |
DDI 合規性規則 | CompletionEventChecking(wdm)、DoubleKeSetEvent(storport)、HwStorPortProhibitedDDIs(storport)、IoAllocateIrpSignalEventInCompletion(wdm)、IoBuildDeviceIoControlSetEvent(wdm)、IoBuildFsdIrpSignalEventInCompletion(wdm)、IrqlKeSetEvent(wdm)、SignalEventInCompletion(wdm) |