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 返回描述延迟完成方式的以下值之一:
返回代码 | 说明 |
---|---|
|
延迟已完成,因为指定的间隔已过。 |
|
延迟已完成,因为线程已发出警报。 |
|
用户模式 APC 是在指定的 间隔 过期之前传递的。 |
请注意,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 开始可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) 、 IrqlKeApcLte1 (wdm) 、 PowerIrpDDis (wdm) |