教程参考自:https://www.bilibili.com/video/av26193169/?p=3
代码地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT-KillProcess
1. 概述
我们常常遇到这种棘手的情况,使用任务管理器或一些应用程序无法将某一进程杀死。出现这种现象的原因一般是因为权限不够,若我们在驱动层调用ZwTerminateProcess来杀死这些进程,那么成功率将大大增加。
2. 驱动编写
2.1 初始化变量
2.2 DrvierEntry
在上一章,我们发现DeviceCreate和DeviceClose等函数怎么长得一模一样?我们可不可以进行代码上的优化,使得代码看起来更简洁?答案是可以的,我们这里使用一个循环将这些设备函数都统一设置为DeviceApi。
2.3 DeviceApi
而DeviceApi的代码跟之前的一样,就是些常规工作。
2.4 DeviceIoctl
DeviceIoctl被单独拿出来定义了,因为我们这里需要用该函数来做杀死进程的主要功能。
2.5 KillProcess
2.6 DriverUnload
最后,不要忘了在驱动卸载函数中将符号与设备删除。
3.应用编写
若应用层的程序想让驱动层执行KillProcess,就必须传递约定好的控制码0x800。
4. 测试
4.1 加载驱动
4.2 创建一个测试进程
我们创建一个pid为3684的计算器作为演示。
但我们在应用程序中输入要杀死的进程PID 3684时,该pid被传递给了驱动,后者将计算器进程成功杀死。
4.3 卸载驱动
这里不知道除了什么bug,当我再次想运行驱动时却报错了,哪位大牛知道的不妨告诉我一下_