diff options
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 |