MFC小例子-OpenProcess打开进程TerminateProcess终止进程

VS2012

MFC小例子-OpenProcess打开进程TerminateProcess终止进程

void RaisePrivileges();
HANDLE hProc;



/*
    提升当前进程的权限
*/
void CDemoDlg::RaisePrivileges()
{
    //打开当前进程的访问令牌
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if (OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS, &hToken))
    {
        if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid))
        {
            AdjustTokenPrivileges(hToken,FALSE, &tkp, 0x10, (PTOKEN_PRIVILEGES)NULL,0);
        }
    }
    if (hToken)
    {
        CloseHandle(hToken);
    }
}


void CDemoDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码

    //提升权限
    RaisePrivileges();

    //通过PID,去进程中找到计算器的进程,得到句柄
    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE,2284);//得到进程句柄
    if (hProc == NULL)
    {
        AfxMessageBox("打开进程失败");
    }
    else
    {
        AfxMessageBox("打开进程成功");
    }
}


void CDemoDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码

    //终止进程结束
    TerminateProcess(hProc, 0);
}

使用Spy++查看类名和标题名

MFC小例子-OpenProcess打开进程TerminateProcess终止进程

 

 

 MFC小例子-OpenProcess打开进程TerminateProcess终止进程

void CDemoDlg::OnBnClickedButton3()
{
    // TODO: 在此添加控件通知处理程序代码

    //使用窗口的类名或者窗口标题的名字,其中一个就可以得到窗口句柄
    HWND hCalc = ::FindWindow(NULL, TEXT("计算器"));

    //得到窗口的进程的ID
    DWORD pid;
    GetWindowThreadProcessId(hCalc, &pid);

    //提升权限
    RaisePrivileges();

    //打开进程
    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if (hProc == NULL)
    {
        AfxMessageBox("打开进程失败");
    }
    else
    {
        AfxMessageBox("打开进程成功");
    }

}

Caesar卢尚宇

2021年1月5日

 

上一篇:MFC小例子-创建进程


下一篇:MFC是什么