判断进程是否"以管理员身份运行"

来源:互联网 发布:大疆官网模拟软件p 编辑:程序博客网 时间:2024/05/17 04:58

判断进程是否是“以管理员身份运行”:

/// @brief判断进程是否以管理员身份运行/// @param[in]dwProcessId : 进程ID/// @param[in]bCurrentProcess : 是否是当前进程///@remarkbCurrentProcess为true时,dwProcessId无效///@return是管理员身份则返回truebool IsRunAsAdministrator(DWORD dwProcessId, bool bCurrentProcess){bool bIsElevated = false;HANDLE hToken = NULL;UINT16 uWinVer = LOWORD(GetVersion());uWinVer = MAKEWORD(HIBYTE(uWinVer),LOBYTE(uWinVer));if (uWinVer < 0x0600)//不是VISTA、Windows7return (false);do {HANDLE hProcess = NULL;if (bCurrentProcess){hProcess = GetCurrentProcess();} else{hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);}if (!hProcess){bIsElevated = false;break;}HANDLE hToken = NULL;if (!::OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)){bIsElevated = false;::CloseHandle(hProcess);break;}TOKEN_ELEVATION elevation;DWORD dwRetLen = 0;if (!::GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &dwRetLen)){bIsElevated = false;::CloseHandle(hToken);::CloseHandle(hProcess);break;}if (dwRetLen == sizeof(elevation)){bIsElevated = elevation.TokenIsElevated;}::CloseHandle(hToken);::CloseHandle(hProcess);} while (false);return bIsElevated;}


0 0