非托pipeWindows进程崩溃的方法?

我试图理解非托pipe用户模式Windows进程可能“崩溃”(这实际上是一个全面的术语)的方式。

以下是我所知道的方法:

  • 未处理的结构化exception
    • 默认UnhandledExceptionFilter:在Vista之前的postmortemdebugging器; WerFault在Vista +
    • 自定义UnhandledExceptionFilter:可以做任何喜欢的事情,包括安静地退出?
  • “硬”崩溃(不知道是否有这个技术术语)
    • 例如,在处理堆栈溢出时碰到堆栈溢出保护页面:操作系统只是简单地使进程消失而不留痕迹?
  • “正常”退出:
    • 例如,语言提供了自己的error handling机制,使应用程序正常closures时致命的崩溃。

这大致是正确的吗? 用户模式的Windows进程有没有其他的方法去死?

  • 未处理的异常 – 这通常是人们称之为“崩溃”
  • 损坏堆栈的异常 – 如果堆栈损坏,异常链不能被执行,则进程将被无声地终止。
  • 显式终止
    • 从另一个进程(例如TaskManager,kill.exe)调用TerminateProcess ,
    • C / C ++运行时间致命错误,/ GS栈cookie损坏等
  • 附加调试器并退出调试器而不分离
  • 控制台应用程序将终止,如果你杀死相应的conhost.exe进程