- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个 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()没有等待就立即返回了?有什么建议吗?
谢谢,
最佳答案
不确定,但这里有一些建议:
检查KeDelayExecutionThread
的返回值。根据文档,似乎此函数可能会返回 STATUS_ALERTED
或 STATUS_USER_APC
的初步结果。好吧,由于您正在执行非警报状态,所以这不应该发生,但是 OTOH 我不太明白 STATUS_ALERTED
和 STATUS_USER_APC
之间有什么区别。除此之外,它可能会返回一个错误状态,这可能会提供信息。
根据文档,您必须以 IRQL <= APC_LEVEL
运行。您应该检查您的实际 IRQL (KeGetCurrentIrql
)。
无论如何,恕我直言,在内核模式下阻塞线程是一个非常奇怪的设计。通常这会挂起整个系统。如果您想延迟 IRP 处理,您最好在调度例程中返回 STATUS_PENDING
,然后通过定时器 DPC 完成此 IRP。
如果您对此不熟悉,请阅读有关以下内容的 MSDN:KeInitializeDpc
、KeInitializeTimer
、KeSetTimer
。
关于windows - 延迟执行 IRP_MN_SET_POWER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6572259/
我正在开发一个 Windows 设备驱动程序,需要将系统关闭的执行延迟大约 10 秒。我在驱动程序的 DispatchPower() 函数中使用以下代码: NTSTATUS DispatchPower
我是一名优秀的程序员,十分优秀!