是否有可能在Windows上捕获另一个进程的未处理的exception?

一个进程是否有可能捕获系统上另一个进程的未处理exception

如果可能的话,在哪种情况下可能? 如果第二个过程不是由第一个过程启动的话,是否有可能?

我主要是在寻找一个关于native c ++的答案。

本机(AKA标准)C ++没有多个进程的真正概念,也没有办法捕捉跨进程边界抛出的异常。 而且没有办法在这样的边界上抛出异常,那就来吧。

Windows异常:结构化异常处理(SEH)是每个线程。 在这个过程中的另一个线程可能会操纵目标线程的堆栈来插入它自己的处理程序,但这很难得到正确的(特别是在x86上缺乏一致的调用约定)。 另一个进程可以注入一个DLL和线程进程来做到这一点。 这将是很难得到正确的,尤其是没有紧密结合目标进程的细节(什么函数被称为和如何)。

再次想到调试器可以做到这一点,所以Win32调试器API必须具备这个功能。 进程可以调试同一会话中的其他进程(具有较低或相同的完整性级别),或者如果用户具有“调试进程”特权的任何进程。

是。 马特Pietrek解释如何 。 向下滚动到“VectoredExceptionHandling是一个干净的,容易扩展的方式来查看所有异常”部分。 还有一些示例代码。