KeDelayExecutionThread 函式 (wdm.h)
KeDelayExecutionThread 例程會將目前的線程置於指定間隔的可警示或不可變更等候狀態。
語法
NTSTATUS KeDelayExecutionThread(
[in] KPROCESSOR_MODE WaitMode,
[in] BOOLEAN Alertable,
[in] PLARGE_INTEGER Interval
);
參數
[in] WaitMode
指定呼叫端正在等候的處理器模式,可以是 KernelMode 或 UserMode。 較低層級的驅動程序應該指定 KernelMode。
[in] Alertable
如果等候可發出警示,則指定 TRUE 。 較低層級的驅動程序應該指定 FALSE。
[in] Interval
以 100 奈秒為單位指定絕對或相對時間,等候發生。 負值表示相對時間。 絕對到期時間會追蹤系統時間的任何變更;相對到期時間不會受到系統時間變更的影響。
傳回值
KeDelayExecutionThread 會傳回下列其中一個值,描述延遲的完成方式:
傳回碼 | Description |
---|---|
|
延遲已完成,因為指定的間隔已耗用。 |
|
延遲已完成,因為線程已收到警示。 |
|
使用者模式 APC 會在指定的 Interval 到期之前傳遞。 |
請注意,NT_SUCCESS宏會將所有這些狀態值辨識為「成功」值。
備註
系統會計算到期時間,並將目前的線程置於等候狀態。 當指定的間隔通過時,線程會結束等候狀態,並進入就緒狀態,使其符合執行資格。
Alertable 參數會判斷線程何時可以發出警示,以及其等候狀態因而中止。 如需詳細資訊,請參閱 等候和 APC。
如果 WaitMode 參數是 UserMode,則可以在等候期間交換核心堆疊。 因此,呼叫端絕對不能嘗試在使用UserMode自變數呼叫KeDelayExecutionThread時,在堆疊上傳遞參數。
當 WaitMode 參數為 UserMode 或 Alertable 為 TRUE 時,檢查 KeDelayExecutionThread 的傳回值特別重要,因為 KeDelayExecutionThread 可能會提早傳回狀態為 STATUS_USER_APC 或 STATUS_ALERTED。
用戶可中止的所有長期等候應該是 UserMode 等候,而 Alertable 應設定為 FALSE。
可能的話, Alertable 應該設定為 FALSE ,而且 WaitMode 應設定為 KernelMode,以減少驅動程式的複雜度。 此指導方針的主要例外是等候是長期等候的時間。
延遲的到期時間會表示為延遲到期的絕對時間,或相對於目前系統時間的時間。 如果 Interval 參數值為正數,則到期時間是絕對時間。 如果此值為負值,則到期時間是相對時間。
到期時間會相對於系統時鐘進行測量,而且操作系統可以偵測到定時器到期的精確度受限於系統時鐘的數據粒度。 如需詳細資訊,請參閱 定時器精確度。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 IrqlKeApcLte1 (wdm) 、 PowerIrpDDis (wdm) |