diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-09-02 16:12:42 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-09-03 15:29:26 -0500 |
commit | 237bdc6a97c0dd455da99c16e6b3b7cac4c79e86 (patch) | |
tree | 1f2c789a7aa752e068fac8a4ca08815d13bf527a /src/burn/engine/engine.cpp | |
parent | 7728e34e48a4fdb710ecc92dd8dca833bff3993f (diff) | |
download | wix-237bdc6a97c0dd455da99c16e6b3b7cac4c79e86.tar.gz wix-237bdc6a97c0dd455da99c16e6b3b7cac4c79e86.tar.bz2 wix-237bdc6a97c0dd455da99c16e6b3b7cac4c79e86.zip |
Add WixCanRestart and make wixstdba elevate for restart when required.
Fixes 5499
Diffstat (limited to 'src/burn/engine/engine.cpp')
-rw-r--r-- | src/burn/engine/engine.cpp | 23 |
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 | ||
1149 | LExit: | 1133 | LExit: |
1150 | ReleaseHandle(hProcessToken); | ||
1151 | return hr; | 1134 | return hr; |
1152 | } | 1135 | } |
1153 | 1136 | ||