通过进程ID或名字结束进程

来源:互联网 发布:程序员技术分享 编辑:程序博客网 时间:2024/05/05 04:41

1.通过进程名:

void CloseProgram(CString strProgram){    HANDLE handle; //定义CreateToolhelp32Snapshot系统快照句柄     HANDLE handle1; //定义要结束进程句柄     handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统快照句柄     PROCESSENTRY32 *info; //定义PROCESSENTRY32结构字指     //PROCESSENTRY32 结构的 dwSize 成员设置成 sizeof(PROCESSENTRY32)     info = new PROCESSENTRY32;     info->dwSize = sizeof(PROCESSENTRY32);     //调用一次 Process32First 函数,从快照中获取进程列表     Process32First(handle, info);     //重复调用 Process32Next,直到函数返回 FALSE 为止     while(Process32Next(handle, info) != FALSE)     {           CString strTmp = info->szExeFile;     //指向进程名字           //strcmp字符串比较函数同要结束相同           //if(strcmp(c, info->szExeFile) == 0 )           if (strProgram.CompareNoCase(info->szExeFile) == 0 )           {               //PROCESS_TERMINATE表示为结束操作打开,FALSE=可继承,info->th32ProcessID=进程ID                handle1 = OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID);             //结束进程                TerminateProcess(handle1, 0);            }       }    delete info;    CloseHandle(handle);}

2.2.通过进程ID

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;    // Enable the privilege or disable all privileges.    AdjustTokenPrivileges(        hToken,         FALSE,         &tp,         sizeof(TOKEN_PRIVILEGES),         (PTOKEN_PRIVILEGES) NULL,         (PDWORD) NULL);     // Call GetLastError to determine whether the function succeeded.    if (GetLastError() != ERROR_SUCCESS)     {         printf("AdjustTokenPrivileges failed: %u\n", GetLastError() );         return FALSE;     }     return TRUE;}BOOL KillPS(DWORD id){    HANDLE hProcess=NULL,hProcessToken=NULL;    BOOL IsKilled=FALSE,bRet=FALSE;    if((hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id))!=NULL)    {         if(TerminateProcess(hProcess,1))      {          return TRUE;      }    }    __try    {        if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hProcessToken))        {            printf("\nOpen Current Process Token failed:%d",GetLastError());            __leave;        }        //printf("\nOpen Current Process Token ok!");        if(!SetPrivilege(hProcessToken,SE_DEBUG_NAME,TRUE))        {            __leave;        }        printf("\nSetPrivilege ok!");        if((hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id))==NULL)        {            printf("\nOpen Process %d failed:%d",id,GetLastError());            __leave;        }        //printf("\nOpen Process %d ok!",id);        if(!TerminateProcess(hProcess,1))        {            printf("\nTerminateProcess failed:%d",GetLastError());            __leave;        }        IsKilled=TRUE;    }    __finally    {        if(hProcessToken!=NULL) CloseHandle(hProcessToken);        if(hProcess!=NULL) CloseHandle(hProcess);    }    return(IsKilled);}
1 0
原创粉丝点击