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/variable.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/variable.cpp')
| -rw-r--r-- | src/burn/engine/variable.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/burn/engine/variable.cpp b/src/burn/engine/variable.cpp index 81fa31b7..3947e29e 100644 --- a/src/burn/engine/variable.cpp +++ b/src/burn/engine/variable.cpp | |||
| @@ -153,6 +153,10 @@ static HRESULT InitializeVariablePrivileged( | |||
| 153 | __in DWORD_PTR dwpData, | 153 | __in DWORD_PTR dwpData, |
| 154 | __inout BURN_VARIANT* pValue | 154 | __inout BURN_VARIANT* pValue |
| 155 | ); | 155 | ); |
| 156 | static HRESULT InitializeVariableProcessTokenPrivilege( | ||
| 157 | __in DWORD_PTR dwpData, | ||
| 158 | __inout BURN_VARIANT* pValue | ||
| 159 | ); | ||
| 156 | static HRESULT InitializeSystemLanguageID( | 160 | static HRESULT InitializeSystemLanguageID( |
| 157 | __in DWORD_PTR dwpData, | 161 | __in DWORD_PTR dwpData, |
| 158 | __inout BURN_VARIANT* pValue | 162 | __inout BURN_VARIANT* pValue |
| @@ -284,6 +288,7 @@ extern "C" HRESULT VariableInitialize( | |||
| 284 | {L"WindowsFolder", InitializeVariableCsidlFolder, CSIDL_WINDOWS}, | 288 | {L"WindowsFolder", InitializeVariableCsidlFolder, CSIDL_WINDOWS}, |
| 285 | {L"WindowsVolume", InitializeVariableWindowsVolumeFolder, 0}, | 289 | {L"WindowsVolume", InitializeVariableWindowsVolumeFolder, 0}, |
| 286 | {BURN_BUNDLE_ACTION, InitializeVariableNumeric, 0, FALSE, TRUE}, | 290 | {BURN_BUNDLE_ACTION, InitializeVariableNumeric, 0, FALSE, TRUE}, |
| 291 | {L"WixCanRestart", InitializeVariableProcessTokenPrivilege, (DWORD_PTR)SE_SHUTDOWN_NAME}, | ||
| 287 | {BURN_BUNDLE_COMMAND_LINE_ACTION, InitializeVariableNumeric, 0, FALSE, TRUE}, | 292 | {BURN_BUNDLE_COMMAND_LINE_ACTION, InitializeVariableNumeric, 0, FALSE, TRUE}, |
| 288 | {BURN_BUNDLE_EXECUTE_PACKAGE_CACHE_FOLDER, InitializeVariableString, NULL, FALSE, TRUE}, | 293 | {BURN_BUNDLE_EXECUTE_PACKAGE_CACHE_FOLDER, InitializeVariableString, NULL, FALSE, TRUE}, |
| 289 | {BURN_BUNDLE_EXECUTE_PACKAGE_ACTION, InitializeVariableString, NULL, FALSE, TRUE}, | 294 | {BURN_BUNDLE_EXECUTE_PACKAGE_ACTION, InitializeVariableString, NULL, FALSE, TRUE}, |
| @@ -2165,6 +2170,26 @@ LExit: | |||
| 2165 | return hr; | 2170 | return hr; |
| 2166 | } | 2171 | } |
| 2167 | 2172 | ||
| 2173 | static HRESULT InitializeVariableProcessTokenPrivilege( | ||
| 2174 | __in DWORD_PTR dwpData, | ||
| 2175 | __inout BURN_VARIANT* pValue | ||
| 2176 | ) | ||
| 2177 | { | ||
| 2178 | HRESULT hr = S_OK; | ||
| 2179 | BOOL fHasPrivilege = FALSE; | ||
| 2180 | LPCWSTR wzPrivilegeName = (LPCWSTR)dwpData; | ||
| 2181 | |||
| 2182 | hr = ProcHasPrivilege(::GetCurrentProcess(), wzPrivilegeName, &fHasPrivilege); | ||
| 2183 | ExitOnFailure(hr, "Failed to check if process token has privilege: %ls.", wzPrivilegeName); | ||
| 2184 | |||
| 2185 | // set value | ||
| 2186 | hr = BVariantSetNumeric(pValue, fHasPrivilege); | ||
| 2187 | ExitOnFailure(hr, "Failed to set variant value."); | ||
| 2188 | |||
| 2189 | LExit: | ||
| 2190 | return hr; | ||
| 2191 | } | ||
| 2192 | |||
| 2168 | static HRESULT InitializeSystemLanguageID( | 2193 | static HRESULT InitializeSystemLanguageID( |
| 2169 | __in DWORD_PTR dwpData, | 2194 | __in DWORD_PTR dwpData, |
| 2170 | __inout BURN_VARIANT* pValue | 2195 | __inout BURN_VARIANT* pValue |
