summaryrefslogtreecommitdiff
path: root/src/burn/engine/variable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/variable.cpp')
-rw-r--r--src/burn/engine/variable.cpp25
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 );
156static HRESULT InitializeVariableProcessTokenPrivilege(
157 __in DWORD_PTR dwpData,
158 __inout BURN_VARIANT* pValue
159 );
156static HRESULT InitializeSystemLanguageID( 160static 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
2173static 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
2189LExit:
2190 return hr;
2191}
2192
2168static HRESULT InitializeSystemLanguageID( 2193static HRESULT InitializeSystemLanguageID(
2169 __in DWORD_PTR dwpData, 2194 __in DWORD_PTR dwpData,
2170 __inout BURN_VARIANT* pValue 2195 __inout BURN_VARIANT* pValue