提权获取进程路径并获取进程列表

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

 

posted @ 2018-03-07 13:33  YJCCN  阅读(234)  评论(0编辑  收藏  举报