diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-05-03 15:30:50 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-05-04 10:05:21 -0500 |
commit | 29f7e00586412163a20e298fbf84505f8a917425 (patch) | |
tree | 30257a3544f6982ded159443ebed0eb933f11a51 /src/burn/engine/elevation.cpp | |
parent | 41d2c12d60ee84cefc26ec99abb328701883c8f5 (diff) | |
download | wix-29f7e00586412163a20e298fbf84505f8a917425.tar.gz wix-29f7e00586412163a20e298fbf84505f8a917425.tar.bz2 wix-29f7e00586412163a20e298fbf84505f8a917425.zip |
Only block shutdown during Apply.
Diffstat (limited to 'src/burn/engine/elevation.cpp')
-rw-r--r-- | src/burn/engine/elevation.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp index d2c5c8c6..75b24ec3 100644 --- a/src/burn/engine/elevation.cpp +++ b/src/burn/engine/elevation.cpp | |||
@@ -94,6 +94,7 @@ typedef struct _BURN_ELEVATION_CHILD_MESSAGE_CONTEXT | |||
94 | HANDLE hPipe; | 94 | HANDLE hPipe; |
95 | HANDLE* phLock; | 95 | HANDLE* phLock; |
96 | BOOL* pfDisabledAutomaticUpdates; | 96 | BOOL* pfDisabledAutomaticUpdates; |
97 | BOOL* pfApplying; | ||
97 | BURN_APPROVED_EXES* pApprovedExes; | 98 | BURN_APPROVED_EXES* pApprovedExes; |
98 | BURN_CACHE* pCache; | 99 | BURN_CACHE* pCache; |
99 | BURN_CONTAINERS* pContainers; | 100 | BURN_CONTAINERS* pContainers; |
@@ -176,6 +177,7 @@ static HRESULT OnApplyInitialize( | |||
176 | __in BURN_PACKAGES* pPackages, | 177 | __in BURN_PACKAGES* pPackages, |
177 | __in HANDLE* phLock, | 178 | __in HANDLE* phLock, |
178 | __in BOOL* pfDisabledWindowsUpdate, | 179 | __in BOOL* pfDisabledWindowsUpdate, |
180 | __in BOOL* pfApplying, | ||
179 | __in BYTE* pbData, | 181 | __in BYTE* pbData, |
180 | __in SIZE_T cbData | 182 | __in SIZE_T cbData |
181 | ); | 183 | ); |
@@ -185,7 +187,8 @@ static HRESULT ElevatedProcessDetect( | |||
185 | __in BURN_PACKAGES* pPackages | 187 | __in BURN_PACKAGES* pPackages |
186 | ); | 188 | ); |
187 | static HRESULT OnApplyUninitialize( | 189 | static HRESULT OnApplyUninitialize( |
188 | __in HANDLE* phLock | 190 | __in HANDLE* phLock, |
191 | __in BOOL* pfApplying | ||
189 | ); | 192 | ); |
190 | static HRESULT OnSessionBegin( | 193 | static HRESULT OnSessionBegin( |
191 | __in BURN_CACHE* pCache, | 194 | __in BURN_CACHE* pCache, |
@@ -1538,7 +1541,8 @@ extern "C" HRESULT ElevationChildPumpMessages( | |||
1538 | __out HANDLE* phLock, | 1541 | __out HANDLE* phLock, |
1539 | __out BOOL* pfDisabledAutomaticUpdates, | 1542 | __out BOOL* pfDisabledAutomaticUpdates, |
1540 | __out DWORD* pdwChildExitCode, | 1543 | __out DWORD* pdwChildExitCode, |
1541 | __out BOOL* pfRestart | 1544 | __out BOOL* pfRestart, |
1545 | __out BOOL* pfApplying | ||
1542 | ) | 1546 | ) |
1543 | { | 1547 | { |
1544 | HRESULT hr = S_OK; | 1548 | HRESULT hr = S_OK; |
@@ -1561,6 +1565,7 @@ extern "C" HRESULT ElevationChildPumpMessages( | |||
1561 | context.hPipe = hPipe; | 1565 | context.hPipe = hPipe; |
1562 | context.phLock = phLock; | 1566 | context.phLock = phLock; |
1563 | context.pfDisabledAutomaticUpdates = pfDisabledAutomaticUpdates; | 1567 | context.pfDisabledAutomaticUpdates = pfDisabledAutomaticUpdates; |
1568 | context.pfApplying = pfApplying; | ||
1564 | context.pApprovedExes = pApprovedExes; | 1569 | context.pApprovedExes = pApprovedExes; |
1565 | context.pCache = pCache; | 1570 | context.pCache = pCache; |
1566 | context.pContainers = pContainers; | 1571 | context.pContainers = pContainers; |
@@ -2114,11 +2119,11 @@ static HRESULT ProcessElevatedChildMessage( | |||
2114 | break; | 2119 | break; |
2115 | 2120 | ||
2116 | case BURN_ELEVATION_MESSAGE_TYPE_APPLY_INITIALIZE: | 2121 | case BURN_ELEVATION_MESSAGE_TYPE_APPLY_INITIALIZE: |
2117 | hrResult = OnApplyInitialize(pContext->hPipe, pContext->pVariables, pContext->pRegistration, pContext->pPackages, pContext->phLock, pContext->pfDisabledAutomaticUpdates, (BYTE*)pMsg->pvData, pMsg->cbData); | 2122 | hrResult = OnApplyInitialize(pContext->hPipe, pContext->pVariables, pContext->pRegistration, pContext->pPackages, pContext->phLock, pContext->pfDisabledAutomaticUpdates, pContext->pfApplying, (BYTE*)pMsg->pvData, pMsg->cbData); |
2118 | break; | 2123 | break; |
2119 | 2124 | ||
2120 | case BURN_ELEVATION_MESSAGE_TYPE_APPLY_UNINITIALIZE: | 2125 | case BURN_ELEVATION_MESSAGE_TYPE_APPLY_UNINITIALIZE: |
2121 | hrResult = OnApplyUninitialize(pContext->phLock); | 2126 | hrResult = OnApplyUninitialize(pContext->phLock, pContext->pfApplying); |
2122 | break; | 2127 | break; |
2123 | 2128 | ||
2124 | case BURN_ELEVATION_MESSAGE_TYPE_SESSION_BEGIN: | 2129 | case BURN_ELEVATION_MESSAGE_TYPE_SESSION_BEGIN: |
@@ -2267,6 +2272,7 @@ static HRESULT OnApplyInitialize( | |||
2267 | __in BURN_PACKAGES* pPackages, | 2272 | __in BURN_PACKAGES* pPackages, |
2268 | __in HANDLE* phLock, | 2273 | __in HANDLE* phLock, |
2269 | __in BOOL* pfDisabledWindowsUpdate, | 2274 | __in BOOL* pfDisabledWindowsUpdate, |
2275 | __in BOOL* pfApplying, | ||
2270 | __in BYTE* pbData, | 2276 | __in BYTE* pbData, |
2271 | __in SIZE_T cbData | 2277 | __in SIZE_T cbData |
2272 | ) | 2278 | ) |
@@ -2296,6 +2302,8 @@ static HRESULT OnApplyInitialize( | |||
2296 | hr = ApplyLock(TRUE, phLock); | 2302 | hr = ApplyLock(TRUE, phLock); |
2297 | ExitOnFailure(hr, "Failed to acquire lock due to setup in other session."); | 2303 | ExitOnFailure(hr, "Failed to acquire lock due to setup in other session."); |
2298 | 2304 | ||
2305 | *pfApplying = TRUE; | ||
2306 | |||
2299 | // Detect. | 2307 | // Detect. |
2300 | hr = ElevatedProcessDetect(pRegistration, pVariables, pPackages); | 2308 | hr = ElevatedProcessDetect(pRegistration, pVariables, pPackages); |
2301 | ExitOnFailure(hr, "Failed to run detection in elevated process."); | 2309 | ExitOnFailure(hr, "Failed to run detection in elevated process."); |
@@ -2419,13 +2427,16 @@ LExit: | |||
2419 | } | 2427 | } |
2420 | 2428 | ||
2421 | static HRESULT OnApplyUninitialize( | 2429 | static HRESULT OnApplyUninitialize( |
2422 | __in HANDLE* phLock | 2430 | __in HANDLE* phLock, |
2431 | __in BOOL* pfApplying | ||
2423 | ) | 2432 | ) |
2424 | { | 2433 | { |
2425 | Assert(phLock); | 2434 | Assert(phLock); |
2426 | 2435 | ||
2427 | // TODO: end system restore point. | 2436 | // TODO: end system restore point. |
2428 | 2437 | ||
2438 | *pfApplying = FALSE; | ||
2439 | |||
2429 | if (*phLock) | 2440 | if (*phLock) |
2430 | { | 2441 | { |
2431 | ::ReleaseMutex(*phLock); | 2442 | ::ReleaseMutex(*phLock); |