我正在开发Windows设备驱动程序,并且需要将系统关闭的执行延迟约10秒。我使用下面的代码我的司机的DispatchPower()函数中:延迟执行IRP_MN_SET_POWER
NTSTATUS DispatchPower(
__in struct _DEVICE_OBJECT *DeviceObject,
__in struct _IRP *Irp
)
{
switch(stack->MinorFunction)
{
case IRP_MN_SET_POWER:
delay_time.QuadPart = WDF_REL_TIMEOUT_IN_SEC(10);
KeDelayExecutionThread(KernelMode, FALSE, &delay_time);
}
}
但似乎KeDelayExecutionThread()立即返回,而无需等待?有什么建议么?
感谢,
STATUS_ALERTED意味着有人提醒你的线程与无证ZwAlertThread API。 STATUS_USER_APC意味着APC排队到该线程,例如使用Win32 API QueueUserApc。 – snoone
不知道'ZwAlertThread'(听起来像一个丑陋的黑客)。我认为''STATUS_USER_APC'被执行后的**被执行后**被返回。至少在可警告的用户模式等待中这是如此 – valdo