如何使用 Windows KMDF 注册软件中断?

How to register a software interrupt with Windows KMDF?

我想在 Windows 10 x64 上用相应的服务例程注册一个新的软件中断,这可能吗 - 是否提供 API 来执行此操作?我是否必须使用未记录的功能手动完成此操作,这样做会触发内核补丁保护吗?

注册软件中断会导致针对 运行 操作系统修改中断描述符 table (IDT)。 Windows 具有内核补丁保护 (KPP) / PatchGuard,可保护内核代码和数据结构(例如 IDT)不被篡改。这包括防止添加新的中断描述符条目、删除它们以及修改描述符table。

这也意味着不能修改中断描述符条目。开发人员这样做的原因是将中断重定向到新的中断服务例程,也称为中断挂钩。这也是由于 KPP/PatchGuard.

而被阻止的

一般而言,对于从 XP 开始的 Windows 64 位版本,PatchGuard/KPP 可以防止以任何方式修改 IDT。但是,Microsoft 已明确声明在激活内核调试器时禁用 KPP/PatchGuard。尽管如此,无论是否存在内核调试器,仍然可以在 32 位版本的 Windows 上修改 IDT 等关键内核代码和数据结构。