我正在开发一个Windows设备驱动程序,需要将系统关机的执行延迟大约10秒。我在我的驱动程序的DispatchPower()函数中使用了以下代码:
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()不需要等待就可以立即返回?有什么建议吗?
谢谢,
发布于 2011-07-04 22:41:12
不确定,但这里有一些建议:
KeDelayExecutionThread的返回值。根据文档,此函数可能会返回STATUS_ALERTED或STATUS_USER_APC的初步结果。好吧,既然你正在执行一种不可警示的状态,这应该不会发生,但是我不太明白STATUS_ALERTED和STATUS_USER_APC之间的区别。除此之外,它可能会返回一个错误状态,这可能是你必须在IRQL <= APC_LEVEL上运行的文档的informative.STATUS_PENDING,然后通过定时器DPC完成这个IRP。如果你对此不熟悉,请阅读关于以下内容的MSDN:KeInitializeDpc,KeInitializeTimer,KeSetTimer。
发布于 2011-07-06 00:12:23
前面的答案很好,在这样的power线程中阻塞是不被鼓励的(即使在文档中也是如此)。为什么你首先需要10秒的延迟呢?
-scott
https://stackoverflow.com/questions/6572259
复制相似问题