summaryrefslogtreecommitdiff
path: root/src/burn/engine/elevation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/elevation.cpp')
-rw-r--r--src/burn/engine/elevation.cpp40
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
1347extern "C" HRESULT ElevationExecutePackageDependencyAction( 1347extern "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
3289LExit: 3309LExit: