第一种:绑定kbdcalss驱动对象
kbdclass类驱动对象是键盘的最上层的驱动对象,对它的分发函数进行处理,则不用考虑底层的兼容性问题。
思路:首先使用ObReferenceObjectByName函数打开kbdclass驱动对象,然后使用DeviceObject指针和NextDevice指针遍历kbdclass驱动对象下所有的设备对象,每遍历一个则创建一个设备对象附加在其上,这样我们编写的驱动对象的分发函数,即可处理kbdclass类驱动对象的IRP。如图所示
第二种:直接替换kbdclass的分发函数
第三种:替换i8042prt或Kbdhid驱动对象中kbdclass的回调函数,在i8042prt或Kbdhid驱动对象中首先搜索是否出现了kbdclass类驱动对象,然后搜索是否出现了kbdclass类驱动对象中的函数地址,最后替换掉这个回调函数,如图所示
第四种:修改IDT表中关于0x93中断的处理
第五种:对IOAPIC中断控制器中,irq1对应的中断号替换成0x93之外的中断号(自定义的中断号和处理函数)