gpt4 book ai didi

c++ - 如何确保即使在异常终止时也会调用 UnhookWindowsHookEx?

转载 作者:可可西里 更新时间:2023-11-01 12:41:33 25 4
gpt4 key购买 nike

不幸的是,MSDN 对此还不够清楚。我正在编写一个使用全局 Hook 的程序,我担心如果程序异常终止(崩溃、被用户终止等)会发生什么。

  1. Windows 是否会在进程终止时自动解除进程安装的全局 Hook ?

  2. 如果不是,是否可以在另一个进程中调用UnhookWindowsHookEx()来释放钩子(Hook)? (我正在考虑在 Hook 线程中执行此操作,如果它检测到安装程序进程已死。)

  3. 如果答案是否定的,那么在安装程序终止时保持全局 Hook 处于事件状态不是很危险吗?处理这种情况的标准方法是什么?

  4. 我在 MSDN 中了解到,UnhookWindowsHookEx() 不会释放在其他进程中加载​​的 dll,但它没有说明何时释放 dll。 This article in CodeProject似乎表明当第一条消息到达 Hook 线程时,dll 未映射(在相应的进程中),因此它大约在 UnhookWindowsHookEx() 调用之后。是真的吗?

谢谢。

最佳答案

  1. 是的,当一个进程终止时,系统会在它之后进行清理——所有句柄都被隐式关闭。
  2. 不,不是,而且您也不需要。
  3. (是,不是,不是,不是)
  4. 我不明白为什么这里涉及的另一个进程中加载​​了一个 DLL。 (编辑: 我最初考虑的是一个系统范围的 Hook ,例如 CBTProc——如果您的 Hook 是针对每个进程的,则可能会有所不同)如果您正在处理类似于 @ 中指示的链接汉斯的评论,你已经将自己的 DLL 注入(inject)到目标进程中,然后你应该在你的 DLL 中添加卸载钩子(Hook)的功能,而不是将它的正确操作绑定(bind)到你的应用程序。 (即,如果在 DLL 内部将消息发送回您的应用程序失败,那么您的 DLL 应该决定自行卸载) .

关于c++ - 如何确保即使在异常终止时也会调用 UnhookWindowsHookEx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com