求教win32线程错误处理的有关问题

求教win32线程异常处理的问题
在看《windows核心编程》第五版,其中提到了两个问题:
(1)_finally关键字后面的termination handler是出现异常的线程用自己的线程栈执行的吗?
(2)_except关键字后面的exception handler,原文中说“Unlike termination handlers ...the exception handlers is directly executed by the system.”这是否意味着这段handler执行是用的OS自身在某处的线程栈?如果是,那么为什么线程中的所有符号在exception handler中居然是可见的?
另外,原文中提到EXCEPTION_CONTINUE_EXECUTION宏时指出,这个方法是相当危险的,因为在出现异常后某些寄存器的值可能是不正常的,(C的一个语句没有被正确地执行完),这时回复执行同一条语句可能出现问题。那么,无论是_finally或者是_except,无论使用那种异常处理命令,出现异常后寄存器的值都可能是不正常的,这时即使另起一条新的C语句并且执行仍然有可能出现问题。这样的话异常处理其不是变成了赌汇编指令了么?

------解决方案--------------------
is directly executed by the system,这是说系统让你的线程调用handler

如果是真的异常,出现异常后寄存器的值都可能是不正常的,是这样,但如果情况不是特别严重可以弹出个错误报告重启程序什么的,再轻微点可以忽略

有的异常是源代码自己甩的,来报告错误或者作为信号使用。这时就是可控的,不会寄存器的值都可能是不正常
------解决方案--------------------
如果是外部因素破坏了寄存器的值,那么执行者当然是不可能知道的。

所以当发生异常的时候是不知道哪些值是正确的,但是当转移到异常处理函数的时候,使用到的寄存器应该都会保存吧,另外,从异常处理函数返回到正常代码的时候,因为编译器老早就知道返回到哪个地址,所以它应该也知道从这个地址往下执行都需要哪些参数(包括寄存器的值),编译器应该会自己去获取值的
------解决方案--------------------
寄存器值异常主要是影响发生异常的代码的环境,你执行和那个代码无关的东西不受什么影响