mirror of
https://github.com/jwinterm/xmr-stak.git
synced 2026-10-17 05:41:41 +02:00
fix windows build
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "xmrstak/misc/console.hpp"
|
||||
#include "xmrstak/params.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <windows.h>
|
||||
|
||||
BOOL IsElevated()
|
||||
{
|
||||
BOOL fRet = FALSE;
|
||||
HANDLE hToken = NULL;
|
||||
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
|
||||
{
|
||||
TOKEN_ELEVATION Elevation;
|
||||
DWORD cbSize = sizeof(TOKEN_ELEVATION);
|
||||
if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize))
|
||||
fRet = Elevation.TokenIsElevated;
|
||||
}
|
||||
if (hToken)
|
||||
CloseHandle(hToken);
|
||||
return fRet;
|
||||
}
|
||||
|
||||
BOOL SelfElevate(const std::string& my_path, const std::string& params)
|
||||
{
|
||||
if (IsElevated())
|
||||
return FALSE;
|
||||
|
||||
SHELLEXECUTEINFO shExecInfo = { 0 };
|
||||
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
|
||||
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
|
||||
shExecInfo.hwnd = NULL;
|
||||
shExecInfo.lpVerb = "runas";
|
||||
shExecInfo.lpFile = my_path.c_str();
|
||||
shExecInfo.lpParameters = params.c_str();
|
||||
shExecInfo.lpDirectory = NULL;
|
||||
shExecInfo.nShow = SW_SHOW;
|
||||
shExecInfo.hInstApp = NULL;
|
||||
|
||||
if (!ShellExecuteEx(&shExecInfo))
|
||||
return FALSE;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
VOID RequestElevation()
|
||||
{
|
||||
if(IsElevated())
|
||||
return;
|
||||
|
||||
if(!xmrstak::params::inst().allowUAC)
|
||||
{
|
||||
printer::inst()->print_msg(L0, "The miner needs to run as administrator, but you passed --noUAC option. Please remove it or set use_slow_memory to always.");
|
||||
win_exit();
|
||||
return;
|
||||
}
|
||||
|
||||
SelfElevate(xmrstak::params::inst().minerArg0, xmrstak::params::inst().minerArgs);
|
||||
}
|
||||
#endif
|
||||
+3
-61
@@ -1,67 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "xmrstak/misc/console.hpp"
|
||||
#include "xmrstak/params.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <windows.h>
|
||||
|
||||
BOOL IsElevated()
|
||||
{
|
||||
BOOL fRet = FALSE;
|
||||
HANDLE hToken = NULL;
|
||||
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
|
||||
{
|
||||
TOKEN_ELEVATION Elevation;
|
||||
DWORD cbSize = sizeof(TOKEN_ELEVATION);
|
||||
if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize))
|
||||
fRet = Elevation.TokenIsElevated;
|
||||
}
|
||||
if (hToken)
|
||||
CloseHandle(hToken);
|
||||
return fRet;
|
||||
}
|
||||
|
||||
BOOL SelfElevate(const std::string& my_path, const std::string& params)
|
||||
{
|
||||
if (IsElevated())
|
||||
return FALSE;
|
||||
|
||||
SHELLEXECUTEINFO shExecInfo = { 0 };
|
||||
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
|
||||
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
|
||||
shExecInfo.hwnd = NULL;
|
||||
shExecInfo.lpVerb = "runas";
|
||||
shExecInfo.lpFile = my_path.c_str();
|
||||
shExecInfo.lpParameters = params.c_str();
|
||||
shExecInfo.lpDirectory = NULL;
|
||||
shExecInfo.nShow = SW_SHOW;
|
||||
shExecInfo.hInstApp = NULL;
|
||||
|
||||
if (!ShellExecuteEx(&shExecInfo))
|
||||
return FALSE;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
VOID RequestElevation()
|
||||
{
|
||||
if(IsElevated())
|
||||
return;
|
||||
|
||||
if(!xmrstak::params::inst().allowUAC)
|
||||
{
|
||||
printer::inst()->print_msg(L0, "The miner needs to run as administrator, but you passed --noUAC option. Please remove it or set use_slow_memory to always.");
|
||||
win_exit();
|
||||
return;
|
||||
}
|
||||
|
||||
SelfElevate(xmrstak::params::inst().minerArg0, xmrstak::params::inst().minerArgs);
|
||||
}
|
||||
BOOL IsElevated();
|
||||
BOOL SelfElevate(const std::string& my_path, const std::string& params);
|
||||
VOID RequestElevation();
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user