ISRDPCSTATS

An ISRDPCSTATS structure (formally _ISRDPCSTATS ) is nested within the KINTERRUPT structure as the latter’s IsrDpcStats member, starting with version 6.3. It is also what the KPRCB structure’s IsrDpcStats member, defined formally as pointing to void, actually points to.

The only use that is yet known to be made of the statistics that accumulate in an ISRDPCSTATS structure is for the (undocumented) -t switch of the debugger extension command !idt.

The ISRDPCSTATS structure is identical in both 32-bit and 64-bit Windows. It is 0x40 bytes originally, but grows to 0x60 bytes in the 2004 release of Windows 10. Offsets, types and Microsoft’s names are known from type information in public symbol files for the kernel:

Offset Definition Versions
0x00
ULONGLONG IsrTime;
6.3 and higher
0x08
ULONGLONG IsrTimeStart;
6.3 and higher
0x10
ULONGLONG IsrCount;
6.3 and higher
0x18
ULONGLONG DpcTime;
6.3 and higher
0x20
ULONGLONG DpcTimeStart;
6.3 and higher
0x28
ULONGLONG DpcCount;
6.3 and higher
0x30
BOOLEAN IsrActive;
6.3 and higher
0x31
UCHAR Reserved [15];
6.3 to 1903
UCHAR Reserved [7];
2004 and higher
0x38
ISRDPCSTATS_SEQUENCE DpcWatchdog;
2004 and higher

When the !idt command reports on an Interrupt Service Routine because the selected IDT entry has at least one KINTERRUPT, it presents four statistics for each KINTERRUPT but unhelpfully gives no heading to say what these statistics represent. The four are in the order: IsrCount, IsrTime, DpcCount and DpcTime.