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

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值