Насколько я понимаю, когда система поднимает DIRQL до определенного уровня, любые прерывания с уровнем DIRQL или ниже эффективно отключаются на всех процессорах. Вот почему вы не должны поднимать IRQL дольше, чем это необходимо.
Очень маленький код драйвера должен поднять IRQL до уровня выше уровня диспетчеризации (который не маскирует прерывания). Единственный код драйвера, который должен поднять IRQL выше, - это код, который на самом деле должен взаимодействовать (обмениваться данными с) с обработчиком прерываний.
Редактировать : ChrisW получил лучшее описание того, что происходит в системе SMP - повышение IRQL на процессоре предотвратит обработку IRQ на этом конкретном процессоре. Если обработчик прерываний запланирован на другом ЦП, а спин-блокировка, защищающая общие данные, удерживается первым ЦП, обработчик прерываний будет вращаться на его ЦП до тех пор, пока первый ЦП не освободит спин-блокировку (для доступа к общим данным обработчик прерываний должен получить спин-блокировку, которая заставляет обработчик прерывания ждать).
Так что держите эти спин-блокировки как можно короче (и как можно реже).