Win32支持何种程度的中断?

4
Win32系统在处理器定义以外是否支持中断?例如,x86机器至少定义了18个中断,包括陷阱(如INT 3)等。英特尔留下的其他19-255个中断为软件定义中断。这些中断是否被Windows/WinAPI使用,还是只是开放和供应用程序随意使用?如果Windows使用它们,那么我在哪里可以找到相关文档?我在MSDN上查找并没有发现任何信息。(顺便说一句,我正在进行编译器、调试器和其他系统级编程,所以请不要就是否使用中断向我发表您的意见。)

5
应用程序本身无法注册中断处理程序,特别是因为中断处理程序往往在Ring 0运行。必须由驱动程序完成此操作。我会下载WinDDK进行查看和操作。 - slugonamission
1个回答

4
在Win32应用程序中,通常只使用一个中断:int 2Eh,它被用作系统调用入口点。这类似于DOS中的int 21h。其他中断不被应用程序使用。
应用程序可以通过结构化异常处理(SEH) / 矢量异常处理(VEH)来处理一些CPU异常(和调试断点)。Windows会捕获源自应用程序的CPU异常,并尽可能地将其反射回应用程序中(Windows无法完美模拟CPU异常模型)。
Windows内部使用设备中断,不允许应用程序干扰它们。x86 CPU在最高特权级别下处理中断,即内核运行时。
现在许多设备中断没有与固定的中断向量相关联,而是可配置的,你需要使用各种工具如PCI查询或更改设置。
如果你想直接处理设备和中断,则需要为Windows编写内核模式驱动程序。有设备驱动程序套件(DDK)和书籍如《Windows Internals》可帮助您入门。
但是,如果您正在寻找特定设备XYZ及其中断编程的详细信息,则在MSDN或DDK上找不到所有信息,因为您需要硬件特定信息,而这超出了Microsoft的控制范围。内核提供了处理I/O和中断所需的功能,但最终是由设备驱动程序使用它们中的一种。

接着查看了Russinovich的《Windows Internals 5》和其他一些资料,似乎证实了这一点。操作系统显然会对软件中断进行汇集,并由Windows中的APC功能作为包装器使用。理论上,只要用户进程有权限,就可以激活软件中断,但如果APC依赖的其他参数没有正确配置,我想它只会使进程崩溃。正如帖子所说,您必须查询Windows以找出哪些APC处于活动状态。 - Tyler Durden
1
在应用程序中,int指令将切换CPU到内核模式。您需要在内核侧编写一些代码来赋予此异常一个含义。同样,硬件中断也会将CPU切换到内核模式,因此需要相同的操作。 - Alexey Frunze
现在很少使用int 2E,通常所有的系统调用都是使用syscall/sysenter指令完成的,这样更快。然而,出于传统原因,内核仍然处理int 2E。 - Igor Skochinsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接