15ms in the DPC is ridiculous for ndis.sys. What on earth are they doing in there? Have they not heard of Work Items?
When your kernel mode driver makes an IO request read or write first of all the Interrupt fires to say that it has DMA'd a buffer. The ISR should only set/clear registers and flags and get out there as fast as possible (runs at high IRQL priority) after queuing a DPC routine.
The DPC routine runs at (surprise, surprise) DPC level and completes the IO request. DPC is below IRQL but still higher than PASSIVE.
PASSIVE is where your applications run (user mode) and user mode drivers, as well as some kernel mode stuff such as work items.
15ms is way to long to be in a DPC routine.
I encountered this problem the PCIe hardware I designed and KMDF drivers I wrote for work. So I simply redesigned the hardware (easy as it is an FPGA) and rewrote the drivers to process 40ms worth of data, between interrupts, at time. The problem vanished. I know this is not an option for you however 15ms of processing time in a DPC routine?