所以,我一直在读这篇文章:
http://msdn.microsoft.com/en-us/library/aa290051%28VS.71%29.aspx
我想定义我的自定义处理程序。但是,我不确定我是否理解了这些机制。在调用用户定义的函数(例如_set_security_error_handler()的参数)之后会发生什么?程序是否仍然在之后终止?如果是这种情况,是否有可能只终止当前线程(假设它不是应用程序的主线程).AFAIK,每个线程都有自己的堆栈,所以如果一个线程的堆栈被破坏,其余的应用程序不应受到影响。
最后,如果确实只能终止当前的执行线程,那么这样的行为会导致什么潜在的问题?
我正在尝试在我想要在C#代码中使用的非托管C ++ dll中完成所有这些。
答案 0 :(得分:1)
文档说明:
“处理缓冲区溢出后,你应该终止线程或退出进程,因为线程的堆栈已损坏”
鉴于此声明,您似乎确实可以简单地杀死该线程。但是,你问这可能导致什么问题是正确的。 TerminateThread的文档讨论了杀死线程可能产生的以下问题:
见这里:http://msdn.microsoft.com/en-us/library/ms686717(VS.85).aspx
在这种情况下唯一要做的“安全”事情就是退出这个过程。