The DpcForIsr routine finishes the servicing of an I/O operation, after an InterruptService routine returns.
VOID
DpcForIsr(
IN PKDPC Dpc,
IN struct _DEVICE_OBJECT *DeviceObject,
IN struct _IRP *Irp,
IN PVOID Context
);
None
A driver's DpcForIsr routine executes in a DPC context, at IRQL = DISPATCH_LEVEL.
To register a DpcForIsr routine for a specific device object, a driver must call IoInitializeDpcRequest, which causes the system to allocate and initialize one DPC object. (If you need multiple DPC routines, use CustomDpc routines.)
To queue a DpcForIsr routine for execution, a driver's InterruptService routine must call IoRequestDPC.
A DpcForIsr routine is typically responsible for at least the following tasks:
If the driver uses the system-supplied IRP queue, the DcpForIsr routine should call IoStartNextPacket or IoStartNextPacketByKey, so the driver’s StartIo routine will start processing the next I/O request.
If the driver uses internal IRP queues, the DpcForIsr routine should dequeue the next IRP and begin processing for the next I/O request.
A DpcForIsr routine might also retry a failed operation or set up the next transfer for a large I/O request that has been broken into smaller pieces.
For more information about DpcForIsr routines, see DPC Objects and DPCs.