mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 16:00:08 +00:00
43 lines
914 B
C++
43 lines
914 B
C++
#include "scwx/qt/util/check_privilege.hpp"
|
|
#include <QtGlobal>
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#else
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
namespace scwx {
|
|
namespace qt {
|
|
namespace util {
|
|
|
|
bool is_high_privilege()
|
|
{
|
|
#if defined(_WIN32)
|
|
bool isAdmin = false;
|
|
HANDLE token = NULL;
|
|
TOKEN_ELEVATION elevation;
|
|
DWORD elevationSize = sizeof(TOKEN_ELEVATION);
|
|
|
|
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token))
|
|
{
|
|
return false;
|
|
}
|
|
if (!GetTokenInformation(
|
|
token, TokenElevation, &elevation, elevationSize, &elevationSize))
|
|
{
|
|
CloseHandle(token);
|
|
return false;
|
|
}
|
|
isAdmin = elevation.TokenIsElevated;
|
|
CloseHandle(token);
|
|
return isAdmin;
|
|
#elif defined(Q_OS_UNIX)
|
|
// On UNIX root is always uid 0. On Linux this is enforced by the kernal.
|
|
return geteuid() == 0;
|
|
#endif
|
|
}
|
|
|
|
} // namespace util
|
|
} // namespace qt
|
|
} // namespace scwx
|