全局钩子如何只加载特定几个程序

sin6007 2011-08-30 09:06:21
我设置了一个全局消息钩子,想钩住几个特定程序,在DllMain里的DLL_PROCESS_ATTACH里做判断,如果该模块是我想要钩的程序,则返回TRUE,如果不是则返回FALSE,这样就不加载我们的DLL,也可以为系统全局钩子减负。但是如果我返回FALSE,系统好像就卡死了。请问如何来做才是对的。
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
// 判断1
if (....)
return TRUE;
// 判断2
if (....)
return TRUE;
return FALSE;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eg980 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 buyong 的回复:]

这个函数属于PSAPI.DLL,当你的dll初始化时,可能PSAPI.DLL还没被初始化,所以就卡住了。
解决办法不知道
[/Quote]
这个不会,你的DLL初始化的时候,PSAPI.DLL入口早就调用、初始化完了的。
卡死应该是消息处理流程的问题,你如果换个类型的钩子,比如WH_KEYBOARD,就可能不会出现卡死的情况——但产生键盘消息时,接收消息的进程如果也不在你要返回TRUE之列,也许也会卡死。
buyong 2011-08-30
  • 打赏
  • 举报
回复
这个函数属于PSAPI.DLL,当你的dll初始化时,可能PSAPI.DLL还没被初始化,所以就卡住了。
解决办法不知道
sin6007 2011-08-30
  • 打赏
  • 举报
回复
调用了GetModuleBaseName来取得加载程序的名称。然后if(....)是字符串的判断。
buyong 2011-08-30
  • 打赏
  • 举报
回复
case DLL_PROCESS_ATTACH:
{
// 判断1
if (....)
return TRUE;
// 判断2
if (....)
return TRUE;
return FALSE;
}
我觉得不是返回FALSE就卡死了,而是程序根本没走到return FALSE就卡死了。
if代码是怎么写的?
Johnyxc 2011-08-30
  • 打赏
  • 举报
回复
是否是DllMain还没有走完,你就return的原因(没有用过,你参考一下)

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