diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-06-03 17:50:22 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-06-07 19:44:36 -0500 |
| commit | 8810aa8908ed7887616d86dd5fb821fcfa92f444 (patch) | |
| tree | 8bc05667c36cc0d3db73504c867e85b01f1a79b0 /src/burn/engine/cache.cpp | |
| parent | 266b097c0b0a13dd4934f55f61cad62ffcbb953d (diff) | |
| download | wix-8810aa8908ed7887616d86dd5fb821fcfa92f444.tar.gz wix-8810aa8908ed7887616d86dd5fb821fcfa92f444.tar.bz2 wix-8810aa8908ed7887616d86dd5fb821fcfa92f444.zip | |
Update Burn algorithm for picking elevated temp path to use SystemTemp.
Diffstat (limited to 'src/burn/engine/cache.cpp')
| -rw-r--r-- | src/burn/engine/cache.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/burn/engine/cache.cpp b/src/burn/engine/cache.cpp index 7fca8cc7..5eacb20d 100644 --- a/src/burn/engine/cache.cpp +++ b/src/burn/engine/cache.cpp | |||
| @@ -1389,6 +1389,8 @@ static HRESULT CalculatePotentialBaseWorkingFolders( | |||
| 1389 | Assert(!pCache->rgsczPotentialBaseWorkingFolders && !pCache->cPotentialBaseWorkingFolders); | 1389 | Assert(!pCache->rgsczPotentialBaseWorkingFolders && !pCache->cPotentialBaseWorkingFolders); |
| 1390 | HRESULT hr = S_OK; | 1390 | HRESULT hr = S_OK; |
| 1391 | LPWSTR sczTemp = NULL; | 1391 | LPWSTR sczTemp = NULL; |
| 1392 | LPWSTR sczPolicy = NULL; | ||
| 1393 | BOOL fNeedsExpansion = FALSE; | ||
| 1392 | 1394 | ||
| 1393 | hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pCache->rgsczPotentialBaseWorkingFolders), 6, sizeof(LPWSTR), 6); | 1395 | hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pCache->rgsczPotentialBaseWorkingFolders), 6, sizeof(LPWSTR), 6); |
| 1394 | ExitOnFailure(hr, "Failed to initialize array."); | 1396 | ExitOnFailure(hr, "Failed to initialize array."); |
| @@ -1408,12 +1410,22 @@ static HRESULT CalculatePotentialBaseWorkingFolders( | |||
| 1408 | // but only use it if elevated because it should be secured against non-admin users. | 1410 | // but only use it if elevated because it should be secured against non-admin users. |
| 1409 | if (pInternalCommand->fInitiallyElevated) | 1411 | if (pInternalCommand->fInitiallyElevated) |
| 1410 | { | 1412 | { |
| 1411 | hr = PolcReadString(POLICY_BURN_REGISTRY_PATH, L"EngineWorkingDirectory", NULL, &sczTemp); | 1413 | hr = PolcReadUnexpandedString(POLICY_BURN_REGISTRY_PATH, L"EngineWorkingDirectory", NULL, &fNeedsExpansion, &sczPolicy); |
| 1412 | ExitOnFailure(hr, "Failed to read EngineWorkingDirectory policy directory."); | 1414 | ExitOnFailure(hr, "Failed to read EngineWorkingDirectory policy directory."); |
| 1413 | 1415 | ||
| 1414 | if (sczTemp) | 1416 | if (S_FALSE != hr) |
| 1415 | { | 1417 | { |
| 1416 | // PolcReadString is supposed to automatically expand REG_EXPAND_SZ values. | 1418 | if (fNeedsExpansion) |
| 1419 | { | ||
| 1420 | hr = EnvExpandEnvironmentStringsForUser(NULL, sczPolicy, &sczTemp, NULL); | ||
| 1421 | ExitOnFailure(hr, "Failed to expand EngineWorkingDirectory policy directory."); | ||
| 1422 | } | ||
| 1423 | else | ||
| 1424 | { | ||
| 1425 | sczTemp = sczPolicy; | ||
| 1426 | sczPolicy = NULL; | ||
| 1427 | } | ||
| 1428 | |||
| 1417 | pCache->rgsczPotentialBaseWorkingFolders[pCache->cPotentialBaseWorkingFolders] = sczTemp; | 1429 | pCache->rgsczPotentialBaseWorkingFolders[pCache->cPotentialBaseWorkingFolders] = sczTemp; |
| 1418 | sczTemp = NULL; | 1430 | sczTemp = NULL; |
| 1419 | ++pCache->cPotentialBaseWorkingFolders; | 1431 | ++pCache->cPotentialBaseWorkingFolders; |
| @@ -1438,6 +1450,7 @@ static HRESULT CalculatePotentialBaseWorkingFolders( | |||
| 1438 | 1450 | ||
| 1439 | LExit: | 1451 | LExit: |
| 1440 | ReleaseStr(sczTemp); | 1452 | ReleaseStr(sczTemp); |
| 1453 | ReleaseStr(sczPolicy); | ||
| 1441 | 1454 | ||
| 1442 | return hr; | 1455 | return hr; |
| 1443 | } | 1456 | } |
