大家通常是不是通过给进程堆作快照,然后比照 ExeName ,杀进程?但这样有个致命的弱点,只要别人把文件名给改了,那这样就行不同了。
  因此,在这里求教可以避免这种问题的方法!先谢过了!

解决方案 »

  1.   

    这是我看倒的一片文章希望对你有帮助!在WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗?    设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS 9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWS NT架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate 网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法。    任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32 API函数,我们来看看它的定义:BOOL TerminateProcess(
      HANDLE      hProcess; // 将被结束进程的句柄
      UINT        uExitCode; // 指定进程的退出码
    );    看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook TerminateProcess()函数,每次TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。    怎么办?我们来考察一下我的hProcess它是如何得到的。一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程,当某个程序要对这个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄,来看看它的参数:HANDLE OpenProcess(
    DWORD      dwDesiredAccess, // 希望获得的访问权限
    BOOL       bInheritHandle, // 指明是否希望所获得的句柄可以继承
    DWORD      dwProcessId // 要访问的进程ID
    );    脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess(),在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制),如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄,它如何结束我的进程呢?    至此,疑团全部揭开了。由Hook TerminateProcess()到Hook OpenProcess()的这个过程,体现了一个逆向思维的思想。其实我当初钻进了TerminateProcess()的死胡同里半天出也不来,但最终还是蹦出了灵感的火花,注意力转移到了OpenProcess()上面,实现了进程防杀。喜悦之余,将这心得体会拿出来与大家分享。
      

  2.   

    First, use spy++ or winsight32 get the window's class nameThen use findwindow(window's class name,nil)get its handleAt last use both Openprocess() and TerminateProcess() finish your work.Done...Good Luck
      

  3.   

    To deanchang(鱼):   这算什么方法,太幼稚了吧!
      

  4.   

    To luo521(黑暗中的舞者):
       
       我要杀别的进程,不是要实现进程防杀!
      

  5.   

    what?    it works good !have   a  try~
      

  6.   

    建议你看看msdn 查找Process
      

  7.   

    To deanchang(鱼):
       
       Works well???
       首先,我要中止进程,不是要隐藏窗体;其次,单凭类名如何能找到我要的进程;再次,Openprocess() 和 TerminateProcess() 都是针对进程的操作,与窗体有什么关系!
      

  8.   

    fait~
        AV_15(C.C.Q.):U'd better review the delphihelp and windowsSDK first !search 'findwindow' for keywords and findout...----------------------------------------------------------------------------------The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. HWND FindWindow(    LPCTSTR lpClassName, // pointer to class name
        LPCTSTR lpWindowName  // pointer to window name
       ); ParameterslpClassNamePoints to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpClassName; the high-order word must be zero. lpWindowNamePoints to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match. Return ValuesIf the function succeeds, the return value is the handle to the window that has the specified class name and window name.
    If the function fails, the return value is NULL. To get extended error information, call GetLastError. 
    ----------------------------------------------------------------------------------HAVE A GOOD READ AND STUDYIT IS YOUR PROBLEM NOT OURS
      

  9.   

    WHEN U GET THE HANDLE 
    try SENDMESSAGE(HANDLE,SYSCOMMAND,SC_CLOSE,0);^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      

  10.   

    IF IT IS A NON-WINDOW PROCESS WITH YOUR IDEASORRY ! I CANNOT HELP U !