Windows挂起进程
Window系统并没有公开提供挂起进程的API,但提供了SuspendThread,对一个程序的挂起,即对该程序所有的线程的挂起。
首先引用头文件
#include <windows.h> 'Windows头文件
#include <tlhelp32.h> 'Windows进程与线程快照需要
通过创建系统进程与线程的快照来停止对应进程的线程。
1.根据名称停止指定进程
#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <tchar.h>
BOOL SuspendProcessByName(WCHAR* name) {PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) }; //这是用来存放快照进程信息的一个结构体。//创建所有进程的快照HANDLE hProcessSanp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSanp == INVALID_HANDLE_VALUE) //检查错误{puts("Failed To Get the Process SnapShot");return 0;}Process32First(hProcessSanp, &pe32); //获取第一个快照信息do {if (!wcscoll(name, pe32.szExeFile)) { //比较进程名称//获取线程快照THREADENTRY32 th32 = { sizeof(THREADENTRY32) };HANDLE hThreadSanp = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, NULL);if (hThreadSanp == INVALID_HANDLE_VALUE) {puts("Failed To Get Thread SnapShot");continue;}//获取第一个线程快照Thread32First(hThreadSanp, &th32);do {if (th32.th32OwnerProcessID != pe32.th32ProcessID) continue; //当线程的所有者不是所找进程时跳过//获取线程句柄HANDLE hth = OpenThread(THREAD_SUSPEND_RESUME, FALSE, th32.th32ThreadID);if (hth) {//用API挂起线程SuspendThread(hth);CloseHandle(hth);//关闭线程句柄}else {puts("Failed To Open Thread");}} while (Thread32Next(hThreadSanp, &th32)); //下一个线程快照if (hThreadSanp) CloseHandle(hThreadSanp); //关闭线程快照}} while (Process32Next(hProcessSanp, &pe32)); //下一个进程快照CloseHandle(hProcessSanp); //关闭进程快照return 1;
}
2.根据ID挂起指定进程
原理是一样的
#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <tchar.h>
BOOL SuspendProcessByID(DWORD id) {THREADENTRY32 th32 = {sizeof(THREADENTRY32)};HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, NULL);if (hThreadSnap == INVALID_HANDLE_VALUE) {puts("Failed To Get Thread Snapshot");return 0;}Thread32First(hThreadSnap, &th32);do {if (th32.th32ProcessID != id) continue;HANDLE hth = OpenThread(THREAD_SUSPEND_RESUME , FALSE, th32.th32ThreadID);if (hth != INVALID_HANDLE_VALUE) {SuspendThread(hth);CloseHandle(hth);}else{puts("Failed To Open Thread");}} while (Thread32Next(hThreadSnap, &th32));return 1;
}
如果要恢复进程,则只需将上述代码中的SuspendThread改为ResumeThread即可。
Windows挂起进程相关推荐
- Ring3挂起进程,跟恢复进程.
目录 Ring3挂起进程,跟恢复进程. 一丶简介 二丶代码 Ring3挂起进程,跟恢复进程. 一丶简介 有时候我们做对抗的时候可能会遇到.一个进程常常操作我们.但是我们 可以通过挂起进程来挂起它让它无 ...
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)
7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...
- Windows 10累积更新发布:RS3正式版前最后一更
Windows 10用户很快将能够通过Update Assistant工具手动安装Windows 10创作者更新.而在正式版到来之前这仅剩的一点空白时间当中,微软又发布了两个累积更新来优化体验.今天发 ...
- 一段挂起进程中所有线程的代码
今天看书核心编程看到第7章,中的一段代码很有意思,win7下对记事本进程进行测试,可以挂起,挺有意思的 //windows核心编程 第5版中的一段代码 /* 函数功能:挂起进程中的所有线程 参数1:进 ...
- 《Windows核心编程》学习笔记(7)– 详解线程
线程的挂起和恢复 DWORD SuspendThread ( HANDLE hThread ); //挂起线程 DWORD ResumeThread ( HANDLE hThread ); / ...
- Windows运行程序时桌面窗口卡死
一.问题描述 我们在使用windows 系统过程中,经常会遇到执行某些程序的时候,程序窗口显示"未想一个响应",桌面窗口整个卡死的情况,但是过一段时间会自动恢复,查看任务管理器,并 ...
- (59.2)【Windows提权】权限等级、PSTools提权、at命令提权、sc命令提权
目录 一.权限分配 1.1.Windows: 1.2.Linux 二.PSTools提权 2.1.简介: 2.2.微软官网: 2.3.PsExec提权: 三.at命令提权 3.1.原理: 3.2.适用 ...
- 【翻译】Windows 反调试参考翻译
[1] 说明 这篇文章分类并提供了几种在基于WINDOWS NT的操作系统中使用的反调试技术.反调试技术是程序用来检测自身是否运行于调试器之下的各种方式之一.它们被用于商业执行保护,加壳以及恶意软件, ...
- 了解Windows Vista内核的安全性
标签: Vista Vista 内核 了解Windows Vista内核的安全性 Windows Vista通过许多新功能和改进提高了系统的可靠性和您对系统与应用程序问题的诊断能力.例如,内 ...
- linux和windows sleep函数
1.sleep函数 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在windows中使用带上头文件#include <wind ...
最新文章
- hdu4038贪心(最快上升倍率,好题)
- python库的学习系列之 13.2. ConfigParser — Configuration file parser
- 【vlan-给予mac地址认证】
- qwtqplot用法
- 分组卷积/群卷积(Group Convolution)
- 【操作系统笔记】中断和异常
- 转: hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释
- iview2.0 bug之+8 区的 DatePicker
- fpga c语言教程,FPGA实践教程(一)用HLS将c程序生成IPcore
- excel单元格内容拆分_Excel技巧:帮你把单元格内容颠倒顺序显示
- Linux中drwxr-xr-x.的意思和文件权限详解
- Arduino安全和警报系统项目
- 推荐几款连字字体,在代码编辑器中启用连字字体(Visual Studio Code)
- 我的权限控制(JBX + struts + hibernate + ORACLE)
- scrapy安装时遇到问题怎么解决
- win10文件后缀名怎么显示_Win10显示隐藏文件后系统根目录( C盘)文件及文件夹的作用...
- 【网络基础】Https加解密详解
- 2022年全球城市变迁研究报告
- 如何利用状态机编程实现启保停控制(含Stateflow模型介绍)
- 软件测试自学毛笔字纹身,巫师后期摄影Photoshop教程全集