MFC-打开进程-终止进程

打开一个进程如果想获取操作这个进程的全部权限,则需要提升当前进程的权限,否则会打开失败.但是也有一些人把自己的系统设置得比较薄弱,可以不用提权就操作一些非系统进程.
如果想操作系统进程,靠这些函数提权是没有办法的,得靠漏洞,但是你可以以管理员身份运行你写好的程序,然后就可以终止掉系统进程.

一个简单的打开终止进程例子:

1.提权

BOOL AdjustPrivilege()
{
    BOOL bRet = FALSE;
    TOKEN_PRIVILEGES tp = { 0 };//令牌权限结构
    HANDLE hToken = nullptr;//令牌句柄

    do
    {
        //打开当前进程令牌,并且获取它              //得到令牌的全部权限
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
            break;
        //获取SE_DEBUG_NAME的LUID(Locally Unique Identifier),局部唯一标识
        //SE_DEBUG_NAME这个权限非常高
        if (!LookupPrivilegeValue(nullptr, SE_DEBUG_NAME, &tp.Privileges[0].Luid))
            break;
        tp.PrivilegeCount = 1;//修改权限的个数
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;//激活SE_DEBUG_NAME这个权限
                                                           //提升权限//FALSE表示可以修改权限//把需要修改的权限传进来
        if (!AdjustTokenPrivileges(hToken, FALSE, &tp, 0x10, (PTOKEN_PRIVILEGES)nullptr, 0))
            break;
        bRet = TRUE;
    } while (FALSE);
    if (hToken)
        CloseHandle(hToken);
    return bRet;
}

2.打开进程

//提权
    AdjustPrivilege();
    DWORD dwPID = 1588; //这是进程的PID(每次都会变的)
    //打开进程返回一个打开的进程句柄
    m_hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    if (!m_hProc)
    {
        AfxMessageBox(TEXT("打开进程失败"));  
        return;
    }
    else
    {
        AfxMessageBox(TEXT("打开进程成功"));
    }

3.关闭进程

    //终止进程
    TerminateProcess(m_hProc,0);

你可能感兴趣的:(MFC)