共用方式為


等候和 APC

注意

使用者 APC 在此頁面上描述的行為適用於一般使用者模式 APC,以及特殊的使用者模式 APC。

代表使用者模式呼叫端等候發送器對象的線程必須準備好,使用者 APC 或線程終止才能中斷該等候。 當線程呼叫 KeWaitForSingleObjectKeWaitForMultipleObjectsKeWaitForMutexObject KeDelayExecutionThread 時,操作系統可以將線程置於等候狀態。 一般而言,線程會維持在等候狀態,直到操作系統完成呼叫端要求的作業為止。 不過,如果呼叫端指定 WaitMode = UserMode ,操作系統可能會中斷等候。 在此情況下,例程會以NTSTATUS值結束STATUS_USER_APC。

使用 WaitMode = UserMode 呼叫上述四個例程之一的任何驅動程式都必須準備好接收STATUS_USER_APC的傳回值。 驅動程式必須使用STATUS_USER_APC完成其目前作業,並將控制權傳回使用者模式。

操作系統中斷等候的確切情況取決於例程的 Alertable 參數值。 如果 警示為 = TRUE,則等候是可警示的等候。 否則,等候是不可警示的等候。 操作系統只會中斷可警示的等候,以傳遞使用者 APC。 操作系統會中斷這兩種等候,以終止線程。

下表說明不同參數設定、等候和使用者 APC 傳遞之間的關聯性。

參數 等候中斷? 使用者 APC 已傳遞?
Alertable = TRUE WaitMode UserMode = Yes Yes
Alertable = TRUE WaitMode KernelMode = No
Alertable = FALSE WaitMode UserMode = 是,適用於線程終止。 否,適用於使用者 APC。 No
Alertable = FALSE WaitMode KernelMode = No No

您可以停用線程的核心 APC。 如果您停用線程的核心 APC,也會停用該線程的使用者 APC 傳遞和線程終止。 如需如何停用 APC 的詳細資訊,請參閱 停用 APC

警示是操作系統內部很少使用的機制,也可以中斷可警示的等候狀態。 不論 WaitMode 參數的值為何,警示都可以在 Alertable = TRUE中斷等候。 等候的例程會傳回 STATUS_ALERTED 的值。

請注意,核心 APC 會先佔執行,而且不會造成 KeWaitForXxxKeDelayExecutionThread 傳回。 系統會在內部中斷並繼續等候。 驅動程式通常不受此程序影響,但驅動程式可能會遺漏暫時性條件的發送器物件訊號,例如呼叫 KePulseEvent