aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-08-19 13:47:50 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-08-19 17:02:27 -0500
commit1c4dc6b1cd2aa3ecd05fdb22f9889ed87e61cc68 (patch)
tree1018e1fded2b24a7adf98cdd31ff19a071a1edd0 /src/burn
parent4a53029a94f706de48c6750481377f808724fe47 (diff)
downloadwix-1c4dc6b1cd2aa3ecd05fdb22f9889ed87e61cc68.tar.gz
wix-1c4dc6b1cd2aa3ecd05fdb22f9889ed87e61cc68.tar.bz2
wix-1c4dc6b1cd2aa3ecd05fdb22f9889ed87e61cc68.zip
Resume automatic updates as part of ApplyUninitialize.
Fixes first half of 6870
Diffstat (limited to 'src/burn')
-rw-r--r--src/burn/engine/elevation.cpp24
-rw-r--r--src/burn/engine/elevation.h1
-rw-r--r--src/burn/engine/engine.cpp8
3 files changed, 20 insertions, 13 deletions
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp
index ef9c6e97..e30a05bb 100644
--- a/src/burn/engine/elevation.cpp
+++ b/src/burn/engine/elevation.cpp
@@ -189,7 +189,8 @@ static HRESULT ElevatedProcessDetect(
189 ); 189 );
190static HRESULT OnApplyUninitialize( 190static HRESULT OnApplyUninitialize(
191 __in HANDLE* phLock, 191 __in HANDLE* phLock,
192 __in BOOL* pfApplying 192 __in BOOL* pfApplying,
193 __in BOOL* pfDisabledAutomaticUpdates
193 ); 194 );
194static HRESULT OnSessionBegin( 195static HRESULT OnSessionBegin(
195 __in BURN_CACHE* pCache, 196 __in BURN_CACHE* pCache,
@@ -1543,7 +1544,6 @@ extern "C" HRESULT ElevationChildPumpMessages(
1543 __in BURN_REGISTRATION* pRegistration, 1544 __in BURN_REGISTRATION* pRegistration,
1544 __in BURN_USER_EXPERIENCE* pUserExperience, 1545 __in BURN_USER_EXPERIENCE* pUserExperience,
1545 __out HANDLE* phLock, 1546 __out HANDLE* phLock,
1546 __out BOOL* pfDisabledAutomaticUpdates,
1547 __out DWORD* pdwChildExitCode, 1547 __out DWORD* pdwChildExitCode,
1548 __out BOOL* pfRestart, 1548 __out BOOL* pfRestart,
1549 __out BOOL* pfApplying 1549 __out BOOL* pfApplying
@@ -1554,6 +1554,7 @@ extern "C" HRESULT ElevationChildPumpMessages(
1554 BURN_ELEVATION_CHILD_MESSAGE_CONTEXT context = { }; 1554 BURN_ELEVATION_CHILD_MESSAGE_CONTEXT context = { };
1555 HANDLE hCacheThread = NULL; 1555 HANDLE hCacheThread = NULL;
1556 BURN_PIPE_RESULT result = { }; 1556 BURN_PIPE_RESULT result = { };
1557 BOOL fDisabledAutomaticUpdates = FALSE;
1557 1558
1558 cacheContext.dwLoggingTlsId = dwLoggingTlsId; 1559 cacheContext.dwLoggingTlsId = dwLoggingTlsId;
1559 cacheContext.hPipe = hCachePipe; 1560 cacheContext.hPipe = hCachePipe;
@@ -1568,7 +1569,7 @@ extern "C" HRESULT ElevationChildPumpMessages(
1568 context.dwLoggingTlsId = dwLoggingTlsId; 1569 context.dwLoggingTlsId = dwLoggingTlsId;
1569 context.hPipe = hPipe; 1570 context.hPipe = hPipe;
1570 context.phLock = phLock; 1571 context.phLock = phLock;
1571 context.pfDisabledAutomaticUpdates = pfDisabledAutomaticUpdates; 1572 context.pfDisabledAutomaticUpdates = &fDisabledAutomaticUpdates;
1572 context.pfApplying = pfApplying; 1573 context.pfApplying = pfApplying;
1573 context.pApprovedExes = pApprovedExes; 1574 context.pApprovedExes = pApprovedExes;
1574 context.pCache = pCache; 1575 context.pCache = pCache;
@@ -1595,6 +1596,11 @@ extern "C" HRESULT ElevationChildPumpMessages(
1595LExit: 1596LExit:
1596 ReleaseHandle(hCacheThread); 1597 ReleaseHandle(hCacheThread);
1597 1598
1599 if (fDisabledAutomaticUpdates)
1600 {
1601 ElevationChildResumeAutomaticUpdates();
1602 }
1603
1598 return hr; 1604 return hr;
1599} 1605}
1600 1606
@@ -2128,7 +2134,7 @@ static HRESULT ProcessElevatedChildMessage(
2128 break; 2134 break;
2129 2135
2130 case BURN_ELEVATION_MESSAGE_TYPE_APPLY_UNINITIALIZE: 2136 case BURN_ELEVATION_MESSAGE_TYPE_APPLY_UNINITIALIZE:
2131 hrResult = OnApplyUninitialize(pContext->phLock, pContext->pfApplying); 2137 hrResult = OnApplyUninitialize(pContext->phLock, pContext->pfApplying, pContext->pfDisabledAutomaticUpdates);
2132 break; 2138 break;
2133 2139
2134 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_BEGIN: 2140 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_BEGIN:
@@ -2433,7 +2439,8 @@ LExit:
2433 2439
2434static HRESULT OnApplyUninitialize( 2440static HRESULT OnApplyUninitialize(
2435 __in HANDLE* phLock, 2441 __in HANDLE* phLock,
2436 __in BOOL* pfApplying 2442 __in BOOL* pfApplying,
2443 __in BOOL* pfDisabledAutomaticUpdates
2437 ) 2444 )
2438{ 2445{
2439 Assert(phLock); 2446 Assert(phLock);
@@ -2442,6 +2449,13 @@ static HRESULT OnApplyUninitialize(
2442 2449
2443 *pfApplying = FALSE; 2450 *pfApplying = FALSE;
2444 2451
2452 if (*pfDisabledAutomaticUpdates)
2453 {
2454 *pfDisabledAutomaticUpdates = FALSE;
2455
2456 ElevationChildResumeAutomaticUpdates();
2457 }
2458
2445 if (*phLock) 2459 if (*phLock)
2446 { 2460 {
2447 ::ReleaseMutex(*phLock); 2461 ::ReleaseMutex(*phLock);
diff --git a/src/burn/engine/elevation.h b/src/burn/engine/elevation.h
index d08d2edc..bda0fdef 100644
--- a/src/burn/engine/elevation.h
+++ b/src/burn/engine/elevation.h
@@ -178,7 +178,6 @@ HRESULT ElevationChildPumpMessages(
178 __in BURN_REGISTRATION* pRegistration, 178 __in BURN_REGISTRATION* pRegistration,
179 __in BURN_USER_EXPERIENCE* pUserExperience, 179 __in BURN_USER_EXPERIENCE* pUserExperience,
180 __out HANDLE* phLock, 180 __out HANDLE* phLock,
181 __out BOOL* pfDisabledAutomaticUpdates,
182 __out DWORD* pdwChildExitCode, 181 __out DWORD* pdwChildExitCode,
183 __out BOOL* pfRestart, 182 __out BOOL* pfRestart,
184 __out BOOL* pfApplying 183 __out BOOL* pfApplying
diff --git a/src/burn/engine/engine.cpp b/src/burn/engine/engine.cpp
index 334ea23b..2d2da1d5 100644
--- a/src/burn/engine/engine.cpp
+++ b/src/burn/engine/engine.cpp
@@ -638,7 +638,6 @@ static HRESULT RunElevated(
638{ 638{
639 HRESULT hr = S_OK; 639 HRESULT hr = S_OK;
640 HANDLE hLock = NULL; 640 HANDLE hLock = NULL;
641 BOOL fDisabledAutomaticUpdates = FALSE;
642 641
643 // connect to per-user process 642 // connect to per-user process
644 hr = PipeChildConnect(&pEngineState->companionConnection, TRUE); 643 hr = PipeChildConnect(&pEngineState->companionConnection, TRUE);
@@ -666,7 +665,7 @@ static HRESULT RunElevated(
666 SrpInitialize(TRUE); 665 SrpInitialize(TRUE);
667 666
668 // Pump messages from parent process. 667 // Pump messages from parent process.
669 hr = ElevationChildPumpMessages(pEngineState->dwElevatedLoggingTlsId, pEngineState->companionConnection.hPipe, pEngineState->companionConnection.hCachePipe, &pEngineState->approvedExes, &pEngineState->cache, &pEngineState->containers, &pEngineState->packages, &pEngineState->payloads, &pEngineState->variables, &pEngineState->registration, &pEngineState->userExperience, &hLock, &fDisabledAutomaticUpdates, &pEngineState->userExperience.dwExitCode, &pEngineState->fRestart, &pEngineState->plan.fApplying); 668 hr = ElevationChildPumpMessages(pEngineState->dwElevatedLoggingTlsId, pEngineState->companionConnection.hPipe, pEngineState->companionConnection.hCachePipe, &pEngineState->approvedExes, &pEngineState->cache, &pEngineState->containers, &pEngineState->packages, &pEngineState->payloads, &pEngineState->variables, &pEngineState->registration, &pEngineState->userExperience, &hLock, &pEngineState->userExperience.dwExitCode, &pEngineState->fRestart, &pEngineState->plan.fApplying);
670 LogRedirect(NULL, NULL); // reset logging so the next failure gets written to "log buffer" for the failure log. 669 LogRedirect(NULL, NULL); // reset logging so the next failure gets written to "log buffer" for the failure log.
671 ExitOnFailure(hr, "Failed to pump messages from parent process."); 670 ExitOnFailure(hr, "Failed to pump messages from parent process.");
672 671
@@ -676,11 +675,6 @@ LExit:
676 // If the message window is still around, close it. 675 // If the message window is still around, close it.
677 UiCloseMessageWindow(pEngineState); 676 UiCloseMessageWindow(pEngineState);
678 677
679 if (fDisabledAutomaticUpdates)
680 {
681 ElevationChildResumeAutomaticUpdates();
682 }
683
684 if (hLock) 678 if (hLock)
685 { 679 {
686 ::ReleaseMutex(hLock); 680 ::ReleaseMutex(hLock);