windows - 使用 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 中的一些保护措施吗?