博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提权获取进程路径并获取进程列表
阅读量:4693 次
发布时间:2019-06-09

本文共 1726 字,大约阅读时间需要 5 分钟。

1、进程提权:

  1. BOOL CProgressInfo::AdjustPrivileges()  
  2. {  
  3.     HANDLE hToken = NULL;  
  4.     TOKEN_PRIVILEGES tp = {0};  
  5.     TOKEN_PRIVILEGES oldtp = {0};  
  6.     DWORD dwSize = sizeof(TOKEN_PRIVILEGES);  
  7.     LUID luid = {0};  
  8.   
  9.     if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {  
  10.         if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)  
  11.             return TRUE;  
  12.         else  
  13.             return FALSE;  
  14.     }  
  15.     if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {  
  16.         CloseHandle(hToken);  
  17.         return FALSE;  
  18.     }  
  19.   
  20.     tp.PrivilegeCount=1;  
  21.     tp.Privileges[0].Luid = luid;  
  22.     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
  23.   
  24.     /* Adjust Token Privileges */  
  25.     if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {  
  26.         CloseHandle(hToken);  
  27.         return FALSE;  
  28.     }  
  29.   
  30.     // close handles  
  31.     CloseHandle(hToken);  
  32.     return TRUE;  
  33. }  

2、获取进程列表(提权后可获取基本所有的进程路径):

  1. BOOL CProgressInfo::GetProgressList()  
  2. {  
  3.     BOOL bResult = FALSE;  
  4.     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
  5.     if ( hSnap == INVALID_HANDLE_VALUE )  
  6.         return FALSE;  
  7.   
  8.     HANDLE hProcess = NULL;  
  9.     PROCESSENTRY32 info = {0};  
  10.     info.dwSize = sizeof(PROCESSENTRY32);  
  11.   
  12.     BOOL bRet = Process32First(hSnap, &info);  
  13.     while(bRet) {  
  14.         hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, info.th32ProcessID);  
  15.         if (hProcess) {  
  16.             GetModuleFileNameEx(hProcess, NULL, /*缓冲区指针*/, MAX_PATH);//获取进程路径  
  17.         }  
  18.   
  19.         bRet = Process32Next(hSnap, &info);  
  20.     }  
  21.   
  22.     return TRUE;  
  23. }  

3、根据进程的PID,结束此进程:

  1. void CProgressInfo::DeleteProgress(DWORD pUID)  
  2. {  
  3.     HANDLE hProcessHandle;  
  4.     hProcessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE,pUID);  
  5.     if(hProcessHandle)  
  6.     {  
  7.         TerminateProcess(hProcessHandle,-1);  
  8.         CloseHandle(hProcessHandle);  
  9.     }  
  10.     else  
  11.     {  
  12.         //......  
  13.     }  

 

来源:http://blog.csdn.net/u012372584/article/details/61912606

 

转载于:https://www.cnblogs.com/acmexyz/p/8521861.html

你可能感兴趣的文章
设计模式之工厂模式
查看>>
仿复制粘贴功能,长按弹出tips的实现
查看>>
Kubernetes-Host网络模式应用
查看>>
第三次作业
查看>>
使用HTML5构建iOS原生APP(2)
查看>>
sqlplus terminators - Semicolumn (;), slash (/) and a blank line
查看>>
省选知识清单/计划列表(咕?)
查看>>
远程桌面(3389)复制(拖动)文件
查看>>
转 lucene3搜索引擎,索引建立搜索排序分页高亮显示, IKAnalyzer分词
查看>>
bootstrap datetimepicker 位置错误
查看>>
9结构型模式之代理模式
查看>>
第二节 整型数据
查看>>
Python 序列
查看>>
Liferay的架构:缓存(第一部分)
查看>>
初识B/S结构编程技术
查看>>
方法、hadoop源码之JobQueueTaskScheduler-by小雨
查看>>
页面重构总结
查看>>
IO 函数
查看>>
Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
查看>>
JSP页面间传递参数
查看>>