FancyZones: optimize elevation detection logic (#2103)

This commit is contained in:
Andrey Nekrasov
2020-04-13 18:22:37 +03:00
committed by GitHub
parent 6bb0f18d53
commit 86704efcec
4 changed files with 23 additions and 21 deletions

View File

@@ -364,27 +364,31 @@ WindowState get_window_state(HWND hwnd)
return RESTORED;
}
bool is_process_elevated()
bool is_process_elevated(const bool use_cached_value)
{
HANDLE token = nullptr;
bool elevated = false;
auto detection_func = []() {
HANDLE token = nullptr;
bool elevated = false;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token))
{
TOKEN_ELEVATION elevation;
DWORD size;
if (GetTokenInformation(token, TokenElevation, &elevation, sizeof(elevation), &size))
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token))
{
elevated = (elevation.TokenIsElevated != 0);
TOKEN_ELEVATION elevation;
DWORD size;
if (GetTokenInformation(token, TokenElevation, &elevation, sizeof(elevation), &size))
{
elevated = (elevation.TokenIsElevated != 0);
}
}
}
if (token)
{
CloseHandle(token);
}
if (token)
{
CloseHandle(token);
}
return elevated;
return elevated;
};
static const bool cached_value = detection_func();
return use_cached_value ? cached_value : detection_func();
}
bool drop_elevated_privileges()

View File

@@ -61,7 +61,7 @@ enum WindowState
WindowState get_window_state(HWND hwnd);
// Returns true if the current process is running with elevated privileges
bool is_process_elevated();
bool is_process_elevated(const bool use_cached_value = true);
// Drops the elevated privilages if present
bool drop_elevated_privileges();
@@ -78,7 +78,7 @@ bool run_same_elevation(const std::wstring& file, const std::wstring& params);
// Returns true if the current process is running from administrator account
bool check_user_is_admin();
//Returns true when one or more strings from vector found in string
// Returns true when one or more strings from vector found in string
bool find_app_name_in_path(const std::wstring& where, const std::vector<std::wstring>& what);
// Get the executable path or module name for modern apps