From 06d1f49d618dc7c93261c60fc92e156f15a922c6 Mon Sep 17 00:00:00 2001 From: Richard Jenkins Date: Sat, 29 Jul 2017 15:21:33 +0100 Subject: [PATCH] Display a warning dialog if user runs program elevated (#6063) --- src/openrct2/Context.cpp | 13 +++++++++++++ src/openrct2/platform/platform.h | 1 + src/openrct2/platform/posix.c | 6 ++++++ src/openrct2/platform/windows.c | 17 +++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 392b648d31..db27a70fd9 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -199,6 +199,19 @@ namespace OpenRCT2 config_save_default(); } + if (platform_process_is_elevated()) + { + std::string elevationWarning = "It is not recommended to run OpenRCT2 with elevated permissions."; + if (gOpenRCT2Headless) + { + Console::Error::WriteLine(elevationWarning.c_str()); + } + else + { + _uiContext->ShowMessageBox(elevationWarning); + } + } + if (!rct2_init_directories()) { return false; diff --git a/src/openrct2/platform/platform.h b/src/openrct2/platform/platform.h index 8bb0611111..b615a51a34 100644 --- a/src/openrct2/platform/platform.h +++ b/src/openrct2/platform/platform.h @@ -127,6 +127,7 @@ uint16 platform_get_locale_language(); uint8 platform_get_locale_measurement_format(); uint8 platform_get_locale_temperature_format(); uint8 platform_get_locale_date_format(); +bool platform_process_is_elevated(); #ifndef NO_TTF bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer, size_t size); diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 8f15b43b33..20985b617a 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "../config/Config.h" #include "../localisation/date.h" #include "../localisation/language.h" @@ -836,4 +837,9 @@ utf8* platform_get_username() { } } +bool platform_process_is_elevated() +{ + return (geteuid() == 0); +} + #endif diff --git a/src/openrct2/platform/windows.c b/src/openrct2/platform/windows.c index da62d39a70..10003c2370 100644 --- a/src/openrct2/platform/windows.c +++ b/src/openrct2/platform/windows.c @@ -816,6 +816,23 @@ utf8* platform_get_username() return username; } +bool platform_process_is_elevated() +{ + BOOL isElevated = FALSE; + HANDLE hToken = NULL; + if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { + TOKEN_ELEVATION Elevation; + DWORD tokenSize = sizeof(TOKEN_ELEVATION); + if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &tokenSize)) { + isElevated = Elevation.TokenIsElevated; + } + } + if (hToken) { + CloseHandle(hToken); + } + return isElevated; +} + /////////////////////////////////////////////////////////////////////////////// // File association setup ///////////////////////////////////////////////////////////////////////////////