Once the kernel is running and interrupts are enabled, the minidriver continues to be called when the interrupt that it's attached to is triggered. This action can continue for the lifetime of the system; in other words, the minidriver can behave like a tiny interrupt handler that's always active.
Usually the hardware needs more attention than the minidriver is set up to give it, so you'll want the minidriver to hand off to a full driver.
Here's the sequence of events for doing this:
dptr = mmap( 0, 65536, PROT_READ | PROT_WRITE | PROT_NOCACHE, MAP_PHYS | MAP_SHARED, NOFD, SYSPAGE_ENTRY(mdriver)->data_paddr );
Since the minidriver is still running at this point, it continues to run whenever the interrupt is triggered. Depending on the design, it may be necessary to do some processing of the existing data that has been stored by the minidriver before the full driver takes control.
For safety, the full driver should always disable the device interrupt before calling InterruptAttach() or InterruptAttachEvent(), and then enable the interrupt upon success.
After this, the minidriver is no longer called, and only the full driver receives the interrupt.