The InterruptService routine quickly services a device interrupt and schedules post-interrupt processing of received data, if necessary.
BOOLEAN
InterruptService(
IN struct _KINTERRUPT *Interrupt,
IN PVOID ServiceContext
);
If the routine determines that the interrupt did not come from one of the driver's devices, it must return FALSE. Otherwise, the routine must service the interrupt and return TRUE.
To register an ISR for a specific interrupt vector and processor affinity, a driver must call IoConnectInterrupt.
A driver's InterruptService routine (ISR) executes in an interrupt context, at some system-assigned DIRQL, as specified by the SynchronizeIrql parameter to IoConnectInterrupt. (Other devices, with higher DIRQL values, can interrupt the ISR.)
Before the system calls an ISR, it acquires the interrupt's spin lock (the SpinLock parameter to IoConnectInterrupt), so the ISR cannot simultaneously execute on another processor. After the ISR returns, the system releases the spin lock.
An ISR must first determine if the interrupt came from one of the driver's devices, by examining context information supplied by Context. If the interrupt is not from one of the driver's devices, the routine must immediately return FALSE so the I/O Manager can call other drivers that have registered ISRs for the same processor and interrupt vector.
For more information about implementing ISRs, see Interrupt Objects and ISRs.