如何使用HalGetInterruptVector从Windows IDT获取键盘中断

时间:2018-02-13 15:23:13

标签: windows x86-64 masm keyboardinterrupt

我试图用HalGetInterruptVector挂钩Windows键盘中断但是当调用HalGetInterruptVector并且我无法在Windows IDT中挂钩键盘中断时BSOD。看到我的部分源代码:

Start:
PUSH 0
MOV RAX,RSP
PUSH RAX
PUSH RAX
PUSH 1
PUSH 1
PUSH 0
PUSH 1
CALL HalGetInterruptVector ; Here BSOD happens
AND RAX,0FFH
MOV [IRQ1],RAX

为什么我的代码会出现我的Windows 8 x64蓝屏死机?哪里错了?

1 个答案:

答案 0 :(得分:0)

HalGetInterruptVector is an obsolete function,显然是it is not supported in 64-bit builts of Windows

  

64位Windows不支持此接口。   您是否尝试将一些古老的NT4风格驱动程序移植到64位平台?   这是不可能的 - 你必须重写它。

我对HalGetInterruptVector并不熟悉,但如果你的目的是挂钩特定的IRQ,那可能不是一个好主意。
即使假设函数考虑IOAPIC vs 8059A mode,很多键盘也不是PS / 2(虽然这个接口是通过SMM模拟的)但是USB。 这意味着它们生成的IRQ是可变的,甚至可以是MSI

更好的选择是挂钩正确的抽象级别:HID class