El proceso es el siguiente:
1. Se genera una IRQ en un proceso que responde a un evento (ej: pulsación de una tecla).
2. Al haberse generado una interrupción sucede un cambio de contexto (cambio de modo Usuario a Kernel).
3. La IRQ es procesada por el OS. Se busca la función que maneja la pulsación de la tecla en una tabla de rutinas (IDT) de interrupción.
En la IDT no solo residen rutinas para manejar Interrupciones Hardware (IRQ) si no también Interrupciones Software.
4. Se ejecuta dicha rutina en modo Kernel para procesar la IRQ.
5. Al finalizar se devuelve el control al contexto que generó la IRQ.
Obviamente el código que reside en esas rutinas se puede alterar, interceptar etc es lo que hacen los rootkit, pero necesitas estar en ring0.
Si te interesa lee un poquillo sobre el tema, aquí te dejo + info ->
http://wiki.osdev.org/InterruptsSaludos!