summaryrefslogtreecommitdiff
path: root/src/burn/engine/engine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/engine.cpp')
-rw-r--r--src/burn/engine/engine.cpp23
1 files changed, 3 insertions, 20 deletions
diff --git a/src/burn/engine/engine.cpp b/src/burn/engine/engine.cpp
index 89082a88..48196655 100644
--- a/src/burn/engine/engine.cpp
+++ b/src/burn/engine/engine.cpp
@@ -893,7 +893,7 @@ static HRESULT ProcessMessage(
893 break; 893 break;
894 894
895 case WM_BURN_ELEVATE: 895 case WM_BURN_ELEVATE:
896 hr = CoreElevate(pEngineState, reinterpret_cast<HWND>(pmsg->lParam)); 896 hr = CoreElevate(pEngineState, WM_BURN_ELEVATE, reinterpret_cast<HWND>(pmsg->lParam));
897 break; 897 break;
898 898
899 case WM_BURN_APPLY: 899 case WM_BURN_APPLY:
@@ -1069,26 +1069,10 @@ static HRESULT Restart(
1069 ) 1069 )
1070{ 1070{
1071 HRESULT hr = S_OK; 1071 HRESULT hr = S_OK;
1072 HANDLE hProcessToken = NULL;
1073 TOKEN_PRIVILEGES priv = { };
1074 DWORD dwRetries = 0; 1072 DWORD dwRetries = 0;
1075 1073
1076 if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hProcessToken)) 1074 hr = ProcEnablePrivilege(::GetCurrentProcess(), SE_SHUTDOWN_NAME);
1077 { 1075 ExitOnFailure(hr, "Failed to enable shutdown privilege in process token.");
1078 ExitWithLastError(hr, "Failed to get process token.");
1079 }
1080
1081 priv.PrivilegeCount = 1;
1082 priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
1083 if (!::LookupPrivilegeValueW(NULL, L"SeShutdownPrivilege", &priv.Privileges[0].Luid))
1084 {
1085 ExitWithLastError(hr, "Failed to get shutdown privilege LUID.");
1086 }
1087
1088 if (!::AdjustTokenPrivileges(hProcessToken, FALSE, &priv, sizeof(TOKEN_PRIVILEGES), NULL, 0))
1089 {
1090 ExitWithLastError(hr, "Failed to adjust token to add shutdown privileges.");
1091 }
1092 1076
1093 pEngineState->fRestarting = TRUE; 1077 pEngineState->fRestarting = TRUE;
1094 CoreUpdateRestartState(pEngineState, BURN_RESTART_STATE_REQUESTING); 1078 CoreUpdateRestartState(pEngineState, BURN_RESTART_STATE_REQUESTING);
@@ -1147,7 +1131,6 @@ static HRESULT Restart(
1147 } 1131 }
1148 1132
1149LExit: 1133LExit:
1150 ReleaseHandle(hProcessToken);
1151 return hr; 1134 return hr;
1152} 1135}
1153 1136