驱动保护 -- 通过PID保护指定进程
一、设计界面
1、添加一个编辑框输入要保护的进程PID,并添加两个按钮,一个保护进程,一个解除保护

2、右击编辑框,添加变量

二、驱动层代码实现
1、声明一个受保护的进程PID数组
static UINT32 受保护的进程PID[256] = { 0 };
2、添加PID到保护函数
void 添加PID到保护(UINT32 pid)
{for (size_t i = 0; i < 256; i++){if (受保护的进程PID[i]==0|| 受保护的进程PID[i]==pid){受保护的进程PID[i] = pid;break;}}
}
3、删除PID保护函数
void 删除PID保护(UINT32 pid)
{for (size_t i = 0; i < 256; i++){if (受保护的进程PID[i] == pid){受保护的进程PID[i] = 0;break;}}
}
4、清空PID保护函数
void 清空PID保护()
{memset(受保护的进程PID, 0, sizeof(受保护的进程PID));
}
5、PID是否受保护函数
BOOLEAN PID是否受保护(UINT32 pid)
{for (size_t i = 0; i < 256; i++){if (pid==0){return 0;}if (受保护的进程PID[i] == pid){return TRUE;}}return FALSE;
}
6、将函数在头文件声明一下
void 添加PID到保护(UINT32 pid);
void 删除PID保护(UINT32 pid);
void 清空PID保护();
int PID是否受保护(UINT32 pid);
7、获取PID
UINT32 当前进程PID = PsGetCurrentProcessId();HANDLE PID = PsGetProcessId((PEPROCESS)OperationInformation->Object);if (PID是否受保护(PID)==1){DbgPrint("nxyn:sys pEPROCESS=%p ", OperationInformation->Object);DbgPrint("nxyn:被保护的PID:%d \n", PID);ACCESS_MASK 获取权限 = OperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess;ACCESS_MASK 获取新权限 = OperationInformation->Parameters->CreateHandleInformation.DesiredAccess;//将句柄权限清零//让结束进程的功能失效获取权限 &= ~PROCESS_TERMINATE;获取权限 &= ~PROCESS_VM_OPERATION;获取权限 &= ~PROCESS_VM_WRITE;获取权限 &= ~PROCESS_VM_READ;//返回我们修改过的权限 OpenProcessOperationInformation->Parameters->CreateHandleInformation.DesiredAccess = 获取权限;DbgPrint("nxyn:获取权限=%X 获取新权限=%X", 获取权限, 获取新权限);}
8、添加控制码
#define irp添加PID到保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define irp删除PID保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED,FILE_ANY_ACCESS)
9、通过控制码实现添加和删除保护
else if (控制码== irp添加PID到保护){IRP添加PID到保护(IRP指针);}else if (控制码 == irp删除PID保护){IRP删除PID保护(IRP指针);}
10、添加和删除的代码具体实现
void IRP添加PID到保护(PIRP IRP指针)
{ int* 缓冲区 = (int*)IRP指针->AssociatedIrp.SystemBuffer;int 计算结果 = 0;if (缓冲区){UINT32* pPID = (UINT32*)缓冲区;UINT32 pid = pPID[0];添加PID到保护(pid);IRP指针->IoStatus.Information = sizeof(int);//设置操作的字节数IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求KdPrint(("nxyn:PID已添加到保护"));}
}void IRP删除PID保护(PIRP IRP指针)
{int* 缓冲区 = (int*)IRP指针->AssociatedIrp.SystemBuffer;int 计算结果 = 0;if (缓冲区){UINT32* pPID = (UINT32*)缓冲区;UINT32 pid = pPID[0];删除PID保护(pid);IRP指针->IoStatus.Information = sizeof(int);//设置操作的字节数IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求KdPrint(("nxyn:PID已删除保护"));}
}
三、应用层代码实现
1、添加控制码
#define irp添加PID到保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define irp删除PID保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED,FILE_ANY_ACCESS)
2、双击保护进程按钮
UpdateData(TRUE);//将窗口的数据更新到变量char 缓存区[256];sprintf_s(缓存区, "nxyn:应用程序保护PID控制码为%X\n", irp添加PID到保护);OutputDebugStringA(缓存区);UINT32 输入数据 = m_PID;int 返回数据;DWORD 实际读取字节数;DeviceIoControl(设备句柄,irp添加PID到保护,&输入数据,sizeof(输入数据),&返回数据,sizeof(返回数据),&实际读取字节数,NULL);
3、双击解除进程保护按钮
UpdateData(TRUE);//将窗口的数据更新到变量char 缓存区[256];sprintf_s(缓存区, "nxyn:应用程序删除PID控制码为%X\n", irp删除PID保护);OutputDebugStringA(缓存区);UINT32 输入数据 = m_PID;int 返回数据;DWORD 实际读取字节数;DeviceIoControl(设备句柄,irp删除PID保护,&输入数据,sizeof(输入数据),&返回数据,sizeof(返回数据),&实际读取字节数,NULL);
四、测试应用

相关文章:
驱动保护 -- 通过PID保护指定进程
一、设计界面 1、添加一个编辑框输入要保护的进程PID,并添加两个按钮,一个保护进程,一个解除保护 2、右击编辑框,添加变量 二、驱动层代码实现 1、声明一个受保护的进程PID数组 static UINT32 受保护的进程PID[256] { 0 }; 2…...
spring常用注解(全)
一、前言 Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大…...
Axios请求(对于ajax的二次封装)——Axios请求的响应结构、默认配置
Axios请求(对于ajax的二次封装)——Axios请求的响应结构、默认配置知识回调(不懂就看这儿!)场景复现核心干货axios请求的响应结构响应格式详解实际请求中的响应格式axios请求的默认配置全局axios默认值(了解…...
(三)【软件设计师】计算机系统—CPU习题联系
文章目录一、2014年上半年第1题二、2014年下半年第3题三、2017年上半年第1题四、2009年下半年第1题五、2010年上半年第5题六、2011年下半年第5题七、2011年下半年第6题八、2012年下半年第1题九、2019年上半年第1题十、2010年上半年第1题十一、2011年上半年第1题十二、2016年下半…...
win下配置pytorch3d
一、配置好的环境:py 3.9 pytorch 1.8.0 cuda 11.1_cudnn 8_0 pytorch3d 0.6.0 CUB 1.11.0 你可能觉得pytorch3d 0.6.0版本有点低,但是折腾不如先配上用了,以后有需要再说。 (后话:py 3.9 pytorch 1.12.1 cuda …...
JS字符串对象
、 JS字符串对象 1.1 内置对象简介 在 JavaScript 中,对象是非常重要的知识点。对象可以分为两种:一种是“自定义对象”外一种是“内置对象”。自定义对象,指的是需要我们自己定义的对象,和“自定义函数”是一些道理;内置对象,…...
Linux系统对文件及目录的权限管理(chmod、chown)
1、身份介绍 在linux系统中,对文件或目录来说访问者的身份有三种: ①、属主用户,拥有者(owner)文件的创建者 ②、属组用户,和文件的owner同组的用户(group); ③、其他用…...
半透明反向代理 (基于策略路由)
定义 半透明反向代理一般是指 代理本身对于客户端透明,对于服务端可见。 从客户端视角看,客户端访问的还是服务端,客户端不知道代理的存在。 从服务端视角看,服务端只能看到代理,看不到真实的客户端。 示意图 客户端…...
课前测5-超级密码
目录 课前测5-超级密码 程序设计 程序分析 课前测5-超级密码 【问题描述】 上次设计的“高级密码”被你们破解了,一丁小朋友很不服气! 现在,他又设计了一套更加复杂的密码,称之为“超级密码”。 说实话,这套所谓的“超级密码”其实也并不难: 对于一个给定的字符…...
QML控件--Menu
文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数一、控件基本信息 二、控件使用 import QtQuick 2.10 import QtQuick.Window 2.10 import QtQuick.Controls 2.3ApplicationWindow{visible: true;width: 1280;height: 720;Button {id: fileButtontext: "Fi…...
002:Mapbox GL更改大气、空间及星星状态
第002个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中更改大气、空间及星星状态 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共71行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:…...
2022年第十三届蓝桥杯题解(全)C/C++
A题就是一个简单的进制转化,代码实现如下: #include <bits/stdc.h>using namespace std;const int N 1e5 10;int main() {int x 2022;int a 1;int res 0;while(x) {res (x % 10) * a;a a * 9;x / 10;}cout << res;return 0; } B题有…...
【cmake学习】find_package 详解
find_package 主要用于查找指定的 package,主要支持两种搜索方法: Config mode:查找 xxx-config.cmake或 xxxConfig.cmake的文件,如OpenCV库的OpenCVConfig.cmakeModule mode:查找Findxxx.cmake文件,如Ope…...
WEB攻防-通用漏洞PHP反序列化POP链构造魔术方法原生类
目录 一、序列化和反序列化 二、为什么会出现反序列化漏洞 三、序列化和反序列化演示 <演示一> <演示二> <演示二> 四、漏洞出现演示 <演示一> <演示二> 四、ctfshow靶场真题实操 <真题一> <真题二> <真题三> &l…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK里的图像处理库进行图像转换(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK进行图像转换(C)Baumer工业相机Baumer工业相机的SDK里图像格式转换的技术背景Baumer工业相机通过BGAPI SDK进行图像转换调用BGAPI SDK的图像转换库ImageProcessor调用BGAPI SDK建立图像调用BGAPI SDK转换图像…...
JD开放平台接口(获得JD商品详情, 按关键字搜索商品,按图搜索京东商品(拍立淘), 获得店铺的所有商品,获取推荐商品列表, 获取购买到的商品订单列表)
参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台:淘宝,京东等, API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写…...
上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指向上震荡反弹,创业板指一度跌近1%,黄白二线大幅背离。…...
C/C++ 玩转StoneValley库:从入门到精通
C/C 玩转StoneValley库:从入门到精通引言(Introduction)StoneValley库简介(Overview of StoneValley Library)为什么要学习StoneValley库(Why Learn StoneValley Library in C)StoneValley库安装…...
CentOS7-部署Tomcat并运行Jpress
1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8,配置服务启动脚本,部署jpress应用。1、简述静态网页和动态网页的区别 静态网页: 请求响应信息,发给客户端进行处理,由浏览器进…...
菜鸟程序员的3年心酸逆袭之旅!今天你对我爱搭不理,明天我让你高攀不起!
多年前我以一个菜鸟的身份 进入了一家创业公司 我原本以为公司是这样的 但是实际上是这样的 我进去时 我们部门除开部门老大还有我 也只有我 所以我就这样开始了我的程序员生涯 开始了我的苦逼技术 公司是做电商网站的 因为我是一个菜鸟 所以我接到的第一个任务 就是做一个网页…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
