From 9453eaa9a38f78e248526ddd996485140a5d4d9a Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sun, 13 Mar 2022 23:51:36 -0500 Subject: Make engine skip planning if there are any downgrade related bundles. Fixes 6677, 6722 Reverts 6537 --- .../inc/BootstrapperApplication.h | 13 +++++++++++ .../WixToolset.Mba.Core/BootstrapperApplication.cs | 25 ++++++++++++++++++++++ src/api/burn/WixToolset.Mba.Core/EventArgs.cs | 24 +++++++++++++++++++++ .../IBootstrapperApplication.cs | 10 +++++++++ .../IDefaultBootstrapperApplication.cs | 5 +++++ src/api/burn/balutil/inc/BAFunctions.h | 1 + src/api/burn/balutil/inc/BalBaseBAFunctions.h | 8 +++++++ src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h | 1 + .../balutil/inc/BalBaseBootstrapperApplication.h | 8 +++++++ .../inc/BalBaseBootstrapperApplicationProc.h | 12 +++++++++++ .../burn/balutil/inc/IBootstrapperApplication.h | 7 ++++++ 11 files changed, 114 insertions(+) (limited to 'src/api') diff --git a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h index b507b167..0b81b35a 100644 --- a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h +++ b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h @@ -223,6 +223,7 @@ enum BOOTSTRAPPER_APPLICATION_MESSAGE BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANNEDCOMPATIBLEPACKAGE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRESTORERELATEDBUNDLE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE, + BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYDOWNGRADE, }; enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION @@ -354,6 +355,18 @@ struct BA_ONAPPLYCOMPLETE_RESULTS BOOTSTRAPPER_APPLYCOMPLETE_ACTION action; }; +struct BA_ONAPPLYDOWNGRADE_ARGS +{ + DWORD cbSize; + HRESULT hrRecommended; +}; + +struct BA_ONAPPLYDOWNGRADE_RESULTS +{ + DWORD cbSize; + HRESULT hrStatus; +}; + struct BA_ONBEGINMSITRANSACTIONBEGIN_ARGS { DWORD cbSize; diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs index fd36cf26..8a2e0e93 100644 --- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs @@ -208,6 +208,9 @@ namespace WixToolset.Mba.Core /// public event EventHandler ApplyComplete; + /// + public event EventHandler ApplyDowngrade; + /// public event EventHandler ExecuteProgress; @@ -1055,6 +1058,19 @@ namespace WixToolset.Mba.Core } } + /// + /// Called by the engine, raises the event. + /// + /// Additional arguments for this event. + protected virtual void OnApplyDowngrade(ApplyDowngradeEventArgs args) + { + EventHandler handler = this.ApplyDowngrade; + if (null != handler) + { + handler(this, args); + } + } + /// /// Called by the engine, raises the event. /// @@ -1907,6 +1923,15 @@ namespace WixToolset.Mba.Core return args.HResult; } + int IBootstrapperApplication.OnApplyDowngrade(int hrRecommendation, ref int hrStatus) + { + ApplyDowngradeEventArgs args = new ApplyDowngradeEventArgs(hrRecommendation, hrStatus); + this.OnApplyDowngrade(args); + + hrStatus = args.Status; + return args.HResult; + } + int IBootstrapperApplication.OnLaunchApprovedExeBegin(ref bool fCancel) { LaunchApprovedExeBeginEventArgs args = new LaunchApprovedExeBeginEventArgs(fCancel); diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs index d8ec7998..c93c2885 100644 --- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs +++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs @@ -1858,6 +1858,30 @@ namespace WixToolset.Mba.Core public ApplyRestart Restart { get; private set; } } + /// + /// Event arguments for + /// + [Serializable] + public class ApplyDowngradeEventArgs : HResultEventArgs + { + /// + public ApplyDowngradeEventArgs(int hrRecommendation, int hrStatus) + { + this.Recommendation = hrRecommendation; + this.Status = hrStatus; + } + + /// + /// Gets the recommended HRESULT. + /// + public int Recommendation { get; private set; } + + /// + /// Gets or sets the HRESULT for Apply. + /// + public int Status { get; set; } + } + /// /// EventArgs for . /// diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs index 4ab0f8d9..d4fe8320 100644 --- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs @@ -1160,6 +1160,16 @@ namespace WixToolset.Mba.Core [MarshalAs(UnmanagedType.U4)] ref RelatedBundlePlanType pRequestedType, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); + + /// + /// See . + /// + [PreserveSig] + [return: MarshalAs(UnmanagedType.I4)] + int OnApplyDowngrade( + [MarshalAs(UnmanagedType.I4)] int hrRecommended, + [MarshalAs(UnmanagedType.I4)] ref int hrStatus + ); } /// diff --git a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs index ebd1580b..c9284b69 100644 --- a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs @@ -19,6 +19,11 @@ namespace WixToolset.Mba.Core /// event EventHandler ApplyComplete; + /// + /// Fired when the plan determined that nothing should happen to prevent downgrading. + /// + event EventHandler ApplyDowngrade; + /// /// Fired when the engine is about to begin an MSI transaction. /// diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h index f772eb3f..58c26166 100644 --- a/src/api/burn/balutil/inc/BAFunctions.h +++ b/src/api/burn/balutil/inc/BAFunctions.h @@ -90,6 +90,7 @@ enum BA_FUNCTIONS_MESSAGE BA_FUNCTIONS_MESSAGE_ONPLANNEDCOMPATIBLEPACKAGE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANNEDCOMPATIBLEPACKAGE, BA_FUNCTIONS_MESSAGE_ONPLANRESTORERELATEDBUNDLE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRESTORERELATEDBUNDLE, BA_FUNCTIONS_MESSAGE_ONPLANRELATEDBUNDLETYPE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE, + BA_FUNCTIONS_MESSAGE_ONAPPLYDOWNGRADE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYDOWNGRADE, BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024, BA_FUNCTIONS_MESSAGE_WNDPROC, diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h index f558828f..fe5c99ba 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h @@ -869,6 +869,14 @@ public: // IBootstrapperApplication return S_OK; } + virtual STDMETHODIMP OnApplyDowngrade( + __in HRESULT /*hrRecommended*/, + __in HRESULT* /*phrStatus*/ + ) + { + return S_OK; + } + public: // IBAFunctions virtual STDMETHODIMP OnPlan( ) diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h index ede00f28..100e5c30 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h @@ -161,6 +161,7 @@ static HRESULT WINAPI BalBaseBAFunctionsProc( case BA_FUNCTIONS_MESSAGE_ONPLANNEDCOMPATIBLEPACKAGE: case BA_FUNCTIONS_MESSAGE_ONPLANRESTORERELATEDBUNDLE: case BA_FUNCTIONS_MESSAGE_ONPLANRELATEDBUNDLETYPE: + case BA_FUNCTIONS_MESSAGE_ONAPPLYDOWNGRADE: hr = BalBaseBootstrapperApplicationProc((BOOTSTRAPPER_APPLICATION_MESSAGE)message, pvArgs, pvResults, pvContext); break; case BA_FUNCTIONS_MESSAGE_ONTHEMELOADED: diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h index 49f4b7ca..fd06a83f 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h @@ -1069,6 +1069,14 @@ public: // IBootstrapperApplication return S_OK; } + virtual STDMETHODIMP OnApplyDowngrade( + __in HRESULT /*hrRecommended*/, + __in HRESULT* /*phrStatus*/ + ) + { + return S_OK; + } + public: //CBalBaseBootstrapperApplication virtual STDMETHODIMP Initialize( __in const BOOTSTRAPPER_CREATE_ARGS* pCreateArgs diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h index 698349f7..4e413e4e 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h @@ -738,6 +738,15 @@ static HRESULT BalBaseBAProcOnPlanRelatedBundleType( return pBA->OnPlanRelatedBundleType(pArgs->wzBundleId, pArgs->recommendedType, &pResults->requestedType, &pResults->fCancel); } +static HRESULT BalBaseBAProcOnApplyDowngrade( + __in IBootstrapperApplication* pBA, + __in BA_ONAPPLYDOWNGRADE_ARGS* pArgs, + __inout BA_ONAPPLYDOWNGRADE_RESULTS* pResults + ) +{ + return pBA->OnApplyDowngrade(pArgs->hrRecommended, &pResults->hrStatus); +} + /******************************************************************* BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication. Provides a default mapping between the new message based BA interface and @@ -1000,6 +1009,9 @@ static HRESULT WINAPI BalBaseBootstrapperApplicationProc( case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE: hr = BalBaseBAProcOnPlanRelatedBundleType(pBA, reinterpret_cast(pvArgs), reinterpret_cast(pvResults)); break; + case BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYDOWNGRADE: + hr = BalBaseBAProcOnApplyDowngrade(pBA, reinterpret_cast(pvArgs), reinterpret_cast(pvResults)); + break; } } diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h index 462df0cc..c9cf3126 100644 --- a/src/api/burn/balutil/inc/IBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h @@ -707,4 +707,11 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A __inout BOOTSTRAPPER_RELATED_BUNDLE_PLAN_TYPE* pRequestedType, __inout BOOL* pfCancel ) = 0; + + // OnApplyDowngrade - called when the plan determined that nothing should happen to prevent downgrading. + // + STDMETHOD(OnApplyDowngrade)( + __in HRESULT hrRecommended, + __inout HRESULT* phrStatus + ) = 0; }; -- cgit v1.2.3-55-g6feb