加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 挂钩线程创建/终止

发布时间:2020-12-14 04:20:58 所属栏目:Windows 来源:网络整理
导读:是否有可能挂钩到 Windows上的线程终止? IOW,如果进程内的线程(对其他进程及其线程不感兴趣)已经终止(通常或者 – 更重要 – 强制),我希望得到通知. 或者,挂钩创建线程也可以. 基本原理:我有一个库,可以在每个线程的基础上管理一些信息(将其视为某些信息的
是否有可能挂钩到 Windows上的线程终止? IOW,如果进程内的线程(对其他进程及其线程不感兴趣)已经终止(通常或者 – 更重要 – 强制),我希望得到通知.

或者,挂钩创建线程也可以.

基本原理:我有一个库,可以在每个线程的基础上管理一些信息(将其视为某些信息的进程范围的每线程缓存).线程终止时,我必须从缓存中删除所有特定于线程的信息. [缓存关联使用线程ID实现,可能会为将来的线程重用.]

“正常”执行顺序没有问题,因为库用户将从库中分离当前线程以清除状态.如果有人杀死拥有缓存资源的线程,问题就会开始出现.

您可以使用像 Detours这样的东西来执行Win32 API的API级挂钩,例如 TerminateThread.

不过,我不明白为什么你需要这样做.听起来你需要在线程死亡时清除线程的关联缓存,以便在另一个具有相同ID的线程出现时重新使用该槽.它是否正确?

如果是这样,当你收到DLL_THREAD_ATTACH事件时,你不能只清除DllMain中的缓存关联吗?这基本上是你的新线程通知.此时,您知道自己有一个新线程,清除现有的关联缓存是否安全?

可能有效的另一种选择是thread-local storage(TLS).您可以使用Win32 API(如TlsAlloc/TlsSetValue)来存储特定于线程的信息.您还可以使用__declspec(thread)定义变量,让编译器为您管理TLS.这样,每个线程都维护自己的缓存.每个线程的代码保持不变,但数据访问是相对于线程的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读