Like the interrupt object type described in the preceding section, the DPC object type is defined by the NT Kernel. A DPC object represents a deferred procedure call: a caller-supplied routine that is run later at a lower hardware priority (IRQL).
Any NT device driver that registers an ISR must use one or more DPC objects to register its DpcForIsr and/or CustomDpc routine(s). A driver-supplied DpcForIsr or CustomDpc routine is responsible for completing interrupt-driven I/O operations so the ISR can return control as quickly as possible.
Some system device drivers have only a single DpcForIsr routine, and such a driver uses a single DPC object. At the driver writer’s discretion, an NT device driver can have one or more CustomDpc routines, each using a DPC object, in addition to or as a substitute for a DpcForIsr routine.
The NT I/O Manager provides support for registering a DpcForIsr and for queueing this routine from the ISR, as explained in the next section. The Kernel provides support for registering a CustomDpc and for queueing this routine from the ISR, as explained in Section 3.6.2.