|
- #include "StdAfx.h"
- #include "StatisticalUser.h"
- #include <tlhelp32.h>
- #include <Psapi.h>
- #include <strsafe.h>
-
-
- StatisticalUser::StatisticalUser(void)
- {
-
- }
-
- StatisticalUser::~StatisticalUser(void)
- {
-
- }
-
- BOOL StatisticalUser::EnablePriv()
- {
- HANDLE hToken;
- if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
- {
- TOKEN_PRIVILEGES tkp;
-
- LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);//修改进程权限
- tkp.PrivilegeCount = 1;
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL);//通知系统修改进程权限
-
- return((GetLastError() == ERROR_SUCCESS));
- }
- return TRUE;
- }
-
-
- //获取权限
- BOOL StatisticalUser::GetTokenByName(DWORD &th32ProcessID, CString csPathName)
- {
- if(csPathName == L"")
- {
- return FALSE;
- }
-
- HANDLE hProcessSnap = NULL;
- BOOL bRet = FALSE;
- PROCESSENTRY32 pe32 = {0};
- hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (hProcessSnap == INVALID_HANDLE_VALUE)
- return (FALSE);
- pe32.dwSize = sizeof(PROCESSENTRY32);
- if (Process32First(hProcessSnap, &pe32))
- {
- do
- {
- CString csTest = pe32.szExeFile;
- if (csTest == csPathName)
- {
- th32ProcessID = pe32.th32ProcessID;
- CloseHandle (hProcessSnap);
- return (TRUE);
- }
- }
- while (Process32Next(hProcessSnap, &pe32));
- bRet = TRUE;
- }
- else
- bRet = FALSE;
- CloseHandle (hProcessSnap);
- return (FALSE);
- }
-
- ////////////由进程ID获取窗口句柄/////
- BOOL StatisticalUser::GetWindowHwndByPid(DWORD dwProcessID,CList<HWND>& mList)
- {
- BOOL bRet = FALSE;
- AFX_MANAGE_STATE(AfxGetStaticModuleState());
- HWND h = GetTopWindow(0);
- while(h)
- {
- DWORD pid=0;
- DWORD dwThreadid=GetWindowThreadProcessId(h,&pid);
- if (dwThreadid != 0)
- {
- if (pid==dwProcessID)
- {
- if(IsWindow(h) && IsWindowVisible(h))
- {
- mList.AddTail(h);
- bRet = TRUE;
- }
- }
- }
- h=GetNextWindow(h,GW_HWNDNEXT);
- }
- return bRet;
- }
-
- //获取进程路径
- CString StatisticalUser::GetProcessPath(DWORD idProcess)
- {
- // 获取进程路径
- CString sPath;
- // 打开进程句柄
- HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,idProcess);
- if(NULL!=hProcess)
- {
- HMODULE hMod;
- DWORD cbNeeded;
- // 获取路径
- if(EnumProcessModules(hProcess, &hMod,sizeof(hMod), &cbNeeded) )
- {
- DWORD dw=GetModuleFileNameEx(hProcess,hMod,sPath.
- GetBuffer(MAX_PATH),MAX_PATH);
- sPath.ReleaseBuffer();
- }
- CloseHandle(hProcess);
- }
- return(sPath);
- }
-
|