判斷程序是否"以管理員身份執行"
阿新 • • 發佈:2019-01-25
判斷程序是否是“以管理員身份執行”:
/// @brief 判斷程序是否以管理員身份執行 /// @param[in] dwProcessId : 程序ID /// @param[in] bCurrentProcess : 是否是當前程序 /// @remark bCurrentProcess為true時,dwProcessId無效 /// @return 是管理員身份則返回true bool 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、Windows7 return (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; }