思路是这样的! 系统关闭某程序的时候不是要发送某消息么! 我想使用HOOK 屏蔽向我的这个程序发送这个关闭的消息 从而达到自己杀不死的目的。。不知道这个方法可行不!! 因现在在弄一个小东西,需要用到这个功能,但是对于HOOK 的理解不够! 希望大大们帮下忙  有直接的类或 模块直接用就好了,DLL 就算了 要做的是绿色软件!

解决方案 »

  1.   

    个人认为和根消息没啥太大关系。
    禁止打开进程就可以了,一般来说就是HOOK OPENPROCESS这个API,或者说防止调用,让返回值不正确或无法返回都可以。。
    想获取OPENPROCESS的地址一般不能直接HOOK,而是在进程的4GB地址空间内搜索kernel32.DLL(之所以要搜索,原因就是不同系统他的位置不一样),然后定位OPENPROCESS函数地址,进而进行修改,VB可以办到。
    所以我觉得和关机消息没啥关系,你只要正常获取这个消息然后处理自己的操作就可以了吧。
      

  2.   

    。我。。没写过啊。
    不过例程网上应该是有的呵呵
    说白了就是HOOK OPENPROCESS 这个API,只是方法不同其他的而已。
      

  3.   

    不知道为什么我在CSDN几乎全是回贴的! 因为到现在为止 发起的5个问题没一个能完整解决的... 每个都好高分吧!,....
      

  4.   

    有直接的类或 模块直接用就好了,DLL 就算了 要做的是绿色软件!
    ==============那我可以说,这几乎是不可能的
    你这个功能要用到API Hook,不是那么好搞
    我倒是有个C++的例子,不过按你的要求恐怕用不了,而且这个东西翻译成vb也不好做(虽然我做了,但是用的是很奇怪的方法)
      

  5.   

    我给你实例吧
    加我QQ 285305530
    回答 陈辉(chenhui)
      

  6.   

    昨天晚上和群里人交流了一下 又有个新的思路!!系统不是要发关闭的消息给我的程序么! 我的程序只需要知道系统现在要关闭它就OK 了! 除非本身关闭自己 否则用一个msgbox 框 提示:本程序被系统关闭了!!  这样看来已经简单很多了吧!! 不需要屏蔽该消息代码 ! 只要达到这个目我就能让我的程序达到想要的效果了!!好象网上有相关代码! 我先找找! 这里的大虾们 若有收藏的代码给我贴出来参考下 谢谢!
      

  7.   

    TerminateProcess的时候不会发送任何消息给程序的
      

  8.   

    to chenhui530(陈辉) : 加了!
    to kmlxk(xiaoKKKK) : 谢谢你的回答有点意思! 我说说我要做的东西! 有兴趣的一起关注...最好的效果: 隐藏进程
    其次:杀不死
    再次:进程守护
    再再次: 只隐藏在任务管理内的 我从下往上开始做!
    只隐藏任务管理器内 应用程序列表 内的内容就一个属性设置就OK 了! app.title="" 就OK了进程守护:这个完全是自己的思路!2个程序,每个程序启动后都把自己的窗体标题,路径,还有句柄,写到注册表内! 同时使用一个计时间隔检测对方程序是否存在,检测方法使用findwindows API 检测对方窗体标题,若返回0 shell 对方路径...杀不死:就是这个帖子讨论的东西,今天找到了一个hookapi 控件,能达到效果,但是有缺陷,就是其过程会造成假死10来秒...主要是不明白原理。不爽,所以若有清晰的思路提供配合代码我想我会掌握这一技能的!隐藏进程,这个是最理想的方法了。 也找到了关于这个的一个DLL 。也有缺陷,第二次实验效果就无效了。大概原因是上次使用的DLL 未释放...又不懂这东西..所以也不爽!以上的东西通过冰刃都可以干掉程序... 以前记得我朋友(DELPHI的)拥有了和冰刃一样的杀不死! 冰刃也查不到的隐藏进程,那个时候API 一个都没接触到,所以现在就这样了! 现在他在深圳工作,放弃了程序了。所以那样的效果只有看慢慢掌握新的东西来完成了!! 希望大家都来这里讨论这个问题!!!
      

  9.   

    你说的"一个hookapi 控件",貌似是这个?http://www.m5home.com/soft/NoTerminateProcess.rarhttp://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=1041&page=1隐藏进程的DLL,貌似是这个?http://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=1452&page=1CIKE.......貌似......?
      

  10.   

    结合我博客反病毒之注册表的VC代码里的HOOKINFF.h那个类然后声明下面即可NTSTATUS WINAPI NtOpenProcessCallback(OUT PHANDLE ProcessHandle,
      IN ACCESS_MASK AccessMask,IN POBJECT_ATTRIBUTES ObjectAttributes,IN PCLIENT_ID ClientId)
    {
    if (ClientId.UniqueProcess==1234) return STATUS_ACCESS_DENIED;
    CHookOpenProcess->HookStatus(FALSE);
    NTSTATUS ntStatus = NtOpenProcess(ProcessHandle,AccessMask,ObjectAttributes,ClientId);
    CHookOpenProcess->HookStatus(TRUE);
    return ntStatus;
    }
      

  11.   

    就是HOOK OPENPROCESS  如果你不计成本--- 还可以HOOK 掉更多消息和API比如WM CLOSE NT****之类的
      

  12.   

    偶的东西里面有个DLL的 完整的 你调用一下应该可以用吧?