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); |
