diff options
Diffstat (limited to 'src/burn/engine/elevation.cpp')
-rw-r--r-- | src/burn/engine/elevation.cpp | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp index 75679acd..86b65cf9 100644 --- a/src/burn/engine/elevation.cpp +++ b/src/burn/engine/elevation.cpp | |||
@@ -1346,7 +1346,8 @@ LExit: | |||
1346 | 1346 | ||
1347 | extern "C" HRESULT ElevationExecutePackageDependencyAction( | 1347 | extern "C" HRESULT ElevationExecutePackageDependencyAction( |
1348 | __in HANDLE hPipe, | 1348 | __in HANDLE hPipe, |
1349 | __in BURN_EXECUTE_ACTION* pExecuteAction | 1349 | __in BURN_EXECUTE_ACTION* pExecuteAction, |
1350 | __in BOOL fRollback | ||
1350 | ) | 1351 | ) |
1351 | { | 1352 | { |
1352 | HRESULT hr = S_OK; | 1353 | HRESULT hr = S_OK; |
@@ -1359,11 +1360,20 @@ extern "C" HRESULT ElevationExecutePackageDependencyAction( | |||
1359 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.pPackage->sczId); | 1360 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.pPackage->sczId); |
1360 | ExitOnFailure(hr, "Failed to write package id to message buffer."); | 1361 | ExitOnFailure(hr, "Failed to write package id to message buffer."); |
1361 | 1362 | ||
1363 | hr = BuffWriteNumber(&pbData, &cbData, (DWORD)fRollback); | ||
1364 | ExitOnFailure(hr, "Failed to write rollback flag to message buffer."); | ||
1365 | |||
1362 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.sczBundleProviderKey); | 1366 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.sczBundleProviderKey); |
1363 | ExitOnFailure(hr, "Failed to write bundle dependency key to message buffer."); | 1367 | ExitOnFailure(hr, "Failed to write bundle dependency key to message buffer."); |
1364 | 1368 | ||
1365 | hr = BuffWriteNumber(&pbData, &cbData, pExecuteAction->packageDependency.action); | 1369 | // Dependent actions. |
1366 | ExitOnFailure(hr, "Failed to write action to message buffer."); | 1370 | for (DWORD i = 0; i < pExecuteAction->packageProvider.pPackage->cDependencyProviders; ++i) |
1371 | { | ||
1372 | BURN_DEPENDENCY_PROVIDER* pProvider = pExecuteAction->packageProvider.pPackage->rgDependencyProviders + i; | ||
1373 | BURN_DEPENDENCY_ACTION* pAction = fRollback ? &pProvider->dependentRollback : &pProvider->dependentExecute; | ||
1374 | hr = BuffWriteNumber(&pbData, &cbData, (DWORD)*pAction); | ||
1375 | ExitOnFailure(hr, "Failed to write dependent action to message buffer."); | ||
1376 | } | ||
1367 | 1377 | ||
1368 | // Send the message. | 1378 | // Send the message. |
1369 | hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_DEPENDENCY, pbData, cbData, NULL, NULL, &dwResult); | 1379 | hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_DEPENDENCY, pbData, cbData, NULL, NULL, &dwResult); |
@@ -3260,6 +3270,7 @@ static HRESULT OnExecutePackageDependencyAction( | |||
3260 | HRESULT hr = S_OK; | 3270 | HRESULT hr = S_OK; |
3261 | SIZE_T iData = 0; | 3271 | SIZE_T iData = 0; |
3262 | LPWSTR sczPackage = NULL; | 3272 | LPWSTR sczPackage = NULL; |
3273 | BOOL fRollback = FALSE; | ||
3263 | BURN_EXECUTE_ACTION executeAction = { }; | 3274 | BURN_EXECUTE_ACTION executeAction = { }; |
3264 | 3275 | ||
3265 | executeAction.type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY; | 3276 | executeAction.type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY; |
@@ -3268,12 +3279,6 @@ static HRESULT OnExecutePackageDependencyAction( | |||
3268 | hr = BuffReadString(pbData, cbData, &iData, &sczPackage); | 3279 | hr = BuffReadString(pbData, cbData, &iData, &sczPackage); |
3269 | ExitOnFailure(hr, "Failed to read package id from message buffer."); | 3280 | ExitOnFailure(hr, "Failed to read package id from message buffer."); |
3270 | 3281 | ||
3271 | hr = BuffReadString(pbData, cbData, &iData, &executeAction.packageDependency.sczBundleProviderKey); | ||
3272 | ExitOnFailure(hr, "Failed to read bundle dependency key from message buffer."); | ||
3273 | |||
3274 | hr = BuffReadNumber(pbData, cbData, &iData, reinterpret_cast<DWORD*>(&executeAction.packageDependency.action)); | ||
3275 | ExitOnFailure(hr, "Failed to read action."); | ||
3276 | |||
3277 | // Find the package again. | 3282 | // Find the package again. |
3278 | hr = PackageFindById(pPackages, sczPackage, &executeAction.packageDependency.pPackage); | 3283 | hr = PackageFindById(pPackages, sczPackage, &executeAction.packageDependency.pPackage); |
3279 | if (E_NOTFOUND == hr) | 3284 | if (E_NOTFOUND == hr) |
@@ -3282,8 +3287,23 @@ static HRESULT OnExecutePackageDependencyAction( | |||
3282 | } | 3287 | } |
3283 | ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); | 3288 | ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); |
3284 | 3289 | ||
3290 | hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&fRollback); | ||
3291 | ExitOnFailure(hr, "Failed to read rollback flag."); | ||
3292 | |||
3293 | hr = BuffReadString(pbData, cbData, &iData, &executeAction.packageDependency.sczBundleProviderKey); | ||
3294 | ExitOnFailure(hr, "Failed to read bundle dependency key from message buffer."); | ||
3295 | |||
3296 | // Read dependent actions. | ||
3297 | for (DWORD i = 0; i < executeAction.packageProvider.pPackage->cDependencyProviders; ++i) | ||
3298 | { | ||
3299 | BURN_DEPENDENCY_PROVIDER* pProvider = executeAction.packageProvider.pPackage->rgDependencyProviders + i; | ||
3300 | BURN_DEPENDENCY_ACTION* pAction = fRollback ? &pProvider->dependentRollback : &pProvider->dependentExecute; | ||
3301 | hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)pAction); | ||
3302 | ExitOnFailure(hr, "Failed to read dependent action."); | ||
3303 | } | ||
3304 | |||
3285 | // Execute the package dependency action. | 3305 | // Execute the package dependency action. |
3286 | hr = DependencyExecutePackageDependencyAction(TRUE, &executeAction); | 3306 | hr = DependencyExecutePackageDependencyAction(TRUE, &executeAction, fRollback); |
3287 | ExitOnFailure(hr, "Failed to execute package dependency action."); | 3307 | ExitOnFailure(hr, "Failed to execute package dependency action."); |
3288 | 3308 | ||
3289 | LExit: | 3309 | LExit: |