首页 > 解决方案 > 使用 SetWindowsHookEx 注入的 DLL 被意外卸载

问题描述

我的程序调用SetWindowsHookEx将我的 DLL 注入单个目标进程。我的 DLL 包含一个WH_GETMESSAGE和一个WH_CALLWNDPROC钩子:

hGetMessageProcHook = SetWindowsHookEx(WH_GETMESSAGE,
        MyGetMsgProc,
        hMyDLLModule,
        dwTargetThreadId);

hCallWndProcHook = SetWindowsHookEx(WH_CALLWNDPROC,
        MyCallWndProc,
        hMyDLLModule,
        dwTargetThreadId);

我从不打电话UnhookWindowsHookEx。Windows 会自动卸载我的 DLL,在我的程序终止(无论是否干净)之后,当目标应用程序下一次发送 Windows 消息时。两个钩子都运行良好。

但是在一台运行 Windows Server 2016 的机器上,Process Explorer显示我的 DLL 有时会在没有警告的情况下被卸载,当然我的钩子不再起作用了。我以前从未见过这种情况。这是 Windows Server 中的一些保护措施吗?

标签: windowshooksetwindowshookex

解决方案


推荐阅读