From c4391ac6f3239d81093449948d16b2233cacdb3f Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Thu, 21 Dec 2017 20:49:01 +0000 Subject: [PATCH] Stop UAC popup for elevated ctx --- xmrstak/cli/cli-miner.cpp | 40 +++------------------------------------ xmrstak/misc/uac.hpp | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 43 deletions(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 828f714..145e4e6 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -52,6 +52,7 @@ #ifdef _WIN32 # define strcasecmp _stricmp # include +# include "xmrstak/misc/uac.hpp" #endif // _WIN32 void do_benchmark(); @@ -309,41 +310,6 @@ void do_guided_config() std::cout<<"Configuration stored in file '"<print_msg(L0, - "This window has been opened because xmr-stak needed to run as administrator. It can be safely closed now."); - WaitForSingleObject(shExInfo.hProcess, INFINITE); - CloseHandle(shExInfo.hProcess); - // do not start the miner twice - std::exit(0); - } -} -#endif - int main(int argc, char *argv[]) { #ifndef CONF_NO_TLS @@ -551,7 +517,7 @@ int main(int argc, char *argv[]) } #ifdef _WIN32 - if(uacDialog) + if(uacDialog && !IsElevated()) { std::string minerArgs; for(int i = 1; i < argc; i++) @@ -560,7 +526,7 @@ int main(int argc, char *argv[]) minerArgs += argv[i]; } - UACDialog(argv[0], minerArgs); + SelfElevate(argv[0], minerArgs); } #endif diff --git a/xmrstak/misc/uac.hpp b/xmrstak/misc/uac.hpp index fdf3be9..55c5f1a 100644 --- a/xmrstak/misc/uac.hpp +++ b/xmrstak/misc/uac.hpp @@ -1,4 +1,9 @@ #pragma once + +#ifdef _WIN32 +#include "xmrstak/misc/console.hpp" + +#include #include BOOL IsElevated() @@ -17,18 +22,18 @@ BOOL IsElevated() return fRet; } -BOOL SelfElevate(const char* my_path) +BOOL SelfElevate(const char* my_path, const std::string& params) { if (IsElevated()) return FALSE; SHELLEXECUTEINFO shExecInfo = { 0 }; shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); - shExecInfo.fMask = NULL; + shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; shExecInfo.hwnd = NULL; shExecInfo.lpVerb = "runas"; shExecInfo.lpFile = my_path; - shExecInfo.lpParameters = NULL; + shExecInfo.lpParameters = params.c_str(); shExecInfo.lpDirectory = NULL; shExecInfo.nShow = SW_SHOW; shExecInfo.hInstApp = NULL; @@ -36,9 +41,11 @@ BOOL SelfElevate(const char* my_path) if (!ShellExecuteEx(&shExecInfo)) return FALSE; - // Hide our window and loiter in the background to make scripting easier - // ShowWindow(GetConsoleWindow(), SW_HIDE); - // WaitForSingleObject(shExecInfo.hProcess, INFINITE); + // Loiter in the background to make scripting easier + printer::inst()->print_msg(L0, "This window has been opened because xmr-stak needed to run as administrator. It can be safely closed now."); + WaitForSingleObject(shExecInfo.hProcess, INFINITE); + std::exit(0); return TRUE; } +#endif