diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-08-19 14:08:23 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-08-19 17:02:27 -0500 |
commit | b72f58abdf6dd5d0020f174358027158cb52cb72 (patch) | |
tree | 3070c1f1fa8a74125a2933f23a1be3c514ed1de7 /src/burn/engine/core.cpp | |
parent | bbc36178172e4198351f2f84a91faf56c65e1475 (diff) | |
download | wix-b72f58abdf6dd5d0020f174358027158cb52cb72.tar.gz wix-b72f58abdf6dd5d0020f174358027158cb52cb72.tar.bz2 wix-b72f58abdf6dd5d0020f174358027158cb52cb72.zip |
Use a dedicated pipe for redirecting logging from the elevated process.
Fixes 6869
Diffstat (limited to 'src/burn/engine/core.cpp')
-rw-r--r-- | src/burn/engine/core.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index bfd979de..ed824411 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp | |||
@@ -69,6 +69,9 @@ static HRESULT DetectPackagePayloadsCached( | |||
69 | static DWORD WINAPI CacheThreadProc( | 69 | static DWORD WINAPI CacheThreadProc( |
70 | __in LPVOID lpThreadParameter | 70 | __in LPVOID lpThreadParameter |
71 | ); | 71 | ); |
72 | static DWORD WINAPI LoggingThreadProc( | ||
73 | __in LPVOID lpThreadParameter | ||
74 | ); | ||
72 | static void LogPackages( | 75 | static void LogPackages( |
73 | __in_opt const BURN_PACKAGE* pUpgradeBundlePackage, | 76 | __in_opt const BURN_PACKAGE* pUpgradeBundlePackage, |
74 | __in_opt const BURN_PACKAGE* pForwardCompatibleBundlePackage, | 77 | __in_opt const BURN_PACKAGE* pForwardCompatibleBundlePackage, |
@@ -615,6 +618,9 @@ extern "C" HRESULT CoreElevate( | |||
615 | 618 | ||
616 | hr = VariableSetNumeric(&pEngineState->variables, BURN_BUNDLE_ELEVATED, TRUE, TRUE); | 619 | hr = VariableSetNumeric(&pEngineState->variables, BURN_BUNDLE_ELEVATED, TRUE, TRUE); |
617 | ExitOnFailure(hr, "Failed to overwrite the %ls built-in variable.", BURN_BUNDLE_ELEVATED); | 620 | ExitOnFailure(hr, "Failed to overwrite the %ls built-in variable.", BURN_BUNDLE_ELEVATED); |
621 | |||
622 | pEngineState->hUnelevatedLoggingThread = ::CreateThread(NULL, 0, LoggingThreadProc, pEngineState, 0, NULL); | ||
623 | ExitOnNullWithLastError(pEngineState->hUnelevatedLoggingThread, hr, "Failed to create unelevated logging thread."); | ||
618 | } | 624 | } |
619 | 625 | ||
620 | LExit: | 626 | LExit: |
@@ -2325,6 +2331,24 @@ LExit: | |||
2325 | return (DWORD)hr; | 2331 | return (DWORD)hr; |
2326 | } | 2332 | } |
2327 | 2333 | ||
2334 | static DWORD WINAPI LoggingThreadProc( | ||
2335 | __in LPVOID lpThreadParameter | ||
2336 | ) | ||
2337 | { | ||
2338 | HRESULT hr = S_OK; | ||
2339 | BURN_ENGINE_STATE* pEngineState = reinterpret_cast<BURN_ENGINE_STATE*>(lpThreadParameter); | ||
2340 | BURN_PIPE_RESULT result = { }; | ||
2341 | |||
2342 | hr = PipePumpMessages(pEngineState->companionConnection.hLoggingPipe, NULL, NULL, &result); | ||
2343 | ExitOnFailure(hr, "Failed to pump logging messages for elevated process."); | ||
2344 | |||
2345 | hr = (HRESULT)result.dwResult; | ||
2346 | |||
2347 | LExit: | ||
2348 | |||
2349 | return (DWORD)hr; | ||
2350 | } | ||
2351 | |||
2328 | static void LogPackages( | 2352 | static void LogPackages( |
2329 | __in_opt const BURN_PACKAGE* pUpgradeBundlePackage, | 2353 | __in_opt const BURN_PACKAGE* pUpgradeBundlePackage, |
2330 | __in_opt const BURN_PACKAGE* pForwardCompatibleBundlePackage, | 2354 | __in_opt const BURN_PACKAGE* pForwardCompatibleBundlePackage, |