系统启动进程的主要过程描述如下:
通常系统会在进程启动后把客户代码的入口函数(一般是运行时库的入口函数,运行时库再去调用main函数)的地址传给BaseProcessStart,从BaseProcessStart函数中进入到客户代码,而BaseProcessStart会注册一个处理客户代码的为处理异常的异常处理器(通常是ExitThread)。类似的BaseThreatStart处理线程的异常。
运行时库也会像启动进程函数一样对所调用的main函数加上一个未处理异常的保护,对于main中的异常调用_XcptFilter异常过滤器使用C风格的信号处理机制以兼容UNIX系统的软件。
UnhandledExceptionFilter描述了处理所有用户异常的流程,第一次调试子系统不处理,进入到UnhandledExceptionFilter检查是否已经处理,若未处理检查是否为调试状态,若为调试状态重新分发给调试器(第二次),再次进入到UnhandledExceptionFilter查看异常处理器列表,还是没处理就调用错误提示,启动JIT调试器等动作。可以配置注册表等方式使用DW工具生成转储文件,输出错误日志等动作。