16,472
社区成员
发帖
与我相关
我的任务
分享
#include <iostream> void TerminateProcessByName(CString processName)
{
HANDLE snapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//--------------------------------------
//查询进程
//--------------------------------------
PROCESSENTRY32 processInfo;
CString strProcessName= "";
DWORD nProcessID=0;
HANDLE processHandle;
int nProcessTerminate=0;
processInfo.dwSize=sizeof(PROCESSENTRY32);
//获取第一个进程
BOOL status=Process32First(snapShot,&processInfo);
while(status)
{
//获取进程名字
strProcessName = processInfo.szExeFile;
//查询比较是否为要结束的进程
if(processName.CompareNoCase(strProcessName)==0)
{
//获取进程ID
nProcessID=processInfo.th32ProcessID;
processHandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, nProcessID );
if(processHandle==NULL)
{
return;
}
//结束一个进程
TerminateProcess(processHandle,0);
}
//获取下一个进程
status=Process32Next(snapShot,&processInfo);
}
}
#include "Psapi.h"
#pragma comment(lib,"Psapi.lib")
//提升权限
bool GetDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
{
return false;
}
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
{
CloseHandle( hToken );
return false;
}
CloseHandle( hToken );
return true;
}
//查找进程
DWORD FindProcess(CString strName)
{
if(strName=="")
{
char szFileName[256];
memset(szFileName,0,256);
GetModuleFileName(NULL,szFileName,255);
strName=szFileName;
strName=strName.Right(strName.GetLength()-strName.ReverseFind('\\')-1);
}
char strProcessName[256];
memset(strProcessName,0,256);
strcpy(strProcessName,strName);
DWORD aProcesses[1024], cbNeeded, cbMNeeded;
HMODULE hMods[1024];
HANDLE hProcess;
char szProcessName[MAX_PATH];
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
{
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
CloseHandle(hProcess);
if(strstr(szProcessName, strProcessName))
{
return(aProcesses[i]);
}
}
return 0;
}
//结束进程
bool KillProcess(CString strName)
{
// When the all operation fail this function terminate the "winlogon" Process for force exit the system.
if(strName=="")
{
char szFileName[256];
memset(szFileName,0,256);
GetModuleFileName(NULL,szFileName,255);
strName=szFileName;
strName=strName.Right(strName.GetLength()-strName.ReverseFind('\\')-1);
}
DWORD dwProcessId = FindProcess(strName);
if(dwProcessId==0)
{
return false;
}
HANDLE hYourTargetProcess=::OpenProcess(PROCESS_TERMINATE,FALSE, dwProcessId );
if(hYourTargetProcess == NULL)
{
return false;
}
else
{
if(TerminateProcess(hYourTargetProcess, 4))
{
CloseHandle(hYourTargetProcess);
return true;
}
else
{
GetDebugPriv();
if(TerminateProcess(hYourTargetProcess, 4))
{
CloseHandle(hYourTargetProcess);
return true;
}
else
{
CloseHandle(hYourTargetProcess);
return false;
}
}
}
}