VS2012
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++查看类名和标题名
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日