Fix it now
The DPC watchdog fired because a single deferred procedure call or interrupt service routine exceeded its time allotment, or because the system spent a prolonged period at DISPATCH_LEVEL or above. Microsoft’s resolution is to disable the driver named in the bug check message and check with its manufacturer for an update.
!analyze -v
!dpcs
driverquery /v /fo table
- Read the first parameter from the blue screen. 0 means a single DPC or ISR overran its allotment; 1 means the system cumulatively spent an extended period at IRQL DISPATCH_LEVEL or above.
- If the message names a driver, disable it to isolate the issue and get an update from the manufacturer. That is Microsoft’s documented first step.
- If it does not, open the newest file in
%SystemRoot%\Minidumpin WinDbg and run!analyze -vto see which module the DPC belonged to. - Check the System log in Event Viewer for other errors in the same window – Microsoft names that as the second thing to do, and a storage or firmware error there changes the whole picture.
- Confirm any recently installed hardware is compatible with the Windows version in use.
In practice the drivers with real hardware latency behind them turn up most often: storage controllers, network adapters and anything polling a device in a loop. That is a pattern to test, not the documented cause.
If the machine stays up with the suspect driver replaced, stop here. The next section explains what the watchdog is measuring and how to narrow it without a debugger.
Why it happens
A DPC is work a driver defers out of its interrupt handler so the interrupt can return quickly. DPCs run at DISPATCH_LEVEL, which means the thread scheduler is disabled on that processor for the duration – nothing else on that core runs until the routine finishes. That is fine when it takes microseconds and catastrophic when it takes seconds. The freeze you notice for a second or two before the blue screen is the symptom, not a separate fault.
Microsoft publishes the budgets, and they are small: DPCs should not run longer than 100 microseconds and ISRs should not run longer than 25 microseconds, although the actual timeout values on the system are set much higher. Those figures are the design target rather than the trigger, but they tell you the scale of what a driver is supposed to be doing at this level.
The kernel keeps two accounts and parameter 1 says which one tripped. A parameter 1 of 0 means a single DPC or ISR exceeded its time allotment, with parameter 2 the DPC time count in ticks and parameter 3 the allotment. A parameter 1 of 1 means the system cumulatively spent an extended period at DISPATCH_LEVEL or above, with parameter 2 the watchdog period. In both cases Microsoft says the offending component can usually be identified with a stack trace.
The word ISR matters. Microsoft’s parameter table says “a single DPC or ISR”, which puts interrupt service routines in scope alongside deferred calls. A device whose interrupt handler is waiting on hardware that has stopped answering promptly produces this as readily as a badly written DPC does.
The driver named in the message
You have this one if A .sys file appears on the blue screen or in !analyze -v.
- Disable that driver to isolate the issue, which is Microsoft’s own first resolution step.
- Check with the manufacturer for an update. Get it from them rather than from a driver updater utility.
- If a recent update introduced it, roll back to the previous version rather than forward to a newer one.
Storage controller and disk path
You have this one if Freezes under disk load, or the crash arrives during a large copy or a backup.
- Install the chipset and storage package from the motherboard or laptop vendor rather than relying on the inbox driver.
- Check the disks themselves:
Get-PhysicalDisk | Select FriendlyName, HealthStatusin PowerShell. - A drive that answers slowly keeps its driver at DISPATCH_LEVEL longer, which is how failing storage produces this stop code without ever reporting a read error.
Network adapter and virtual adapters
You have this one if Crashes correlate with network activity, a VPN connection, or a virtualisation or packet capture product being installed.
Get-NetAdapter | Select-Object Name, InterfaceDescription, DriverVersion, DriverDateto see what is loaded and how old it is.- Update from the adapter vendor, and remove any virtual adapter, VPN client or capture driver you no longer use.
- Disable the suspect adapter as a test before uninstalling anything – it is reversible in seconds.
A different DPC or timer bug check
You have this one if 0x000000B8, 0x000000C7 or 0x00000157 rather than 0x00000133.
- 0x000000B8 ATTEMPTED_SWITCH_FROM_DPC: a wait operation, attach process, or yield was attempted from a DPC routine. Microsoft’s note is that the stack trace leads to the code in the original DPC routine.
- 0x000000C7 TIMER_OR_DPC_INVALID: a kernel timer or DPC was found in memory where it is not permitted, usually because a driver freed the memory without cancelling the timer or DPC first.
- 0x00000157 KERNEL_THREAD_PRIORITY_FLOOR_VIOLATION: an illegal operation on a thread’s priority floor. Parameter 3 says whether the priority counter overflowed, underflowed, or the priority value was illegal.
Full reference
Parameter 1, and what the rest mean
| Parameter 1 | Parameter 2 | Parameter 3 | Cause |
|---|---|---|---|
| 0 | The DPC time count, in ticks | The DPC time allotment, in ticks | A single DPC or ISR exceeded its time allotment |
| 1 | The watchdog period | A DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK with more information | The system cumulatively spent an extended period at IRQL DISPATCH_LEVEL or above |
The neighbouring bug checks
| Code | Name | What it says |
|---|---|---|
0x00000133 |
DPC_WATCHDOG_VIOLATION | The DPC watchdog executed, for one of the two reasons above |
0x000000B8 |
ATTEMPTED_SWITCH_FROM_DPC | A wait operation, attach process, or yield was attempted from a DPC routine |
0x000000C7 |
TIMER_OR_DPC_INVALID | A kernel timer or DPC was found somewhere in memory where it is not permitted |
0x00000157 |
KERNEL_THREAD_PRIORITY_FLOOR_VIOLATION | An illegal operation was attempted on the priority floor of a particular thread |
0x000000C7’s parameter 1 is worth knowing because it distinguishes what was found where it should not have been: 0x0 is a timer object, 0x1 a DPC object, 0x2 a DPC routine, 0x3 a DPC object with the wrong processor number, and 0x4 and 0x5 mean the thread’s APC disable count changed during the DPC or timer DPC routine. All of them point at a driver that freed memory without cancelling what was still registered in it.
Reading it in the debugger
| Command | What it gives you |
|---|---|
!analyze -v |
The bug check breakdown and the module it holds responsible |
!dpcs |
The DPC queues, which is where a long-running deferred call shows itself |
k, kb |
The stack trace Microsoft says usually identifies the offending component |
Narrowing it without a debugger
- Note whether the freeze correlates with disk activity, network activity or neither. That single observation removes most of the candidates.
driverquery /v /fo tablefrom an elevated prompt lists every driver with its state and start mode – scan it for anything you do not recognise.- Disable one suspect device at a time in Device Manager and use the machine normally between changes. Reversible, and it costs nothing.
- Check
powercfg /ato see which sleep states the machine supports, because a machine on modern standby has a different set of drivers active at idle from one using S3. powercfg /sleepstudyproduces a modern standby report covering roughly the last three days. It is only useful on a machine actually using modern standby, which is whatpowercfg /atells you.
When the driver is up to date and it still crashes
- Roll the driver back rather than forward. A regression in a current release is at least as likely as a bug in an old one, and rolling back is a test you can undo.
- Check disk health. Storage that answers slowly under load produces this without any SMART warning.
- Confirm recently installed hardware is compatible with the Windows version, which is one of Microsoft’s own troubleshooting steps.
- Remove capture, virtualisation and VPN drivers you are not using. They sit in the path whether or not the product is running.
- Read the System log around each crash. This bug check is often the last event in a sequence that started somewhere more informative.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0x00000133 |
DPC_WATCHDOG_VIOLATION: parameter 1 of 0 means a single DPC or ISR exceeded its time allotment; parameter 1 of 1 means the system cumulatively spent an extended period at IRQL DISPATCH_LEVEL or above | Microsoft Learn |
0x000000B8 |
ATTEMPTED_SWITCH_FROM_DPC: an illegal operation was attempted by a DPC routine – a wait operation, attach process, or yield | Microsoft Learn |
0x000000C7 |
TIMER_OR_DPC_INVALID: a kernel timer or DPC was found somewhere in memory where it is not permitted, usually because a driver freed the memory without cancelling the timer or DPC first | Microsoft Learn |
0x00000157 |
KERNEL_THREAD_PRIORITY_FLOOR_VIOLATION: an illegal operation was attempted on the priority floor of a particular thread; parameter 3 says whether the counter overflowed, underflowed, or the value was illegal | Microsoft Learn |
Confirm the fix worked
- The workload that used to freeze the machine runs to completion with no new dump in
%SystemRoot%\Minidump. - Device Manager shows the replaced driver at the version you installed.
- The System log has no new storage or network errors in the tested window.
- The brief freezes stop as well as the crashes – if they continue, the driver is still overrunning and you have only moved the threshold.
Questions people ask about this
Is this a hardware failure?
Not usually, and Microsoft’s resolution is aimed at drivers: disable the one named in the message and check with the manufacturer for updates. Hardware gets into it indirectly, when a device answers slowly enough to keep its driver at DISPATCH_LEVEL for too long.
What is the difference between parameter 1 of 0 and 1?
0 is one single DPC or ISR overrunning its time allotment, with the count and the allotment in parameters 2 and 3. 1 is the system cumulatively spending too long at DISPATCH_LEVEL or above, with the watchdog period in parameter 2. The first points at one routine; the second at a pattern.
How long is a DPC allowed to run?
Microsoft’s published guidance is that DPCs should not run longer than 100 microseconds and ISRs not longer than 25, while noting the actual timeout values on the system are set much higher. Treat those as the design target rather than the trigger point.
powercfg /sleepstudy returns nothing useful.
It reports on modern standby quality over roughly the last three days, so on a machine using S3 sleep there is nothing for it to report. Run powercfg /a first to see which sleep states the machine actually supports.
