From 100944a40f363c1a8ce0cd8c5c27728d1db0912e Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 24 Feb 2021 17:42:31 -0600 Subject: Let the BA request the bundle to stay installed from OnUnregisterBegin. #6297 --- src/engine/apply.cpp | 2 +- src/engine/userexperience.cpp | 10 ++++++---- src/engine/userexperience.h | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'src/engine') diff --git a/src/engine/apply.cpp b/src/engine/apply.cpp index f57a56fe..3fbab61a 100644 --- a/src/engine/apply.cpp +++ b/src/engine/apply.cpp @@ -399,7 +399,7 @@ extern "C" HRESULT ApplyUnregister( CalculateKeepRegistration(pEngineState, &fKeepRegistration); - hr = UserExperienceOnUnregisterBegin(&pEngineState->userExperience); + hr = UserExperienceOnUnregisterBegin(&pEngineState->userExperience, &fKeepRegistration); ExitOnRootFailure(hr, "BA aborted unregister begin."); // Calculate the correct resume mode. If a restart has been initiated, that trumps all other diff --git a/src/engine/userexperience.cpp b/src/engine/userexperience.cpp index 88b07d68..84e88718 100644 --- a/src/engine/userexperience.cpp +++ b/src/engine/userexperience.cpp @@ -111,7 +111,7 @@ extern "C" HRESULT UserExperienceLoad( args.pCommand = pCommand; args.pfnBootstrapperEngineProc = EngineForApplicationProc; args.pvBootstrapperEngineProcContext = pEngineContext; - args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 2, 18, 0); + args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 2, 24, 0); results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS); @@ -2011,7 +2011,8 @@ LExit: } EXTERN_C BAAPI UserExperienceOnUnregisterBegin( - __in BURN_USER_EXPERIENCE* pUserExperience + __in BURN_USER_EXPERIENCE* pUserExperience, + __inout BOOL* pfKeepRegistration ) { HRESULT hr = S_OK; @@ -2019,15 +2020,16 @@ EXTERN_C BAAPI UserExperienceOnUnregisterBegin( BA_ONUNREGISTERBEGIN_RESULTS results = { }; args.cbSize = sizeof(args); + args.fKeepRegistration = *pfKeepRegistration; results.cbSize = sizeof(results); hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONUNREGISTERBEGIN, &args, &results); ExitOnFailure(hr, "BA OnUnregisterBegin failed."); - if (results.fCancel) + if (!args.fKeepRegistration && results.fForceKeepRegistration) { - hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); + *pfKeepRegistration = TRUE; } LExit: diff --git a/src/engine/userexperience.h b/src/engine/userexperience.h index f02e6279..754a9030 100644 --- a/src/engine/userexperience.h +++ b/src/engine/userexperience.h @@ -452,7 +452,8 @@ BAAPI UserExperienceOnSystemShutdown( __inout BOOL* pfCancel ); BAAPI UserExperienceOnUnregisterBegin( - __in BURN_USER_EXPERIENCE* pUserExperience + __in BURN_USER_EXPERIENCE* pUserExperience, + __inout BOOL* pfKeepRegistration ); BAAPI UserExperienceOnUnregisterComplete( __in BURN_USER_EXPERIENCE* pUserExperience, -- cgit v1.2.3-55-g6feb