Previous Next

DpcForIsr

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
    );

Parameters

Dpc
Caller-supplied pointer to a KDPC structure, which represents the DPC object that is associated with this DpcForIsr routine.
DeviceObject
Caller-supplied pointer to a DEVICE_OBJECT structure. This is the device object for the target device, previously created by the driver's AddDevice routine.
Irp
Caller-supplied pointer to an IRP structure that describes the I/O operation.
Context
Caller-supplied pointer to driver-defined context information, specified in a previous call to IoInitializeDpcRequest.

Return Value

None

Comments

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:

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.