C++怎么编写一个强制关闭程序的程序
例如我想强制关闭一个后台程序123.exe并且它是有权限的,任务管理器结不掉,taskkill/f/im也结束不了。所以那个C++调用系统命令就不行了我想问大神怎么编写一...
例如我想强制关闭一个后台程序123.exe并且它是有权限的,任务管理器结不掉,taskkill /f /im也结束不了。所以那个C++调用系统命令就不行了
我想问大神怎么编写一个可以强制关闭这个东西的程序?主要我的目的是为了关闭学校的学生端程序StudentMain.exe而系统的ntsd命令没有了,估计被删掉了。所以请教大神!学校教一些我会的简单要死的,我又要写东西,没办法。。谢谢啦~~ 展开
我想问大神怎么编写一个可以强制关闭这个东西的程序?主要我的目的是为了关闭学校的学生端程序StudentMain.exe而系统的ntsd命令没有了,估计被删掉了。所以请教大神!学校教一些我会的简单要死的,我又要写东西,没办法。。谢谢啦~~ 展开
2个回答
2014-12-18
展开全部
ring3级的都是调用 OpenProcess TerminateProcess 等相关的API函数,你自己找下这方面的代码 。 如果只是为了结束它,你可以使用 sysinternals工具包中的 procexp.exe 这个功能强大。另外,有时候吧,没必要非得结束掉进程,你可以通过调用 suspendprocess等API函数把进程挂起,原来的时候,我在网吧上网,老是碰到一些管理软件,用procexp直接右键”挂起“ 就好了,因为这样的管理程序,往往都是互相创建和防结束的,挂起是最委婉且有效的作法。
追问
求详细的代码
追答
我给你推荐了 procexp 了。。详细代码 你搜索一下挂起代码。。就能找到了。。用工具比自己写要快多了。
展开全部
//强制卸载核心dll结束进程
//经测试, 支持Windows7, 不支持XP
//Dev-C++编译通过
#include <stdio.h>
#include <windows.h>
typedef long (__stdcall *ZWGETNEXTPROCESS)(HANDLE, long, long, long, PHANDLE);
typedef long (__stdcall *ZWUNMAPVIEWOFSECTION)(HANDLE, PVOID);
typedef ULONG (__stdcall *GETPROCESSID)(HANDLE Process);
HANDLE MiniFxOpenProcess(ULONG dwDesiredAccess, ULONG bInheritHandle, ULONG dwProcessId) {
ZWGETNEXTPROCESS ZwGetNextProcess=(ZWGETNEXTPROCESS)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwGetNextProcess");
GETPROCESSID GetProcessId=(GETPROCESSID)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetProcessId");
HANDLE hCurrent=0, hNext=0;
ULONG dwPid=0;
long Status=0;
if((PVOID)ZwGetNextProcess==NULL||(PVOID)GetProcessId==NULL)
return (HANDLE)0;
Status = ZwGetNextProcess(0, dwDesiredAccess, 0, 0, &hNext);
if (Status >= 0) {
do {
hCurrent = hNext;
dwPid = GetProcessId(hCurrent);
if (dwPid==dwProcessId)
return hCurrent;
Status = ZwGetNextProcess(hCurrent, dwDesiredAccess, 0, 0, &hNext);
CloseHandle(hCurrent);
} while(hCurrent != 0);
}
return (HANDLE)0;
}
void Unistall(ULONG ulProcessId) {
HANDLE hProc=0;
hProc=MiniFxOpenProcess(PROCESS_ALL_ACCESS, 0, ulProcessId);
HMODULE hModule=GetModuleHandle("ntdll.dll");
ZWUNMAPVIEWOFSECTION ZwUnmapViewOfSection=(ZWUNMAPVIEWOFSECTION)GetProcAddress(hModule, "ZwUnmapViewOfSection");
if(hProc!=0) {
ZwUnmapViewOfSection(hProc, (PVOID)GetModuleHandle("ntdll.dll"));
ZwUnmapViewOfSection(hProc, (PVOID)GetModuleHandle("kernel32.dll"));
ZwUnmapViewOfSection(hProc, (PVOID)GetModuleHandle("kernelbase.dll"));
}
CloseHandle(hProc);
}
int main() {
ULONG pid=0;
HANDLE hProc=0;
printf("Input PID: ");
scanf("%ld", &pid);
Unistall(pid);
return 0;
}
可强杀StudentMain.exe,ProcHelper64.exe
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询