gpt4 book ai didi

windows - 延迟执行 IRP_MN_SET_POWER

转载 作者:可可西里 更新时间:2023-11-01 11:37:53 25 4
gpt4 key购买 nike

我正在开发一个 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()没有等待就立即返回了?有什么建议吗?

谢谢,

最佳答案

不确定,但这里有一些建议:

  1. 检查KeDelayExecutionThread 的返回值。根据文档,似乎此函数可能会返回 STATUS_ALERTEDSTATUS_USER_APC 的初步结果。好吧,由于您正在执行非警报状态,所以这不应该发生,但是 OTOH 我不太明白 STATUS_ALERTEDSTATUS_USER_APC 之间有什么区别。除此之外,它可能会返回一个错误状态,这可能会提供信息。

  2. 根据文档,您必须以 IRQL <= APC_LEVEL 运行。您应该检查您的实际 IRQL (KeGetCurrentIrql)。

  3. 无论如何,恕我直言,在内核模式下阻塞线程是一个非常奇怪的设计。通常这会挂起整个系统。如果您想延迟 IRP 处理,您最好在调度例程中返回 STATUS_PENDING,然后通过定时器 DPC 完成此 IRP。

如果您对此不熟悉,请阅读有关以下内容的 MSDN:KeInitializeDpcKeInitializeTimerKeSetTimer

关于windows - 延迟执行 IRP_MN_SET_POWER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6572259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com