C\C++各路高手以及操作系统专家请进来杀死这个进程

通常情况下编写一个程序,可以点击关闭按钮正常结束程序,也可以使用任务管理器结束任务,还可以使用taskkill等命令杀死进程,实在都不行也可以直接重启计算机。

但是,这些方法真的都管用吗?我觉得不一定,今天晚上闲着没事,想写一个杀不死的程序。设计思路如为写三个程序ProcessMain、Process1和Process2,相互保护,具体如下:

  • 1、按照平时的方法写一个程序ProcessMain实现你的功能;
  • 2、再写一个程序Process1保护ProcessMain和Process2都不被杀掉;
  • 3、再写一个程序Process2保护Process1不被杀掉;

画个草图,有助理解:

以上是该程序的主要思想,具体代码如下:

(为了简化程序,将ProcessMain设置为Windows自带的计算器“calc.exe”)

Process1:

#include <windows.h>
#include <tlhelp32.h> //进程快照函数头文件
#include <stdio.h>  

bool getProcess(const char *procressName)               //此函数进程名不区分大小写
{
	char pName[MAX_PATH];                               //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
	strcpy(pName,procressName);                         //拷贝数组
	CharLowerBuff(pName,MAX_PATH);                      //将名称转换为小写
	PROCESSENTRY32 currentProcess;                      //存放快照进程信息的一个结构体
	currentProcess.dwSize = sizeof(currentProcess);     //在使用这个结构之前,先设置它的大小
	HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照  

	if (hProcess == INVALID_HANDLE_VALUE)
	{
		printf("CreateToolhelp32Snapshot()调用失败!\n");
		return false;
	}  

	bool bMore=Process32First(hProcess,¤tProcess);        //获取第一个进程信息
	while(bMore)
	{
		CharLowerBuff(currentProcess.szExeFile,MAX_PATH);       //将进程名转换为小写
		if (strcmp(currentProcess.szExeFile,pName)==0)          //比较是否存在此进程
		{
			CloseHandle(hProcess);                              //清除hProcess句柄
			return true;
		}
		bMore=Process32Next(hProcess,¤tProcess);          //遍历下一个
	}  

	CloseHandle(hProcess);  //清除hProcess句柄
	return false;
}  

int main()
{  

	while(1)
	{
		if (!getProcess("calc.exe"))		 //如果被保护的进程不存在(被杀死),则启动该进程
		{
			system("start calc.exe");
		}
		if (!getProcess("process2.exe"))	//如果保护进程process2不存在,则启动该进程
		{
			system("start process2.exe");
		}
		Sleep(10);						//允许你睡一会,但不能“睡着”,要看好被保护的进程
	}
	system("pause");
	return 0;
}  

Process2:

#include <windows.h>
#include <tlhelp32.h> //进程快照函数头文件
#include <stdio.h>  

bool getProcess(const char *procressName)               //此函数进程名不区分大小写
{
	char pName[MAX_PATH];                               //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
	strcpy(pName,procressName);                         //拷贝数组
	CharLowerBuff(pName,MAX_PATH);                      //将名称转换为小写
	PROCESSENTRY32 currentProcess;                      //存放快照进程信息的一个结构体
	currentProcess.dwSize = sizeof(currentProcess);     //在使用这个结构之前,先设置它的大小
	HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照  

	if (hProcess == INVALID_HANDLE_VALUE)
	{
		printf("CreateToolhelp32Snapshot()调用失败!\n");
		return false;
	}  

	bool bMore=Process32First(hProcess,¤tProcess);        //获取第一个进程信息
	while(bMore)
	{
		CharLowerBuff(currentProcess.szExeFile,MAX_PATH);       //将进程名转换为小写
		if (strcmp(currentProcess.szExeFile,pName)==0)          //比较是否存在此进程
		{
			CloseHandle(hProcess);                              //清除hProcess句柄
			return true;
		}
		bMore=Process32Next(hProcess,¤tProcess);          //遍历下一个
	}  

	CloseHandle(hProcess);  //清除hProcess句柄
	return false;
}  

int main()
{  

	while(1)
	{
		if (!getProcess("process1.exe"))		//如果保护进程process1不存在,则启动该进程
		{
			system("start process1.exe");
		}
		Sleep(10);								//允许睡0.01秒,不能擅自脱离防守
	}
	system("pause");
	return 0;
}  

以上代码可以保证用户在不关机、不注销和不重启的情况下杀不掉进程,甚至通过快速的批处理命令也无可奈何:

taskkill -im process1.exe
taskkill -im process2.exe

如果,再修改注册表,把Process1或Process2设为开机启动项,呵呵!那么任务管理器、DOS命令、关机、重启都不管用了。是不是要重装系统或者通过引导盘将这几个文件删除掉再开机呢?欢迎大家评论!

