需要帮助理解 _set_security_error_handler()

Posted

技术标签:

【中文标题】需要帮助理解 _set_security_error_handler()【英文标题】:Need help understanding _set_security_error_handler() 【发布时间】:2010-03-05 17:25:06 【问题描述】:

所以,我一直在阅读这篇文章:

http://msdn.microsoft.com/en-us/library/aa290051%28VS.71%29.aspx

我想定义我的自定义处理程序。但是,我不确定我是否理解机制。调用用户定义的函数后会发生什么(例如 _set_security_error_handler() 的参数)?程序之后是否仍然终止?如果是这种情况,是否可以仅终止当前线程(假设它不是应用程序的主线程)。AFAIK,每个线程都有自己的堆栈,所以如果线程的堆栈被破坏,其余的的应用程序不应受到影响。

最后,如果确实可以只终止当前的执行线程,那么这样的操作会导致哪些潜在问题?

我正在尝试在我想在我的 C# 代码中使用的非托管 C++ dll 中完成所有这些操作。

【问题讨论】:

【参考方案1】:

文档说明:

“处理完缓冲区溢出后,您应该终止线程或退出进程,因为线程的堆栈已损坏”

鉴于此声明,您似乎确实可以简单地终止线程。但是,您问这可能导致什么问题是正确的。 TerminateThread 的文档讨论了终止线程可能引起的以下问题:

如果目标线程拥有临界区,则不会释放临界区。 如果目标线程正在从堆中分配内存,则不会释放堆锁。 如果目标线程在终止时正在执行某些 kernel32 调用,则线程进程的 kernel32 状态可能不一致。 如果目标线程正在操作共享 DLL 的全局状态,则 DLL 的状态可能会被破坏,从而影响 DLL 的其他用户

请看这里:http://msdn.microsoft.com/en-us/library/ms686717(VS.85).aspx

在这种情况下唯一“安全”的做法是退出进程。

【讨论】:

以上是关于需要帮助理解 _set_security_error_handler()的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助理解透视 - 三点

帮助理解 x86 内联汇编中的 DIV 指令

python 中with方法深入理解

帮助理解 linux/tcp.h

深入理解 flex 布局以及计算_Flexbox, Layout

UITextView 还是别的啥?需要帮助理解