杀死指定的进程名

   

 1 /*******************************************************************************
 2 函数名称  : LookUpProcessAndKill
 3 函数描述  : 遍历进程找到需要杀死的进程
 4 输入参数  : N/A
 5 输出参数  : N/A
 6 返回值    : N/A
 7 作者      : N/A
 8 *******************************************************************************/
 9 BOOL  LookUpProcessAndKill(const  vector<CString>  &vecProcessName)
10 {
11     BOOL bRet = FALSE;
12     HANDLE SnapShot, ProcessHandle;  
13     SHFILEINFO shSmall;  
14     PROCESSENTRY32 ProcessInfo;  
15 
16     CString strSearchName;
17     CString strRunProcessName;
18     SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
19     if(SnapShot != NULL)   
20     {
21         ProcessInfo.dwSize = sizeof(ProcessInfo);  // 设置ProcessInfo的大小  
22         BOOL Status = Process32First(SnapShot, &ProcessInfo);  
23 
24         //提升升级工具进程权限为SE_DEBUG_NAME,否则XP下无法杀掉进程
25         HANDLE hToken;
26         if(OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
27         {
28             LUID luid;
29             if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
30             {
31                 TOKEN_PRIVILEGES TokenPrivileges;
32                 TokenPrivileges.PrivilegeCount = 1;
33                 TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
34                 TokenPrivileges.Privileges[0].Luid = luid;
35                 AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL);
36             }
37             CloseHandle(hToken);
38         }
39 
40         while(Status)  
41         {  
42             // 获取进程文件信息  
43             SHGetFileInfo(ProcessInfo.szExeFile, 0, &shSmall, sizeof(shSmall), SHGFI_ICON|SHGFI_SMALLICON);  
44 
45             // 检测进程是否需要关闭
46             strRunProcessName = ProcessInfo.szExeFile;
47             strRunProcessName.MakeLower();
48             for (vector<CString>::size_type it = 0; it != vecProcessName.size(); ++ it)
49             {
50                 strSearchName = vecProcessName[it];
51                 strSearchName.MakeLower();
52                 if(strSearchName == strRunProcessName)
53                 {  
54                     // 获取进程句柄,强行关闭  
55                     ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessInfo.th32ProcessID);
56                     if (ProcessHandle != NULL)
57                     {
58                         bRet = TerminateProcess(ProcessHandle, 1);
59                         CloseHandle(ProcessHandle);
60                     }
61                     
62                     break;  
63                 }  
64 
65             }
66         
67             // 获取下一个进程的信息  
68             Status = Process32Next(SnapShot, &ProcessInfo);  
69         }     
70     }
71 
72     return  bRet;
73 }