From e71de85e4ec2899ecd01ac236603cf1dddc4a6c7 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sun, 15 Nov 2020 21:38:57 -0600 Subject: Use plan to decide when to begin, commit, or rollback MSI transactions --- src/engine/plan.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/engine/plan.h') diff --git a/src/engine/plan.h b/src/engine/plan.h index 5fddd72f..407c1d48 100644 --- a/src/engine/plan.h +++ b/src/engine/plan.h @@ -68,6 +68,8 @@ enum BURN_EXECUTE_ACTION_TYPE BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY, BURN_EXECUTE_ACTION_TYPE_REGISTRATION, BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE, + BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION, + BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION, }; enum BURN_CLEAN_ACTION_TYPE @@ -214,16 +216,19 @@ typedef struct _BURN_ORDERED_PATCHES BURN_PACKAGE* pPackage; } BURN_ORDERED_PATCHES; +typedef struct _BURN_EXECUTE_ACTION_CHECKPOINT +{ + DWORD dwId; + BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary; +} BURN_EXECUTE_ACTION_CHECKPOINT; + typedef struct _BURN_EXECUTE_ACTION { BURN_EXECUTE_ACTION_TYPE type; BOOL fDeleted; // used to skip an action after it was planned since deleting actions out of the plan is too hard. union { - struct - { - DWORD dwId; - } checkpoint; + BURN_EXECUTE_ACTION_CHECKPOINT checkpoint; struct { HANDLE hEvent; @@ -307,6 +312,10 @@ typedef struct _BURN_EXECUTE_ACTION LPWSTR sczInstalledProductCode; VERUTIL_VERSION* pInstalledVersion; } compatiblePackage; + struct + { + BURN_ROLLBACK_BOUNDARY* pRollbackBoundary; + } msiTransaction; }; } BURN_EXECUTE_ACTION; @@ -368,7 +377,8 @@ typedef struct _BURN_PLAN DWORD cPayloadProgress; STRINGDICT_HANDLE shPayloadProgress; - DWORD dwNextCheckpointId; + DWORD dwNextCheckpointId; // for plan internal use + BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary; // for plan internal use } BURN_PLAN; -- cgit v1.2.3-55-g6feb