Originally posted by: Nothinman
Why don't they get accounted to the System process?
Good question. To understand what's going on under the hood you really need to understand a bit about how the accounting system works in NT.
Interrupts and DPCs run at a different IRQL (interrupt request level) than any threads in the System process (or any user-mode process for that matter). Normal user-mode threads and all threads in the System Process run at IRQL 0 (Passive level) or IRQL1 (if in a system call). DPCs always run at IRQL2. Interrupts run at IRQL3 or higher. (Higher IRQL indicates higher priority in interrupt processing.)
All time accounting in NT is performed when the system timer fires, which happens every 10 ms on uniprocessor systems and ever 15 ms on multiprocessor systems. The granularity of the accounting will never be finer than the timer frequency. Note that this means that LOTS of things happen "under the radar". (If a thread just wakes up, checks something quickly, and goes back to sleep it is possible that it may never, ever register any CPU time according to the kernel's accounting system.)
When the timer fires, the timer's ISR examines the system's previous IRQL to determine who is charged the clock tick. (If it was DPC level, the DPC bucket is incremented. If it was higher, the Interrupt bucket is incremented. If it was lower, then the thread's user mode or kernel mode bucket is incremented depending on what it was doing.)
So back to your question: In some sense, you're right: DPC and ISR time is "system time" because it isn't dedicated to your user-mode apps.
But in another sense, one could argue that the "System Process" should only account for *Windows System* time, not time spent running hardware drivers (it's not Windows' fault). (In other words, byt this argument, Windows time and Driver time should be kept separate.)
So as you now know, Windows *does* actually separate these quantities internally. But Task Manager, perhaps out of simplicity, chooses to display only user-mode app time and Windows OS time. Everything else is just lumped uner "System Idle Process."
In Perfmon (the MMC Performance Monitor snap-in), you CAN see these quantities individually. You can separately graph DPC time, Interrupt time, user time, and (correct) idle time. So you can see that the kernel's performance accounting is doing its job, but Task Manager's reporting just doesn't get detailed enough for people like you and me.
And why was this never changed if it's a known bug?
It's not so much a "known bug" as a semantic distinction. I agree, however, that it is confusing. But so are lots of UI elements in Windows...