首页
社区
课程
招聘
[分享]任务管理器中右键菜单,“结束进程树”菜单的实现
发表于: 2025-2-18 11:01 2785

[分享]任务管理器中右键菜单,“结束进程树”菜单的实现

2025-2-18 11:01
2785

  发表贴子前,其实是想发一些论坛没有的内容的源代码的,比如检查系统字体(大量没有公开的API和结构体),或光驱设备等,但这些功能单独再抽出来,代码很多,很麻烦,所以最后只能选择一些简单的,分享出来目的,节省大家重复分析的时间。比如以前为了实现检测光驱序列号等,没有找到相关资料,就花了成个月时间才慢慢折腾出来。


  WIN 7“任务管理器”的结束任务菜单的实现,其实也是简单的结束进程,只是多加检测是否是核心进程,

  并检测是否为16位程序?(可能是16 位任务的任务编号),并当前系统是否32位的,如果是的,用相关API(VDMTerminateTaskWOW)。

  如果是64位的系统,当前要结束的进程是16位的,直接返回 ERROR_INVALID_PARAMETER。


任务管理器”内部是查询自已保存的自定义结构的进程信息数组。所以结束进程,他也不用实时查询进程信息。都是查询他保存的数组指针。

任务管理器”内部结束进程等操作,都有一个参数: CreateTime : LONGLONG, 通过对比这个时间来区分相同PID的不同进程。


  MyQuerySystemInformation 是 ntQuerySystemInformation 调用,我们为了单独实现出来,简单一些,我直接查询进程信息


function MyKillAllChildrenProcess(const dwTaskPid, dwProcessId : DWORD; const pSystemProcesses : PSYSTEM_PROCESS_INFORMATION; LCreateTime : LONGLONG; var StrError : WideString) : Boolean;

var

  dwNewProcessId : DWORD;

  newCreateTime : LONGLONG;

  pSystemProcesses2 : PSYSTEM_PROCESS_INFORMATION;

begin

  Result:=False;

  pSystemProcesses2:=pSystemProcesses;

  while True do

  begin  

    with pSystemProcesses2^ do

    begin

      // 父 PID 等于要结束的进程 ID

      if (InheritedFromUniqueProcessId = dwProcessId) and (UniqueProcessId <> dwProcessId) and (LCreateTime < CreateTime.QuadPart) then

      begin

      dwNewProcessId:=UniqueProcessId;

      newCreateTime:=CreateTime.QuadPart;

      MyKillAllChildrenProcess(dwTaskPid, dwNewProcessId, pSystemProcesses, newCreateTime, StrError);

        if (dwNewProcessId <> dwTaskPid) then

        begin

        Result:=MyTerminateProcessEx(dwNewProcessId, StrError);

        MyAddDebugInfo('结束进程树,子进程 PID:' + IntToStr(dwNewProcessId) + ',操作:' + C_FailOrSuccess[Result]);

        end;

      end;


      if (NextEntryOffset > 0) then

      begin

      Inc(ULONG(pSystemProcesses2), NextEntryOffset);

      end else Break; 


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-9-21 12:22 被kagayaki编辑 ,原因:
收藏
免费 13
支持
分享
最新回复 (7)
雪    币: 3595
活跃值: (6301)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
2
沙发
2025-2-18 16:37
0
雪    币: 52
活跃值: (1078)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
小马扎
2025-2-18 17:09
0
雪    币: 2361
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
感谢楼主的分享                                
2025-12-25 08:15
0
雪    币: 43
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
666
2025-12-25 09:10
0
雪    币: 488
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2025-12-25 09:14
0
雪    币: 232
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
学习
2025-12-27 17:39
0
雪    币: 3850
活跃值: (4200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
6
2025-12-27 18:03
0
游客
登录 | 注册 方可回帖
返回