IRP именно сидит и ждет нажатия/отжатия кнопки. Система дает запрос на ввод. Формируется IRP, пробегает по всей цепочке драйверов. Каждый драйвет выставляет в IRP свой адрес Completion Routine. А моего драйвера в этот момент в цепочке еще нет. И событие IRP_MJ_FLUSH_BUFFERS просто пройдет мимо...
Непонятным является то, что при проходе всей цепочки драйверов до самого низа все DEVICE_OBJECT.CurrentIrp равны нулю. Из чего я и сделал вывод, что IRP околачивается где-то внутри IO Manager.
Это мой первый драйвер, поэтому не судите строго, если я, мягко говоря, чушь несу.