教程参考自:https://www.bilibili.com/video/av26193169/?p=3
代码地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT-KillProcess

1. 概述

我们常常遇到这种棘手的情况,使用任务管理器或一些应用程序无法将某一进程杀死。出现这种现象的原因一般是因为权限不够,若我们在驱动层调用ZwTerminateProcess来杀死这些进程,那么成功率将大大增加。

2. 驱动编写

2.1 初始化变量

Windows驱动学习(三)-- 杀死进程

2.2 DrvierEntry

在上一章,我们发现DeviceCreate和DeviceClose等函数怎么长得一模一样?我们可不可以进行代码上的优化,使得代码看起来更简洁?答案是可以的,我们这里使用一个循环将这些设备函数都统一设置为DeviceApi。
Windows驱动学习(三)-- 杀死进程

2.3 DeviceApi

而DeviceApi的代码跟之前的一样,就是些常规工作。
Windows驱动学习(三)-- 杀死进程

2.4 DeviceIoctl

DeviceIoctl被单独拿出来定义了,因为我们这里需要用该函数来做杀死进程的主要功能。
Windows驱动学习(三)-- 杀死进程

2.5 KillProcess

Windows驱动学习(三)-- 杀死进程

2.6 DriverUnload

最后,不要忘了在驱动卸载函数中将符号与设备删除。
Windows驱动学习(三)-- 杀死进程

3.应用编写

若应用层的程序想让驱动层执行KillProcess,就必须传递约定好的控制码0x800。
Windows驱动学习(三)-- 杀死进程

4. 测试

4.1 加载驱动

Windows驱动学习(三)-- 杀死进程

4.2 创建一个测试进程

我们创建一个pid为3684的计算器作为演示。
Windows驱动学习(三)-- 杀死进程

但我们在应用程序中输入要杀死的进程PID 3684时,该pid被传递给了驱动,后者将计算器进程成功杀死。
Windows驱动学习(三)-- 杀死进程

4.3 卸载驱动

Windows驱动学习(三)-- 杀死进程

这里不知道除了什么bug,当我再次想运行驱动时却报错了,哪位大牛知道的不妨告诉我一下_
Windows驱动学习(三)-- 杀死进程

相关文章:

  • 2022-02-05
  • 2021-06-07
  • 2022-12-23
  • 2021-12-31
  • 2021-08-16
猜你喜欢
  • 2022-01-03
  • 2022-03-04
  • 2022-12-23
  • 2022-12-23
  • 2021-11-26
  • 2021-12-24
  • 2021-11-04
相关资源
相似解决方案