You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测进程将被任务管理器终止并识别终止源进程?

检测自身进程被任务管理器终止的时机及识别源进程方案

一、检测进程即将被终止的时机

用户态方案

  • GUI程序窗口消息监听:注册回调监听WM_QUERYENDSESSION和WM_CLOSE消息。当任务管理器执行「结束任务」时,会先向目标进程发送这类消息,进程可在此阶段触发处理逻辑。但需注意:若任务管理器执行强制「结束进程」操作,系统会直接终止进程,不会发送此类消息。
  • 控制台程序信号处理:调用SetConsoleCtrlHandler注册回调函数,捕获CTRL_CLOSE_EVENT信号——该信号会在任务管理器关闭控制台窗口时触发。同样,强制终止操作无法触发此信号。

内核态方案

  • 进程终止回调驱动:编写内核驱动,调用PsSetCreateProcessNotifyRoutineEx注册回调函数。当系统内任何进程(含自身)即将被终止时,回调会被触发,可在此执行检测逻辑。这种方式能覆盖强制终止场景,但需要管理员权限,且驱动必须经过微软数字签名(Windows 10及以上版本强制要求)。

二、识别发起终止操作的源进程

用户态局限性

用户态下无法直接获取终止操作的源进程信息,因为TerminateProcess或NtTerminateProcess等终止API不会向目标进程传递调用者身份。

可行方案

  • 内核级API监控:通过内核驱动拦截NtTerminateProcess系统调用,调用时使用PsGetCurrentProcessId()获取发起终止操作的进程ID(PID),再通过PID查询进程名称(如taskmgr.exe)。这种方式能准确识别源进程,但开发和部署门槛高。
  • ETW事件追踪:启用Microsoft-Windows-Kernel-Process事件提供者,监听ProcessTerminate事件。该事件会包含被终止进程的PID和发起终止的进程PID,解析事件数据即可关联到源进程。此方法需要管理员权限,且需实时监听事件流。

关键限制说明

  • 任务管理器的「强制结束进程」操作会直接终止进程所有线程,用户态程序几乎没有时间执行检测逻辑,仅内核方案能捕获此类操作。
  • 内核驱动必须满足Windows的签名要求,否则无法在生产环境运行。
  • 若任务管理器以管理员权限运行,普通权限的用户态监控方案无法生效。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:39:58