Windows 关闭某个进程
来源:互联网 发布:java中super是什么意思 编辑:程序博客网 时间:2024/06/05 16:09
在Windows中如何通过某个进程对Kill另外的进程。
1.获取系统中正在运行的进程、线程的信息 HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等 DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0 );dwFlags 指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。 TH32CS_INHERIT - 声明快照句柄是可继承的。 TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。 TH32CS_SNAPHEAPLIST - 在快照中包含在th32ProcessID中指定的进程的所有的堆。 TH32CS_SNAPMODULE - 在快照中包含在th32ProcessID中指定的进程的所有的模块。 TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。 TH32CS_SNAPTHREAD - 在快照中包含系统中所有的线程。th32ProcessID 指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。获取现在说有进程的信息并返回 hsnpshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);2.遍历进程快照,轮巡显示每个进程的信息PROCESSENTRY32 te; pe32.dwSize = sizeof(pe32); //在使用这个结构前,先设置它的大小BOOL f0k = Process32First(hSnApshot,&te); //获取第一个进程信息f0k = Process32Next(hSnApshot,&te); //获取后续进程信息3.提升当前进程的权限(参考https://baike.baidu.com/item/OpenProcessToken/9825617?fr=aladdin)BOOL OpenProcessToken( //打开某个进程的访问令牌,并返回令牌指针给tokenhandle __in HANDLE ProcessHandle, //要修改访问权限的进程句柄 __in DWORD DesiredAccess, //指定你要进行的操作类型 __out PHANDLE TokenHandle //返回的访问令牌指针 );BOOL LookupPrivilegeValue( //查看系统的指定特权并返回特权名称信息给lpluid LPCTSTR lpSystemName, //第一个参数表示所要查看的系统,本地系统直接用NULL LPCTSTR lpName, //第二个参数指向一个以零结尾的字符串,指定要查看的特权的名称, PLUID lpLuid //第三个参数用来接收所返回的制定特权名称的信息。 );AdjustTokenPrivileges这个函数启用或禁止 指定访问令牌的特权。BOOL AdjustTokenPrivileges( //启用或禁用特权一个有TOKEN_ADJUST_PRIVILEGES访问的访问令牌. HANDLE TokenHandle, //包含特权的句柄 BOOL DisableAllPrivileges,//禁用所有权限标志 PTOKEN_PRIVILEGES NewState,//新特权信息的指针(结构体) DWORD BufferLength, //缓冲数据大小,以字节为单位的PreviousState的缓存区(sizeof) PTOKEN_PRIVILEGES PreviousState,//接收被改变特权当前状态的Buffer PDWORD ReturnLength //接收PreviousState缓存区要求的大小 );4.结束进程 http://blog.csdn.net/pxm2525/article/details/39828815TerminateProcess函数终止指定进程及其所有线程。BOOL TerminateProcess( HANDLE hProcess,//进程句柄 UINT uExitCode //进程终止码 );
注意:PROCESS_ALL_ACCESS 权限并不包括 PROCESS_TERMINATE 所以在终止进程前,openprocess要以PROCESS_TERMINATE权限对进程进行打开
实例:
#include "stdio.h"#include "windows.h"#include "winbase.h"#include "tlhelp32.h"#pragma comment(lib,"kernel32.lib")#pragma comment(lib,"advapi32.lib")void EnableDebugPriv( void ){ HANDLE hToken; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; //数组的个数 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //使能一个权限值 AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); CloseHandle( hToken );}DWORD pskill(DWORD id) //根据进程ID杀进程{ HANDLE hProcess=NULL; //打开目标进程 hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,id); if (hProcess==NULL){ printf("\nOpen Process fAiled:%d\n",GetLastError()); return -1; } //结束目标进程 DWORD ret=TerminateProcess(hProcess,0); if(ret==0){ printf("%d",GetLastError()); } return -1;}DWORD main(void){ DWORD id = 0; //进程列举 HANDLE hSnApshot= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hSnApshot!=INVALID_HANDLE_VALUE){ PROCESSENTRY32 te={sizeof(te)}; BOOL f0k = Process32First(hSnApshot,&te); for(;f0k;f0k=Process32Next(hSnApshot,&te)) { printf("Pid: %d %s\n",te.th32ProcessID ,te.szExeFile ); if (stricmp(te.szExeFile, "shownum.exe") == 0) { id = te.th32ProcessID; break; } } } CloseHandle(hSnApshot); //杀进程 printf("the process's id which you want to kill: %d",id); //scanf("%d",&id); EnableDebugPriv(); //提升权限 pskill(id); system("pause"); return 0;}
阅读全文
0 0
- Windows 关闭某个进程
- C# 关闭某个进程
- Windows 关闭进程例子
- windows--nginx关闭进程
- windows关闭java进程
- windows查找进程关闭进程
- C#中强制关闭某个进程
- 关闭使用某个DLL的进程
- Ubuntu16.04关闭某个卡死进程
- VC下寻找某个进程并关闭
- cmd 关闭某个占用的进程
- windows关闭某个已知的端口
- 检查所有运行的进程,关闭某个指定的进程
- 检查所有运行的进程,关闭某个指定的进程
- Windows关闭进程的命令
- 用windows命令行关闭进程
- 用windows命令行关闭进程
- 用windows命令行关闭进程
- 文件权限的操作
- spring源码学习(七)Bean的加载(下)
- Git:warning: ignoring broken ref refs/remotes/origin/HEAD
- 4Qt音乐播放器的设计
- Selenium学习三——利用Python爬取网页表格数据并存到excel
- Windows 关闭某个进程
- Linux虚拟机中安装系统
- 基本的用户管理
- average variance standardDeviation
- 手写连接池
- java String 转char[] 以及Char[]再转回string
- Codeforces601D Acyclic Organic Compounds(dfs+字典树合并)
- 解决-win10系统-python3中import cv2显示"ImportError: DLL load failed: 找不到指定的模块。"
- Python numpy函数:zeros()、ones()、empty()