好的,所以 DPC_WATCHDOG_VIOLATION 是 BSOD 之后的常见错误代码。我想知道 -
有人可以帮忙吗?
编辑:我肯定已经用谷歌搜索过了。但我发现的只是“是什么导致了 DPC_WATCHDOG_VIOLATION?” 或“如何解决 DPC_WATCHDOG_VIOLATION 问题”。
为了让我的查询清楚,我主要想知道“DPC Watchdog”是什么,以及它在系统中的功能。
总结:
延迟过程调用 (DPC) 由DPC 看门狗定时器监视。
当 DPC 看门狗定时器检测到 DPC 运行时间过长时,它会产生DPC_WATCHDOG_VIOLATION错误。
首先,您需要了解什么是 DPC。一个简单的解释是:
延迟过程调用 (DPC) 是一种 Microsoft Windows 操作系统机制,它允许高优先级任务(例如中断处理程序)推迟所需但优先级较低的任务以供以后执行。
这允许设备驱动程序和其他低级别事件使用者快速执行其处理的高优先级部分,并安排非关键的附加处理以较低优先级执行。
Windows 需要一种机制来确定这些延迟过程调用何时出现问题(它们执行时间太长,因此降低了系统响应能力)。
该机制是DPC 看门狗定时器:
操作系统实现了一个 DPC 看门狗定时器来检测单个 DPC 例程何时运行太长时间,或者一系列排队的 DPC 例程何时背靠背运行太长时间。
如果启用了 DPC 超时错误,并且如果 DPC 例程超过单个例程的时间限制,或者一系列 DPC 例程超过总时间限制,则会发生 DPC_WATCHDOG_VIOLATION (0x133) 错误检查。
...
DPC 例程应该只运行很短的时间,并且应该将尽可能多的处理委托给工作线程。为避免降低系统响应能力,典型的 DPC 例程每次调用时运行时间不应超过 100 微秒。
源KeQueryDpcWatchdogInformation 例程
此错误检查表明 DPC 看门狗已执行,因为它检测到单个长时间运行的延迟过程调用 (DPC),或者因为系统在 DISPATCH_LEVEL 或更高的中断请求级别 (IRQL) 上花费了很长时间。参数 1 的值表示单个 DPC 是否超过超时,或者系统是否在 IRQL DISPATCH_LEVEL 或更高级别累积花费了较长时间。
DPC 的运行时间不应超过 100 微秒,ISR 的运行时间不应超过 25 微秒,但是系统上的实际超时值设置得更高。
源错误检查 0x133 DPC_WATCHDOG_VIOLATION