窗口挂钩和 dll 加载
Windows Hooking and Dll Loading
我正在考虑重新设计旧的CBT窗口钩子,并且对它目前的工作方式感到有些困惑。 它的设置方式是一个 dll 处理 Windows 挂钩及其逻辑,而另一个程序在应该设置挂钩时调用该 dll。 它看起来像这样:
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
// this is the function the other program calls into
void InstallHook()
{
// hdll is this dll's address
SetWindowsHookEx(WH_CBT, HookProc, hDLL, 0);
}
然后我们有了我们的 DllMain 函数。 每当调用 hookProc 函数时,似乎都会调用该 dllmain 函数,我不理解这种行为。 我已经检查了 fdwReason,它由于 dll 进程附加事件而被调用。
每次调用 HookProc 时,此事件是如何触发的? 由于它是一个全局钩子,我认为Windows会加载dll并保留它,在需要时调用HookProc。 但从我所看到的情况来看,它就像在调用 HookProc 时加载回来一样。这是它通常的工作方式,还是代码库的另一部分可能导致这种情况?
实现
全局挂钩的 DLL 将加载到系统中触发挂钩的任何进程中。
(这正是全局钩子必须作为 DLL 实现的原因 - 以便它们可以加载到其他进程中)。
相关文章:
- 从 wxWidgets 中的.DLL加载图标
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 无法使用c++/cli包装从c#dll加载函数
- 混合延迟 dll 加载和手动调用 LoadLibraryA 是否安全?
- 无法从 dll 加载函数
- 如何设置我的dll加载,该dll取决于Env-ailiable的某些第三部分DLL
- 将本机非托管的C DLL加载到托管的C#应用中,导致DLL输出垃圾
- 无法在 Python 3.5 上导入 cv2 DLL 加载失败
- 当使用“空dllmain”的dll加载链接到DLL时,应用程序无法启动(0xc0000142)
- 如何从DLL加载的DLL链接到函数
- 如何从Java中的C DLL加载和使用结构和功能
- 我可以用具有相同功能名称的多个DLL加载元素吗?
- 窗口挂钩和 dll 加载
- CEGUI-从DLL加载资源
- 什么可能导致时间函数和 DLL 加载之间死锁
- 以下代码是如何工作的(从DLL加载动态类)
- 错误:Visual Studio中没有为opencv_world310.dll加载符号
- 使用 LoadLibraryA 的 dll 加载错误
- 从 WinAPI C 项目中的专用 DLL 加载图像资源
- 模块"MyShellExt.dll"加载失败