我试图用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蓝屏死机?哪里错了?
答案 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。