【问题标题】:How to get the keyboard interrupt from windows IDT with HalGetInterruptVector如何使用 HalGetInterruptVector 从 Windows IDT 获取键盘中断
【发布时间】:2018-02-13 15:23:12
【问题描述】:

我正在尝试使用 HalGetInterruptVector 挂钩 Windows 键盘中断,但是当调用 HalGetInterruptVector 时出现蓝屏死机,我想在 Windows IDT 中挂钩键盘中断。查看我的部分源代码:

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 蓝屏死机?哪里错了?

【问题讨论】:

    标签: windows x86-64 masm keyboardinterrupt


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2015-02-03
      • 1970-01-01
      • 2010-11-24
      • 2015-11-30
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多