我在“Windows任务管理器”里点击“结束进程”,想用C#实现不能结束的目的;就像点击“WINLOGIN.EXE”--“结束进程”,系统会提示“该进程为关键系统进程,任务管理器无法结束进程”;请问用C#应该怎么是想呢?
拜谢!!

解决方案 »

  1.   

    buller:声明一下啊,我不是想实现什么坏目的,仅仅是为了开发一个小监控程序
      

  2.   

    这个很简单啊——挂钩API
    任务管理器结束进程是通过调用API:TerminateProcess实现的
    你只需要挂钩对这个API的调用就可以了
    我现在放假回家,没有编程工具,你到网上查一下挂钩API就行了
    基本上有两个方法,其一是修改导入表,其二是修改函数的前5个字节,让其跳转到自定义的函数
      

  3.   

    是组织任务管理器运行
    还是组织任务管理器结束指定进程?前者可以建立个新线程,每隔一定时间来获取系统当前是否有taskmgr,如果有就结束后者:
    一般常用的保护方法有几种: 
    1,设置进程属性为隐藏。这种只能骗一般的人; 
    2,API钩子勾住任务管理器里的TermiteProcess进程; 
    3,API全局钩子够上面的那个进程,这样就不怕它用任务管理器之外的工具杀你了; 
    4,勾住SSDT的函数,如果用卡巴,就有点麻烦,因为它也是用这招,就看谁先取得了。 
    5,写中断门; 
    6,写内核态驱动…… 
    …… 以上方法,从上往下,一个比一个有效。如果你到了第四层,杀毒软件也未必能干掉你的进程(1-6以上转自博客园)
      

  4.   

    回复CsToD,shiweifu:首先谢谢两位的回答,我觉定用挂钩API来实现,可是不知到怎么实现,网上搜不到用C#实现的,希望能得到你们的帮助,谢谢!!
      

  5.   

    好像是在winpro这个方法里实现
      

  6.   

    挂钩API用C#怎么实现啊,网上很多资料都是C++/VB的急死了,请高手帮忙啊!!!!
      

  7.   

    [DllImport("kernel32.dll", SetLastError=true)] static extern int TerminateProcess ( int hProcess, int uExitCode)
      

  8.   

    qlzf11140820 :能不能在贴一些代码出来,我没有编过API的代码,对这个很陌生、、、、
    谢谢了!!!
      

  9.   

    还有,楼主连API都不懂,就更别想去做挂钩API这么难的动作了,我现在上网不方便,3月份的时候给你写一下(如果你等得及)
      

  10.   

    CsToD:就是不懂才学的,不懂不代表没有判断能力,希望你不要打消别人的积极性;
    或许你很厉害,但不代表你就有权利这样说别人!
    不管别人回答的正确与否,但能够回答就能给人希望!!
      

  11.   

    在GOOGLE上面搜索 hook Terminateprocess 一大堆资料...楼主只需要静下心来仔细理解一下代码,很容易用C#实现的.
      

  12.   

    http://blog.csdn.net/panpanloveruth/archive/2007/06/20/1659236.aspx
      

  13.   

    非常感谢hyblusea,我仔细学习研究一下。
    很敬佩你这样的人呵呵!!
      

  14.   


    不是吧,MVP也在乱讲?需要用的是“挂钩API”的技术,跟安装钩子没关系
    钩子是用于拦截消息的,挂钩API是拦截对API的调用的,两者天壤之别。
      

  15.   

    CsToD:拦截API调用不是拦截消息的一种吗?我查了很多资料都是用钩子啊。而且钩子有很多类型,有些用C++完成此功能的代码也安装了钩子。
      

  16.   

    拦截API调用不是拦截消息的一种吗?
    ......
    还是那句话——勿在浮云筑高台从基础做起
      

  17.   

    1. ring3下 一般情况,挂一个全局钩子是为了将拦截API的DLL注入到触发进程中去,这一步不是必须的。将DLL注入到目标进程的任何方法都可以用来实现API拦截,而不一定需要HOOK,这个概念不要混淆了.2. 拦截API一般需要一个 win32 dll用来处理拦截过程(当然也不是必须的)C# 托管模式下你可以做挂钩 或者其他类型的注入,但是没法做这个WIN32 DLL 3.楼主可以再看看相关的概念,有问题大家来讨论
      

  18.   

    我自己先顶一下,API确实不简单,需要时间来学习啊呵呵
      

  19.   

    LZ,API需要时间来慢慢的积累。CSToD的话也许有点过,但是他的想法是对的,LZ,HOOK方面的东西需要积累到了一定的层次以后再去弄的。我的建议,先巩固基础,然后看看MSDN,当你的积累到了一定的程度,就会发现原来这些东西都其实是很简单明了的。另外对于hook我之前也有看过,不过是很久之前,现在没看过了,抽空把hook看了。其实你要挂接API的话,使用hook可以实现,具体选择的hook类型,不记得了
      

  20.   

    我现在用FindWindow函数查看Windows任务管理器是否打开,用FindWindow(lpClassName,"Windows任务管理器"),请问
    这里的lpClassName应该是什么?我用FindWindow(null,"Windows任务管理器")不行
      

  21.   

    还是自己顶一下吧,上边那个问题已经解决了,用FindWindow(null,"Windows 任务管理器")
      

  22.   

    呵呵,写成"Windows服务"吧.这种要求的,一般都是做成服务程序的.
      

  23.   

    程序运行时屏蔽任务管理器就行了///
    //屏蔽任务管理器
    ///
     private void LockScreen_Load(object sender, EventArgs e)
            {
                try
                {
                    RegistryKey r = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
                    r.SetValue("DisableTaskMgr", "1");  //屏蔽任务管理器 
                }
                catch
                {
                    RegistryKey r = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
                    r.SetValue("DisableTaskMgr", "0");
                } 
            }
    ///
    //恢复任务管理器
    ///
      private void LockScreen_FormClosing(object sender, FormClosingEventArgs e)
            {
                RegistryKey r = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
                r.DeleteValue("DisableTaskMgr");//恢复任务管理器
            }
      

  24.   

    不知道能不能真的阻止,不过你可以模似一个假象,弹出任务管理器时结束进程都有一个确认对话框,你把该对话替换掉,就是不让用户去点,自己默认为否,然后自己自定义弹出一个框出来
    既然你都已经用FindWindow查找到了任务管理器的句柄,再用:msg=FindWindow("#32770", "任务管理器警告")来获取消息框的句柄,如果返回值不等0的时候说明显示了消息框,然后FindWindowEx(msg, FindWindowEx(hMsg, 0, "Static", ""), "Static", vbNullString)获得原来消息提示的句柄,GetWindowText 获取消息句柄返回的文本,SendMessage来发送一个消息,关闭原来的消息框 ,这时弹出一个自己的对话框出来
      

  25.   

    全局钩子,需要使用C++或者能够编译出本地代码的语言(如delphi)来写dll,至于加载则什么语言都可以。网上很多代码,推荐使用MS的Detours来写,编写方便。
    另外SSDT Hook实现起来也比较简单,不过大多数杀软也有使用。
      

  26.   

    写流氓软件还是别用.net了,.net根本不适合做这种工作,纯虚拟机里运行的代码根本没办法对宿主操作系统运行时进行须改。
      

  27.   

    看来你们都没写过windows服务程序..
      

  28.   

    把你的进程写成系统进程就可以,写成Server进程就可以。我用VB做过。不能结束
      

  29.   

    to cstoD:三月份快过去了,你说给我写一下程序,写好了吗?对于你来说可能很简单,对我来说太难了,先谢谢了
      

  30.   

    正如5楼的方法
    挂钩API,首先要注入一个dll,这个dll必须用C++写
    所以完全用c#基本是无法实现的
    我原来只注意到是要阻止结束进程,没注意要用C#写,抱歉