zoukankan      html  css  js  c++  java
  • "HK"日常之冻结术

    在那遥远的MSDN上,有那么一只被隐藏的函数,它掌管着Windows内核威力不容小觑~

    本教程仅作为学习研究,禁止其他用途!

    富强、民主、文明、和谐, 自由、平等、公正、法治, 爱国、敬业、诚信、友善

    一、准备工作

    首先我们需要准备4只dll:需要引用using System.Runtime.InteropServices;

     1 [DllImport("ntdll.dll")]
     2         private static extern uint NtSuspendProcess([In] IntPtr processHandle);//冻结术
     3 
     4         [DllImport("ntdll.dll")]
     5         private static extern uint NtResumeProcess([In] IntPtr processHandle);//解冻术
     6 
     7         [DllImport("kernel32.dll", SetLastError = true)]
     8         private static extern IntPtr OpenProcess(
     9             uint desiredAccess,
    10             bool inheritHandle,
    11             int processId);//打开线程并获取Handle
    12 
    13         [DllImport("kernel32.dll", SetLastError = true)]
    14         [return: MarshalAs(UnmanagedType.Bool)]
    15         private static extern bool CloseHandle([In] IntPtr handle);//释放之前的OpenProcess

    接下来我们把它封装起来

     1  public static void SuspendProcess(int processId)
     2         {
     3             IntPtr hProc = IntPtr.Zero;
     4             hProc = OpenProcess(0x800, false, processId);
     5             if (hProc != IntPtr.Zero) { 
     6                 NtSuspendProcess(hProc);
     7                 CloseHandle(hProc);
     8             }
     9         }
    10 
    11         public static void ResumeProcess(int processId)
    12         {
    13             IntPtr hProc = IntPtr.Zero;
    14             hProc = OpenProcess(0x800, false, processId);
    15             if (hProc != IntPtr.Zero){
    16                 NtResumeProcess(hProc);
    17                 CloseHandle(hProc);
    18             }
    19         }

    二、编码工作

    以C#WinForm为例,将这段代码放在Form的Loaded或Button_Click事件里

    var data = Process.GetProcesses();//获取所有进程
    foreach (var p in data) { try { if (p.ProcessName != "Freeze") //注意不要把自己冻结了!!此处“Freeze”可以换成你的进程名,一般就是项目名称
                                ProcessMgr.SuspendProcess(p.Id);//[滑稽]冻结大法
                             } catch { } }

     三、运行调试

    千万不能在VisualStudio里调试

    千万不能在VisualStudio里调试

    千万不能在VisualStudio里调试

    因为程序也会冻结VS,而VS关联这程序,所以冻结vs自己也动不了了

    但如果你想在vs里调试可以在上方加入if判断

    前方高能

    好了,我要关电脑了。。。

    感兴趣的小伙伴可以自己下载来玩一玩:https://github.com/TwilightLemon/Freeze

  • 相关阅读:
    DRY原则和Shy原则
    GEO LBS服务
    Intellij IDEA转换类图、时序图
    使用HttpMessageConverter实现HTTP的序列化和反序列化
    通过@Valid注解对请求主体中的参数进行校验
    Java-Enumeration ( 枚举类)
    SPI的实现原理
    python批量获取gitlab里面所有项目的代码
    浙江省高等学校教师教育理论培训上机考试小程序设计架构
    springboot~使用freemaker模版进行部署
  • 原文地址:https://www.cnblogs.com/TwilightLemon/p/9310896.html
Copyright © 2011-2022 走看看