C\C++各路高手以及操作系统专家请进来杀死这个进程,布布扣,bubuko.com

时间: 2024-12-25 06:17:31

C\C++各路高手以及操作系统专家请进来杀死这个进程的相关文章

发展基础软件与转基因:走出去,请进来

6月6日,中国电子报刊登文章,题为"普华软件接手中科红旗客户服务,致力抗国产OS大旗",读后有感. 坦言之,国内基础软件与转基因技术都比较落后,谈不上由什么人"抗大旗"的问题.在发展国内基础软件与转基因技术方面,我们需要的政策是:走出去,请进来,而非由什么人"扛大旗". 老实说,在国外,Linux与DNA(基因)的研究起步较晚,在国内,两者基本停滞不前.现在,新一届政府要求敞开国门,大力发展科学技术.现在是时候了,派人走出去,请专家走进来,虚心学

操作系统中作业、线程、进程、内存管理、垃圾回收以及缓存等概念

作业:用户在一次解题或是一个事务处理过程中要求计算机系统所做的工作的集合.它包括用户程序.所需要处理的数据以及控制命令等.作业是由一系列有序的步骤组成. 进程:一个程序在一个数据集合的一次运行过程.所以一个程序在不同数据集合上运行,乃至一个程序在同样的数据集合上的多次运行都是不同的进程. 线程:线程是进程中的一个实体,被系统独立调度和执行的基本单位. 管程:管程实际上是定义了一个数据结构和在该数据结构上的能为并发进程做执行的一组操作,这组操作能同步进程和改变管程中的数据. 操作系统中作业.线程.

抢手 &nbsp; 中国电信idc机房资源,需要的朋友请进来看看吧

广州电信主干网机房服务器租用托管,稳定单双线.BGP!安全高速!重点五 星级机房,全天24×7小时看管,标准恒湿恒温!欢迎机柜渠道合作,服务器 渠道合作等. 公司:广州速捷网络科技有限公司 欢迎详情咨询电话:18027215455或者加q:1404166312,期待各位朋友的合作! 抢手   中国电信idc机房资源,需要的朋友请进来看看吧

操作系统原理(二),进程、线程

Technorati 标签: 操作系统,原理 现代操作系统比如,Linux,Windows等,都是支持"多任务"的操作系统.所谓多任务,指的就是操作系统可以同时运行多个任务.也就是在同一台电脑上,可以同时上网.听歌.使用Word,在过去单核的CPU上都已经可以支持多任务,实现的方式是操作系统让各个任务轮流交替执行.,比如任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒,因为CPU执行速度非常块,我们感觉到所有任务都是并发处理. 到了多核CPU时代

数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)

http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载) 摘要: 很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 .......今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引,分享一下:测试环境:USETEMPDBGOCREA

网络操作系统按结构可以分为“对等结构操作系统”和“非对等结构操作系统”,请对这两种结构操作系统的主要特点给以简要说明。

对等结构的网络操作系统是指网络中的各个结点地位平等,因此安装在每个结点的操作系统的功能也相同,网络中的各种资源都可以实现共享.非 对等结构的网络操作系统根据功能的不同,将网络中的结点分为服务器和工作站两类,服务器用于提供网络服务和资源,工作站用于本地用户进行信息处理,通过访问服务器获得网络服务. 原文地址:https://www.cnblogs.com/aikeming/p/11674750.html

不理解,如果有高手看到了,请帮忙解答,谢谢啦~

例1:<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body> <p> constructor 属性返回变量或对象的构造函数.</p><p id="demo"></p><script>

操作系统知识梳理1-概述及进程管理

1. 概述 计算机体系结构图:(CPU,memory,devices) 指令:操作码,操作数 OS作用:管理各部件:为上层的应用软件提供一个易于理解和编程的接口 历史:1950s,无操作系统,卡片:60s,单道批处理,出现了通道技术和中断技术:70s,多道批处理,任务并行执行:70s后,分时系统,多个用户连接同一台计算机: 类型:批处理:分时操作系统:实时操作系统(工业控制,军工产业):嵌入式操作系统:个人PC:分布式操作系统: OS需要的硬件特性: a. 受保护的指令(只有OS才有权限):IO

操作系统学习笔记--第三章--进程

1.1 定义 一个正在执行的程序 一个正在计算机上执行的程序实例 能分配给处理器并由处理器执行的实体 一个具有以下特征的活动单元:一组指令系统的执行.一个当前状态和相关的系统资源集 进程的两个基本元素是程序代码和代码相关联的数据集. 进程控制块,由操作系统创建和管理,进程控制块包含充分的信息,这样就可以中断一个进程的执行,并且再后来恢复进程执行时, 就好像进程从来未中断过一样.   1.2 进程的状态 1.2.1 两状态进程模型 运行态和未运行态 进程创建的原因: 进程终止的原因: 1.2.2