#include <windows.h> #include <tlhelp32.h> #include <stdio.h> void pslist(void); BOOL killps(DWORD id); BOOL SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege); void pslist(void) { HANDLE hProcessSnap = NULL; PROCESSENTRY32 pe32= {0}; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == (HANDLE)-1) { printf("/nCreateToolhelp32Snapshot() failed:%d",GetLastError()); return ; } pe32.dwSize = sizeof(PROCESSENTRY32); printf("/nProcessName ProcessID"); if (Process32First(hProcessSnap, &pe32)) { char a[5]; do { itoa(pe32.th32ProcessID,a,10); printf("/n%-25s%d",pe32.szExeFile,pe32.th32ProcessID); } while (Process32Next(hProcessSnap, &pe32)); } else { printf("/nProcess32Firstt() failed:%d",GetLastError()); } CloseHandle (hProcessSnap); printf("/n "); return; } //上边的代码列出了进程的PID,有了PID我们就可以使用PSKILL杀进程: BOOL killps(DWORD id) { HANDLE hProcess=NULL,hProcessToken=NULL; BOOL IsKilled=FALSE,bRet=FALSE; try{ if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hProcessToken)) { throw "/n OpenProcessToken failed"; } if(!SetPrivilege(hProcessToken,SE_DEBUG_NAME,TRUE)) { throw "/n SetPrivilege failed"; } if((hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id))==NULL) { throw "/n OpenProcess failed"; } if(!TerminateProcess(hProcess,1)) { throw "/n TerminateProcess failed"; } IsKilled=TRUE; } catch(char* err) { printf("%s",err); } if(hProcessToken!=NULL) CloseHandle(hProcessToken); if(hProcess!=NULL) CloseHandle(hProcess); return(IsKilled); } BOOL SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege) //提升权限 { TOKEN_PRIVILEGES tp; LUID luid; if(!LookupPrivilegeValue(NULL,lpszPrivilege,&luid)) { printf("/nLookupPrivilegeValue error:%d", GetLastError() ); return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; if (bEnablePrivilege) tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; else tp.Privileges[0].Attributes = 0; AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL); if (GetLastError() != ERROR_SUCCESS) { printf("AdjustTokenPrivileges failed: %u/n", GetLastError() ); return FALSE; } return TRUE; } void main() { pslist(); // killps(512); } 这个程序还不能够干掉杀毒软件进程,遗憾。