aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/core.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-08-19 14:08:23 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-08-19 17:02:27 -0500
commitb72f58abdf6dd5d0020f174358027158cb52cb72 (patch)
tree3070c1f1fa8a74125a2933f23a1be3c514ed1de7 /src/burn/engine/core.cpp
parentbbc36178172e4198351f2f84a91faf56c65e1475 (diff)
downloadwix-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.cpp24
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(
69static DWORD WINAPI CacheThreadProc( 69static DWORD WINAPI CacheThreadProc(
70 __in LPVOID lpThreadParameter 70 __in LPVOID lpThreadParameter
71 ); 71 );
72static DWORD WINAPI LoggingThreadProc(
73 __in LPVOID lpThreadParameter
74 );
72static void LogPackages( 75static 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
620LExit: 626LExit:
@@ -2325,6 +2331,24 @@ LExit:
2325 return (DWORD)hr; 2331 return (DWORD)hr;
2326} 2332}
2327 2333
2334static 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
2347LExit:
2348
2349 return (DWORD)hr;
2350}
2351
2328static void LogPackages( 2352static 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,