From cede270b2bd3da6bd8d5205b8834e786c8d6c1ce Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 1 Feb 2021 18:54:54 -0600 Subject: Remove feature to uninstall compatible orphaned MSI packages. --- .../inc/BootstrapperApplication.h | 50 ------- src/engine/apply.cpp | 28 ---- src/engine/core.cpp | 8 -- src/engine/detect.cpp | 2 - src/engine/elevation.cpp | 98 ------------- src/engine/elevation.h | 4 - src/engine/engine.mc | 14 -- src/engine/msiengine.cpp | 156 --------------------- src/engine/msiengine.h | 5 - src/engine/package.cpp | 36 ----- src/engine/package.h | 9 -- src/engine/plan.cpp | 79 +---------- src/engine/plan.h | 7 - src/engine/userexperience.cpp | 99 +------------ src/engine/userexperience.h | 23 --- 15 files changed, 7 insertions(+), 611 deletions(-) diff --git a/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h index 80b23686..c0baa958 100644 --- a/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h +++ b/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h @@ -92,15 +92,12 @@ enum BOOTSTRAPPER_APPLICATION_MESSAGE BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTUPDATECOMPLETE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDBUNDLE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTPACKAGEBEGIN, - BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPATIBLEMSIPACKAGE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDMSIPACKAGE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTTARGETMSIPACKAGE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTMSIFEATURE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTPACKAGECOMPLETE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANPACKAGEBEGIN, - BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGEBEGIN, - BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANTARGETMSIPACKAGE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANMSIFEATURE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANPACKAGECOMPLETE, @@ -469,20 +466,6 @@ struct BA_ONDETECTBEGIN_RESULTS BOOL fCancel; }; -struct BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS -{ - DWORD cbSize; - LPCWSTR wzPackageId; - LPCWSTR wzCompatiblePackageId; - LPCWSTR wzCompatiblePackageVersion; -}; - -struct BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS -{ - DWORD cbSize; - BOOL fCancel; -}; - struct BA_ONDETECTCOMPLETE_ARGS { DWORD cbSize; @@ -855,39 +838,6 @@ struct BA_ONPLANBEGIN_RESULTS BOOL fCancel; }; -struct BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS -{ - DWORD cbSize; - LPCWSTR wzPackageId; - LPCWSTR wzCompatiblePackageId; - LPCWSTR wzCompatiblePackageVersion; - BOOTSTRAPPER_REQUEST_STATE recommendedState; -}; - -struct BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS -{ - DWORD cbSize; - BOOL fCancel; - BOOTSTRAPPER_REQUEST_STATE requestedState; -}; - -struct BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS -{ - DWORD cbSize; - LPCWSTR wzPackageId; - LPCWSTR wzCompatiblePackageId; - HRESULT hrStatus; - BOOTSTRAPPER_PACKAGE_STATE state; - BOOTSTRAPPER_REQUEST_STATE requested; - BOOTSTRAPPER_ACTION_STATE execute; - BOOTSTRAPPER_ACTION_STATE rollback; -}; - -struct BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS -{ - DWORD cbSize; -}; - struct BA_ONPLANCOMPLETE_ARGS { DWORD cbSize; diff --git a/src/engine/apply.cpp b/src/engine/apply.cpp index 8e5099d9..dd4932aa 100644 --- a/src/engine/apply.cpp +++ b/src/engine/apply.cpp @@ -199,10 +199,6 @@ static HRESULT ExecuteDependencyAction( __in BURN_EXECUTE_ACTION* pAction, __in BURN_EXECUTE_CONTEXT* pContext ); -static HRESULT ExecuteCompatiblePackageAction( - __in BURN_ENGINE_STATE* pEngineState, - __in BURN_EXECUTE_ACTION* pAction - ); static HRESULT ExecuteMsiBeginTransaction( __in BURN_ENGINE_STATE* pEngineState, __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary, @@ -1727,11 +1723,6 @@ static HRESULT DoExecuteAction( ExitOnFailure(hr, "Failed to execute dependency action."); break; - case BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE: - hr = ExecuteCompatiblePackageAction(pEngineState, pExecuteAction); - ExitOnFailure(hr, "Failed to execute compatible package action."); - break; - case BURN_EXECUTE_ACTION_TYPE_REGISTRATION: *pfKeepRegistration = pExecuteAction->registration.fKeep; break; @@ -2183,25 +2174,6 @@ LExit: return hr; } -static HRESULT ExecuteCompatiblePackageAction( - __in BURN_ENGINE_STATE* pEngineState, - __in BURN_EXECUTE_ACTION* pAction - ) -{ - HRESULT hr = S_OK; - - if (pAction->compatiblePackage.pReferencePackage->fPerMachine) - { - hr = ElevationLoadCompatiblePackageAction(pEngineState->companionConnection.hPipe, pAction); - ExitOnFailure(hr, "Failed to load compatible package on per-machine package."); - } - - // Compatible package already loaded in this process. - -LExit: - return hr; -} - static HRESULT ExecuteMsiBeginTransaction( __in BURN_ENGINE_STATE* pEngineState, __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary, diff --git a/src/engine/core.cpp b/src/engine/core.cpp index 0f5ea08a..77e2dd82 100644 --- a/src/engine/core.cpp +++ b/src/engine/core.cpp @@ -1692,14 +1692,6 @@ static void LogPackages( LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingBoolToString(pPackage->fAcquire), LoggingBoolToString(pPackage->fUncache), LoggingDependencyActionToString(pPackage->dependencyExecute)); } - for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i) - { - const DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == action) ? pPackages->cCompatiblePackages - 1 - i : i; - const BURN_PACKAGE* pPackage = &pPackages->rgCompatiblePackages[iPackage]; - - LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingBoolToString(pPackage->fAcquire), LoggingBoolToString(pPackage->fUncache), LoggingDependencyActionToString(pPackage->dependencyExecute)); - } - // Display related bundles last if caching, installing, modifying, or repairing. if (BOOTSTRAPPER_ACTION_UNINSTALL < action && 0 < pRelatedBundles->cRelatedBundles) { diff --git a/src/engine/detect.cpp b/src/engine/detect.cpp index 176780af..63e66539 100644 --- a/src/engine/detect.cpp +++ b/src/engine/detect.cpp @@ -63,8 +63,6 @@ extern "C" void DetectReset( pFeature->currentState = BOOTSTRAPPER_FEATURE_STATE_UNKNOWN; } - - pPackage->Msi.fCompatibleInstalled = FALSE; } else if (BURN_PACKAGE_TYPE_MSP == pPackage->type) { diff --git a/src/engine/elevation.cpp b/src/engine/elevation.cpp index fc53b1f8..cd0c9387 100644 --- a/src/engine/elevation.cpp +++ b/src/engine/elevation.cpp @@ -24,7 +24,6 @@ typedef enum _BURN_ELEVATION_MESSAGE_TYPE BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSU_PACKAGE, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_PROVIDER, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_DEPENDENCY, - BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE, BURN_ELEVATION_MESSAGE_TYPE_LAUNCH_EMBEDDED_CHILD, BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE, BURN_ELEVATION_MESSAGE_TYPE_LAUNCH_APPROVED_EXE, @@ -95,11 +94,6 @@ static HRESULT WaitForElevatedChildCacheThread( __in HANDLE hCacheThread, __in DWORD dwExpectedExitCode ); -static HRESULT OnLoadCompatiblePackage( - __in BURN_PACKAGES* pPackages, - __in BYTE* pbData, - __in DWORD cbData - ); static HRESULT ProcessApplyInitializeMessages( __in BURN_PIPE_MESSAGE* pMsg, __in_opt LPVOID pvContext, @@ -1114,45 +1108,6 @@ LExit: return hr; } -/******************************************************************* - ElevationLoadCompatiblePackageAction - Load compatible package - information from the referenced package. - -*******************************************************************/ -extern "C" HRESULT ElevationLoadCompatiblePackageAction( - __in HANDLE hPipe, - __in BURN_EXECUTE_ACTION* pExecuteAction - ) -{ - HRESULT hr = S_OK; - BYTE* pbData = NULL; - SIZE_T cbData = 0; - DWORD dwResult = 0; - BOOTSTRAPPER_APPLY_RESTART restart = BOOTSTRAPPER_APPLY_RESTART_NONE; - - // Serialize message data. - hr = BuffWriteString(&pbData, &cbData, pExecuteAction->compatiblePackage.pReferencePackage->sczId); - ExitOnFailure(hr, "Failed to write package id to message buffer."); - - hr = BuffWriteString(&pbData, &cbData, pExecuteAction->compatiblePackage.sczInstalledProductCode); - ExitOnFailure(hr, "Failed to write installed ProductCode to message buffer."); - - hr = BuffWriteString(&pbData, &cbData, pExecuteAction->compatiblePackage.pInstalledVersion->sczVersion); - ExitOnFailure(hr, "Failed to write installed version to message buffer."); - - // Send the message. - hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE, pbData, cbData, NULL, NULL, &dwResult); - ExitOnFailure(hr, "Failed to send BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE message to per-machine process."); - - // Ignore the restart since this action only loads data into memory. - hr = ProcessResult(dwResult, &restart); - -LExit: - ReleaseBuffer(pbData); - - return hr; -} - /******************************************************************* ElevationCleanPackage - @@ -1719,10 +1674,6 @@ static HRESULT ProcessElevatedChildMessage( hrResult = OnExecutePackageDependencyAction(pContext->pPackages, &pContext->pRegistration->relatedBundles, (BYTE*)pMsg->pvData, pMsg->cbData); break; - case BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE: - hrResult = OnLoadCompatiblePackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData); - break; - case BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE: hrResult = OnCleanPackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData); break; @@ -2636,55 +2587,6 @@ LExit: return hr; } -static HRESULT OnLoadCompatiblePackage( - __in BURN_PACKAGES* pPackages, - __in BYTE* pbData, - __in DWORD cbData - ) -{ - HRESULT hr = S_OK; - SIZE_T iData = 0; - LPWSTR sczPackage = NULL; - LPWSTR sczVersion = NULL; - BURN_EXECUTE_ACTION executeAction = { }; - - executeAction.type = BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE; - - // Deserialize the message data. - hr = BuffReadString(pbData, cbData, &iData, &sczPackage); - ExitOnFailure(hr, "Failed to read package id from message buffer."); - - // Find the reference package. - hr = PackageFindById(pPackages, sczPackage, &executeAction.compatiblePackage.pReferencePackage); - ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); - - hr = BuffReadString(pbData, cbData, &iData, &executeAction.compatiblePackage.sczInstalledProductCode); - ExitOnFailure(hr, "Failed to read installed ProductCode from message buffer."); - - hr = BuffReadString(pbData, cbData, &iData, &sczVersion); - ExitOnFailure(hr, "Failed to read installed version from message buffer."); - - hr = VerParseVersion(sczVersion, 0, FALSE, &executeAction.compatiblePackage.pInstalledVersion); - ExitOnFailure(hr, "Failed to parse installed version from compatible package."); - - // Copy the installed data to the reference package. - hr = StrAllocString(&executeAction.compatiblePackage.pReferencePackage->Msi.sczInstalledProductCode, executeAction.compatiblePackage.sczInstalledProductCode, 0); - ExitOnFailure(hr, "Failed to copy installed ProductCode."); - - executeAction.compatiblePackage.pReferencePackage->Msi.pInstalledVersion = executeAction.compatiblePackage.pInstalledVersion; - - // Load the compatible package and add it to the list. - hr = MsiEngineAddCompatiblePackage(pPackages, executeAction.compatiblePackage.pReferencePackage, NULL); - ExitOnFailure(hr, "Failed to load compatible package."); - -LExit: - ReleaseStr(sczVersion); - ReleaseStr(sczPackage); - PlanUninitializeExecuteAction(&executeAction); - - return hr; -} - static int GenericExecuteMessageHandler( __in GENERIC_EXECUTE_MESSAGE* pMessage, __in LPVOID pvContext diff --git a/src/engine/elevation.h b/src/engine/elevation.h index 05fecdf6..e254dea5 100644 --- a/src/engine/elevation.h +++ b/src/engine/elevation.h @@ -117,10 +117,6 @@ HRESULT ElevationExecutePackageDependencyAction( __in HANDLE hPipe, __in BURN_EXECUTE_ACTION* pExecuteAction ); -HRESULT ElevationLoadCompatiblePackageAction( - __in HANDLE hPipe, - __in BURN_EXECUTE_ACTION* pExecuteAction - ); HRESULT ElevationLaunchElevatedChild( __in HANDLE hPipe, __in BURN_PACKAGE* pPackage, diff --git a/src/engine/engine.mc b/src/engine/engine.mc index 8e36e84e..ad86308c 100644 --- a/src/engine/engine.mc +++ b/src/engine/engine.mc @@ -226,13 +226,6 @@ Language=English Detected forward compatible bundle: %1!ls!, type: %2!hs!, scope: %3!hs!, version: %4!ls!, enabled: %5!hs! . -MessageId=108 -Severity=Success -SymbolicName=MSG_DETECTED_COMPATIBLE_PACKAGE_FROM_PROVIDER -Language=English -Detected compatible package: %1!ls!, provider: %2!ls!, installed: %3!ls!, version: %4!ls!, chained: %5!ls! -. - MessageId=120 Severity=Warning SymbolicName=MSG_DETECT_PACKAGE_NOT_FULLY_CACHED @@ -394,13 +387,6 @@ Language=English Plan skipped related bundle: %1!ls!, type: %2!hs!, because it was previously scheduled. . -MessageId=215 -Severity=Success -SymbolicName=MSG_PLANNED_ORPHAN_PACKAGE_FROM_PROVIDER -Language=English -Will remove orphan package: %1!ls!, installed: %2!ls!, chained: %3!ls! -. - MessageId=216 Severity=Success SymbolicName=MSG_PLAN_SKIPPED_RELATED_BUNDLE_EMBEDDED_BUNDLE_NEWER diff --git a/src/engine/msiengine.cpp b/src/engine/msiengine.cpp index 688be7af..5bccb375 100644 --- a/src/engine/msiengine.cpp +++ b/src/engine/msiengine.cpp @@ -325,7 +325,6 @@ extern "C" void MsiEnginePackageUninitialize( { ReleaseStr(pPackage->Msi.sczProductCode); ReleaseStr(pPackage->Msi.sczUpgradeCode); - ReleaseStr(pPackage->Msi.sczInstalledProductCode); // free features if (pPackage->Msi.rgFeatures) @@ -404,8 +403,6 @@ extern "C" HRESULT MsiEngineDetectPackage( int nCompareResult = 0; LPWSTR sczInstalledVersion = NULL; LPWSTR sczInstalledLanguage = NULL; - LPWSTR sczInstalledProductCode = NULL; - LPWSTR sczInstalledProviderKey = NULL; INSTALLSTATE installState = INSTALLSTATE_UNKNOWN; BOOTSTRAPPER_RELATED_OPERATION operation = BOOTSTRAPPER_RELATED_OPERATION_NONE; BOOTSTRAPPER_RELATED_OPERATION relatedMsiOperation = BOOTSTRAPPER_RELATED_OPERATION_NONE; @@ -457,42 +454,6 @@ extern "C" HRESULT MsiEngineDetectPackage( } else if (HRESULT_FROM_WIN32(ERROR_UNKNOWN_PRODUCT) == hr || HRESULT_FROM_WIN32(ERROR_UNKNOWN_PROPERTY) == hr) // package not present. { - // Check for newer, compatible packages based on a fixed provider key. - hr = DependencyDetectProviderKeyPackageId(pPackage, &sczInstalledProviderKey, &sczInstalledProductCode); - if (SUCCEEDED(hr)) - { - hr = WiuGetProductInfoEx(sczInstalledProductCode, NULL, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED, INSTALLPROPERTY_VERSIONSTRING, &sczInstalledVersion); - if (SUCCEEDED(hr)) - { - hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); - ExitOnFailure(hr, "Failed to parse dependency version: '%ls' for ProductCode: %ls", sczInstalledVersion, sczInstalledProductCode); - - if (pVersion->fInvalid) - { - LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, sczInstalledProductCode, sczInstalledVersion); - } - - // compare versions - hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pVersion, &nCompareResult); - ExitOnFailure(hr, "Failed to compare version '%ls' to dependency version: '%ls'", pPackage->Msi.pVersion->sczVersion, pVersion->sczVersion); - - if (nCompareResult < 0) - { - LogId(REPORT_STANDARD, MSG_DETECTED_COMPATIBLE_PACKAGE_FROM_PROVIDER, pPackage->sczId, sczInstalledProviderKey, sczInstalledProductCode, sczInstalledVersion, pPackage->Msi.sczProductCode); - - hr = UserExperienceOnDetectCompatibleMsiPackage(pUserExperience, pPackage->sczId, sczInstalledProductCode, pVersion); - ExitOnRootFailure(hr, "BA aborted detect compatible MSI package."); - - hr = StrAllocString(&pPackage->Msi.sczInstalledProductCode, sczInstalledProductCode, 0); - ExitOnFailure(hr, "Failed to copy the installed ProductCode to the package."); - - pPackage->Msi.pInstalledVersion = pVersion; - pPackage->Msi.fCompatibleInstalled = TRUE; - pVersion = NULL; - } - } - } - pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_ABSENT; hr = S_OK; } @@ -701,8 +662,6 @@ extern "C" HRESULT MsiEngineDetectPackage( } LExit: - ReleaseStr(sczInstalledProviderKey); - ReleaseStr(sczInstalledProductCode); ReleaseStr(sczInstalledLanguage); ReleaseStr(sczInstalledVersion); ReleaseVerutilVersion(pVersion); @@ -1023,121 +982,6 @@ LExit: return hr; } -extern "C" HRESULT MsiEngineAddCompatiblePackage( - __in BURN_PACKAGES* pPackages, - __in const BURN_PACKAGE* pPackage, - __out_opt BURN_PACKAGE** ppCompatiblePackage - ) -{ - Assert(BURN_PACKAGE_TYPE_MSI == pPackage->type); - - HRESULT hr = S_OK; - BURN_PACKAGE* pCompatiblePackage = NULL; - LPWSTR sczInstalledVersion = NULL; - - // Allocate enough memory all at once so pointers to packages within - // aren't invalidated if we otherwise reallocated. - hr = PackageEnsureCompatiblePackagesArray(pPackages); - ExitOnFailure(hr, "Failed to allocate memory for compatible MSI package."); - - pCompatiblePackage = pPackages->rgCompatiblePackages + pPackages->cCompatiblePackages; - ++pPackages->cCompatiblePackages; - - pCompatiblePackage->type = BURN_PACKAGE_TYPE_MSI; - - // Read in the compatible ProductCode if not already available. - if (pPackage->Msi.sczInstalledProductCode) - { - hr = StrAllocString(&pCompatiblePackage->Msi.sczProductCode, pPackage->Msi.sczInstalledProductCode, 0); - ExitOnFailure(hr, "Failed to copy installed ProductCode to compatible package."); - } - else - { - hr = DependencyDetectProviderKeyPackageId(pPackage, NULL, &pCompatiblePackage->Msi.sczProductCode); - ExitOnFailure(hr, "Failed to detect compatible package from provider key."); - } - - // Read in the compatible ProductVersion if not already available. - if (pPackage->Msi.pInstalledVersion) - { - hr = VerCopyVersion(pPackage->Msi.pInstalledVersion, &pCompatiblePackage->Msi.pVersion); - ExitOnFailure(hr, "Failed to copy version for compatible package."); - } - else - { - hr = WiuGetProductInfoEx(pCompatiblePackage->Msi.sczProductCode, NULL, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED, INSTALLPROPERTY_VERSIONSTRING, &sczInstalledVersion); - ExitOnFailure(hr, "Failed to read version from compatible package."); - - hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pCompatiblePackage->Msi.pVersion); - ExitOnFailure(hr, "Failed to parse version: '%ls' for ProductCode: %ls", sczInstalledVersion, pCompatiblePackage->Msi.sczProductCode); - - if (pCompatiblePackage->Msi.pVersion->fInvalid) - { - LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, pCompatiblePackage->Msi.sczProductCode, sczInstalledVersion); - } - } - - // For now, copy enough information to support uninstalling the newer, compatible package. - hr = StrAllocString(&pCompatiblePackage->sczId, pCompatiblePackage->Msi.sczProductCode, 0); - ExitOnFailure(hr, "Failed to copy installed ProductCode as compatible package ID."); - - pCompatiblePackage->fPerMachine = pPackage->fPerMachine; - pCompatiblePackage->fUninstallable = pPackage->fUninstallable; - pCompatiblePackage->cacheType = pPackage->cacheType; - - // Removing compatible packages is best effort. - pCompatiblePackage->fVital = FALSE; - - // Format a suitable log path variable from the original package. - hr = StrAllocFormatted(&pCompatiblePackage->sczLogPathVariable, L"%ls_Compatible", pPackage->sczLogPathVariable); - ExitOnFailure(hr, "Failed to format log path variable for compatible package."); - - // Use the default cache ID generation from the binder. - hr = StrAllocFormatted(&pCompatiblePackage->sczCacheId, L"%lsv%ls", pCompatiblePackage->sczId, pCompatiblePackage->Msi.pVersion->sczVersion); - ExitOnFailure(hr, "Failed to format cache ID for compatible package."); - - pCompatiblePackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_PRESENT; - pCompatiblePackage->cache = BURN_CACHE_STATE_PARTIAL; // Cannot know if it's complete or not. - - // Copy all the providers to ensure no dependents. - if (pPackage->cDependencyProviders) - { - pCompatiblePackage->rgDependencyProviders = (BURN_DEPENDENCY_PROVIDER*)MemAlloc(sizeof(BURN_DEPENDENCY_PROVIDER) * pPackage->cDependencyProviders, TRUE); - ExitOnNull(pCompatiblePackage->rgDependencyProviders, hr, E_OUTOFMEMORY, "Failed to allocate for compatible package providers."); - - for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i) - { - BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders + i; - BURN_DEPENDENCY_PROVIDER* pCompatibleProvider = pCompatiblePackage->rgDependencyProviders + i; - - // Only need to copy the key for uninstall. - hr = StrAllocString(&pCompatibleProvider->sczKey, pProvider->sczKey, 0); - ExitOnFailure(hr, "Failed to copy the compatible provider key."); - - // Assume the package version is the same as the provider version. - hr = StrAllocString(&pCompatibleProvider->sczVersion, pCompatiblePackage->Msi.pVersion->sczVersion, 0); - ExitOnFailure(hr, "Failed to copy the compatible provider version."); - - // Assume provider keys are similarly authored for this package. - pCompatibleProvider->fImported = pProvider->fImported; - } - - pCompatiblePackage->cDependencyProviders = pPackage->cDependencyProviders; - } - - pCompatiblePackage->type = BURN_PACKAGE_TYPE_MSI; - - if (ppCompatiblePackage) - { - *ppCompatiblePackage = pCompatiblePackage; - } - -LExit: - ReleaseStr(sczInstalledVersion); - - return hr; -} - extern "C" HRESULT MsiEngineBeginTransaction( __in LPCWSTR wzName ) diff --git a/src/engine/msiengine.h b/src/engine/msiengine.h index c7cc3bef..1f450147 100644 --- a/src/engine/msiengine.h +++ b/src/engine/msiengine.h @@ -48,11 +48,6 @@ HRESULT MsiEnginePlanAddPackage( __in_opt HANDLE hCacheEvent, __in BOOL fPlanPackageCacheRollback ); -HRESULT MsiEngineAddCompatiblePackage( - __in BURN_PACKAGES* pPackages, - __in const BURN_PACKAGE* pPackage, - __out_opt BURN_PACKAGE** ppCompatiblePackage - ); HRESULT MsiEngineBeginTransaction( __in LPCWSTR wzName ); diff --git a/src/engine/package.cpp b/src/engine/package.cpp index 02958efd..527766eb 100644 --- a/src/engine/package.cpp +++ b/src/engine/package.cpp @@ -369,15 +369,6 @@ extern "C" void PackagesUninitialize( MemFree(pPackages->rgPackages); } - if (pPackages->rgCompatiblePackages) - { - for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i) - { - PackageUninitialize(pPackages->rgCompatiblePackages + i); - } - MemFree(pPackages->rgCompatiblePackages); - } - if (pPackages->rgPatchTargetCodes) { for (DWORD i = 0; i < pPackages->cPatchTargetCodes; ++i) @@ -414,17 +405,6 @@ extern "C" HRESULT PackageFindById( } } - for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i) - { - pPackage = &pPackages->rgCompatiblePackages[i]; - - if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, pPackage->sczId, -1, wzId, -1)) - { - *ppPackage = pPackage; - ExitFunction1(hr = S_OK); - } - } - hr = E_NOTFOUND; LExit: @@ -510,22 +490,6 @@ LExit: return hr; } -HRESULT PackageEnsureCompatiblePackagesArray( - __in BURN_PACKAGES* pPackages - ) -{ - HRESULT hr = S_OK; - - if (!pPackages->rgCompatiblePackages) - { - pPackages->rgCompatiblePackages = (BURN_PACKAGE*)MemAlloc(sizeof(BURN_PACKAGE) * pPackages->cPackages, TRUE); - ExitOnNull(pPackages->rgCompatiblePackages, hr, E_OUTOFMEMORY, "Failed to allocate memory for compatible packages."); - } - -LExit: - return hr; -} - // internal function declarations diff --git a/src/engine/package.h b/src/engine/package.h index ec176f8c..1a4f7060 100644 --- a/src/engine/package.h +++ b/src/engine/package.h @@ -248,7 +248,6 @@ typedef struct _BURN_PACKAGE LPWSTR sczProductCode; DWORD dwLanguage; VERUTIL_VERSION* pVersion; - LPWSTR sczInstalledProductCode; VERUTIL_VERSION* pInstalledVersion; LPWSTR sczUpgradeCode; @@ -264,8 +263,6 @@ typedef struct _BURN_PACKAGE _BURN_PACKAGE** rgpSlipstreamMspPackages; LPWSTR* rgsczSlipstreamMspPackageIds; DWORD cSlipstreamMspPackages; - - BOOL fCompatibleInstalled; } Msi; struct { @@ -294,9 +291,6 @@ typedef struct _BURN_PACKAGES BURN_PACKAGE* rgPackages; DWORD cPackages; - BURN_PACKAGE* rgCompatiblePackages; - DWORD cCompatiblePackages; - BURN_PATCH_TARGETCODE* rgPatchTargetCodes; DWORD cPatchTargetCodes; @@ -335,9 +329,6 @@ HRESULT PackageGetProperty( __in_z LPCWSTR wzProperty, __out_z_opt LPWSTR* psczValue ); -HRESULT PackageEnsureCompatiblePackagesArray( - __in BURN_PACKAGES* pPackages - ); #if defined(__cplusplus) diff --git a/src/engine/plan.cpp b/src/engine/plan.cpp index ffbe495f..a45eab62 100644 --- a/src/engine/plan.cpp +++ b/src/engine/plan.cpp @@ -30,7 +30,6 @@ static void ResetPlannedRollbackBoundaryState( ); static HRESULT ProcessPackage( __in BOOL fBundlePerMachine, - __in_opt BURN_PACKAGE* pCompatiblePackageParent, __in BURN_USER_EXPERIENCE* pUX, __in BURN_PLAN* pPlan, __in BURN_PACKAGE* pPackage, @@ -311,10 +310,6 @@ extern "C" void PlanUninitializeExecuteAction( case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY: ReleaseStr(pExecuteAction->packageDependency.sczBundleProviderKey); break; - - case BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE: - ReleaseStr(pExecuteAction->compatiblePackage.sczInstalledProductCode); - break; } } @@ -523,39 +518,8 @@ extern "C" HRESULT PlanPackages( } } - hr = ProcessPackage(fBundlePerMachine, NULL, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices); + hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices); ExitOnFailure(hr, "Failed to process package."); - - // Attempt to remove orphaned packages during uninstall. Currently only MSI packages are supported and should not require source. - if (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action && BURN_PACKAGE_TYPE_MSI == pPackage->type && pPackage->Msi.fCompatibleInstalled) - { - BURN_PACKAGE* pCompatiblePackage = NULL; - BURN_EXECUTE_ACTION* pAction = NULL; - - // Add the compatible package to the list. - hr = MsiEngineAddCompatiblePackage(pPackages, pPackage, &pCompatiblePackage); - ExitOnFailure(hr, "Failed to add compatible package for package: %ls", pPackage->sczId); - - // Plan to load the compatible package into the elevated engine before its needed. - hr = PlanAppendExecuteAction(pPlan, &pAction); - ExitOnFailure(hr, "Failed to append execute action."); - - pAction->type = BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE; - pAction->compatiblePackage.pReferencePackage = pPackage; - pAction->compatiblePackage.pInstalledVersion = pCompatiblePackage->Msi.pVersion; - - hr = StrAllocString(&pAction->compatiblePackage.sczInstalledProductCode, pCompatiblePackage->Msi.sczProductCode, 0); - ExitOnFailure(hr, "Failed to copy installed ProductCode"); - - // Process the compatible MSI package like any other. - hr = ProcessPackage(fBundlePerMachine, pPackage, pUX, pPlan, pCompatiblePackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices); - ExitOnFailure(hr, "Failed to process compatible package."); - - if (BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pCompatiblePackage->execute) - { - LogId(REPORT_STANDARD, MSG_PLANNED_ORPHAN_PACKAGE_FROM_PROVIDER, pPackage->sczId, pCompatiblePackage->Msi.sczProductCode, pPackage->Msi.sczProductCode); - } - } } // Insert the "keep registration" and "remove registration" actions in the plan when installing the first time and anytime we are uninstalling respectively. @@ -601,15 +565,6 @@ extern "C" HRESULT PlanPackages( ExitOnFailure(hr, "Failed to plan clean package."); } - // Plan best-effort clean up of compatible packages. - for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i) - { - DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? pPackages->cCompatiblePackages - 1 - i : i; - BURN_PACKAGE* pCompatiblePackage = pPackages->rgCompatiblePackages + iPackage; - - PlanCleanPackage(pPlan, pCompatiblePackage); - } - LExit: return hr; } @@ -809,7 +764,7 @@ extern "C" HRESULT PlanPassThroughBundle( BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; // Plan passthrough package. - hr = ProcessPackage(fBundlePerMachine, NULL, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL); + hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL); ExitOnFailure(hr, "Failed to process passthrough package."); // If we still have an open rollback boundary, complete it. @@ -843,7 +798,7 @@ extern "C" HRESULT PlanUpdateBundle( BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; // Plan update package. - hr = ProcessPackage(fBundlePerMachine, NULL, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL); + hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL); ExitOnFailure(hr, "Failed to process update package."); // If we still have an open rollback boundary, complete it. @@ -863,7 +818,6 @@ LExit: static HRESULT ProcessPackage( __in BOOL fBundlePerMachine, - __in_opt BURN_PACKAGE* pCompatiblePackageParent, __in BURN_USER_EXPERIENCE* pUX, __in BURN_PLAN* pPlan, __in BURN_PACKAGE* pPackage, @@ -888,18 +842,8 @@ static HRESULT ProcessPackage( pPackage->requested = pPackage->defaultRequested; fPlanPackageBegan = TRUE; - if (pCompatiblePackageParent) - { - AssertSz(BURN_PACKAGE_TYPE_MSI == pPackage->type, "Currently only MSI packages have compatible packages."); - - hr = UserExperienceOnPlanCompatibleMsiPackageBegin(pUX, pCompatiblePackageParent->sczId, pPackage->sczId, pPackage->Msi.pVersion, &pPackage->requested); - ExitOnRootFailure(hr, "BA aborted plan compatible MSI package begin."); - } - else - { - hr = UserExperienceOnPlanPackageBegin(pUX, pPackage->sczId, &pPackage->requested); - ExitOnRootFailure(hr, "BA aborted plan package begin."); - } + hr = UserExperienceOnPlanPackageBegin(pUX, pPackage->sczId, &pPackage->requested); + ExitOnRootFailure(hr, "BA aborted plan package begin."); pEffectiveRollbackBoundary = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? pPackage->pRollbackBoundaryBackward : pPackage->pRollbackBoundaryForward; hr = ProcessPackageRollbackBoundary(pPlan, pEffectiveRollbackBoundary, ppRollbackBoundary); @@ -964,14 +908,7 @@ static HRESULT ProcessPackage( LExit: if (fPlanPackageBegan) { - if (pCompatiblePackageParent) - { - UserExperienceOnPlanCompatibleMsiPackageComplete(pUX, pCompatiblePackageParent->sczId, pPackage->sczId, hr, pPackage->currentState, pPackage->requested, pPackage->execute, pPackage->rollback); - } - else - { - UserExperienceOnPlanPackageComplete(pUX, pPackage->sczId, hr, pPackage->currentState, pPackage->requested, pPackage->execute, pPackage->rollback); - } + UserExperienceOnPlanPackageComplete(pUX, pPackage->sczId, hr, pPackage->currentState, pPackage->requested, pPackage->execute, pPackage->rollback); } return hr; @@ -3175,10 +3112,6 @@ static void ExecuteActionLog( LogStringLine(PlanDumpLevel, "%ls action[%u]: UNCACHE_PACKAGE id: %ls", wzBase, iAction, pAction->uncachePackage.pPackage->sczId); break; - case BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE: - LogStringLine(PlanDumpLevel, "%ls action[%u]: COMPATIBLE_PACKAGE reference id: %ls, installed ProductCode: %ls", wzBase, iAction, pAction->compatiblePackage.pReferencePackage->sczId, pAction->compatiblePackage.sczInstalledProductCode); - break; - case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION: LogStringLine(PlanDumpLevel, "%ls action[%u]: BEGIN_MSI_TRANSACTION id: %ls", wzBase, iAction, pAction->msiTransaction.pRollbackBoundary->sczId); break; diff --git a/src/engine/plan.h b/src/engine/plan.h index dad436d4..cb64f891 100644 --- a/src/engine/plan.h +++ b/src/engine/plan.h @@ -65,7 +65,6 @@ enum BURN_EXECUTE_ACTION_TYPE BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY, 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, }; @@ -301,12 +300,6 @@ typedef struct _BURN_EXECUTE_ACTION BURN_DEPENDENCY_ACTION action; } packageDependency; struct - { - BURN_PACKAGE* pReferencePackage; - LPWSTR sczInstalledProductCode; - VERUTIL_VERSION* pInstalledVersion; - } compatiblePackage; - struct { BURN_ROLLBACK_BOUNDARY* pRollbackBoundary; } msiTransaction; diff --git a/src/engine/userexperience.cpp b/src/engine/userexperience.cpp index 8e782e71..ea8b8a19 100644 --- a/src/engine/userexperience.cpp +++ b/src/engine/userexperience.cpp @@ -104,7 +104,7 @@ extern "C" HRESULT UserExperienceLoad( args.pCommand = pCommand; args.pfnBootstrapperEngineProc = EngineForApplicationProc; args.pvBootstrapperEngineProcContext = pEngineContext; - args.qwEngineAPIVersion = MAKEQWORDVERSION(2020, 11, 17, 0); + args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 1, 30, 0); results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS); @@ -747,36 +747,6 @@ LExit: return hr; } -EXTERN_C BAAPI UserExperienceOnDetectCompatibleMsiPackage( - __in BURN_USER_EXPERIENCE* pUserExperience, - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzCompatiblePackageId, - __in VERUTIL_VERSION* pCompatiblePackageVersion - ) -{ - HRESULT hr = S_OK; - BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS args = { }; - BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS results = { }; - - args.cbSize = sizeof(args); - args.wzPackageId = wzPackageId; - args.wzCompatiblePackageId = wzCompatiblePackageId; - args.wzCompatiblePackageVersion = pCompatiblePackageVersion->sczVersion; - - results.cbSize = sizeof(results); - - hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPATIBLEMSIPACKAGE, &args, &results); - ExitOnFailure(hr, "BA OnDetectCompatibleMsiPackage failed."); - - if (results.fCancel) - { - hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); - } - -LExit: - return hr; -} - EXTERN_C BAAPI UserExperienceOnDetectComplete( __in BURN_USER_EXPERIENCE* pUserExperience, __in HRESULT hrStatus @@ -1555,73 +1525,6 @@ LExit: return hr; } -EXTERN_C BAAPI UserExperienceOnPlanCompatibleMsiPackageBegin( - __in BURN_USER_EXPERIENCE* pUserExperience, - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzCompatiblePackageId, - __in VERUTIL_VERSION* pCompatiblePackageVersion, - __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState - ) -{ - HRESULT hr = S_OK; - BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS args = { }; - BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS results = { }; - - args.cbSize = sizeof(args); - args.wzPackageId = wzPackageId; - args.wzCompatiblePackageId = wzCompatiblePackageId; - args.wzCompatiblePackageVersion = pCompatiblePackageVersion->sczVersion; - args.recommendedState = *pRequestedState; - - results.cbSize = sizeof(results); - results.requestedState = *pRequestedState; - - hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGEBEGIN, &args, &results); - ExitOnFailure(hr, "BA OnPlanCompatibleMsiPackageBegin failed."); - - if (results.fCancel) - { - hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); - } - *pRequestedState = results.requestedState; - -LExit: - return hr; -} - -EXTERN_C BAAPI UserExperienceOnPlanCompatibleMsiPackageComplete( - __in BURN_USER_EXPERIENCE* pUserExperience, - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzCompatiblePackageId, - __in HRESULT hrStatus, - __in BOOTSTRAPPER_PACKAGE_STATE state, - __in BOOTSTRAPPER_REQUEST_STATE requested, - __in BOOTSTRAPPER_ACTION_STATE execute, - __in BOOTSTRAPPER_ACTION_STATE rollback - ) -{ - HRESULT hr = S_OK; - BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS args = { }; - BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS results = { }; - - args.cbSize = sizeof(args); - args.wzPackageId = wzPackageId; - args.wzCompatiblePackageId = wzCompatiblePackageId; - args.hrStatus = hrStatus; - args.state = state; - args.requested = requested; - args.execute = execute; - args.rollback = rollback; - - results.cbSize = sizeof(results); - - hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE, &args, &results); - ExitOnFailure(hr, "BA OnPlanCompatibleMsiPackageComplete failed."); - -LExit: - return hr; -} - EXTERN_C BAAPI UserExperienceOnPlanMsiFeature( __in BURN_USER_EXPERIENCE* pUserExperience, __in_z LPCWSTR wzPackageId, diff --git a/src/engine/userexperience.h b/src/engine/userexperience.h index a02d968c..3176e762 100644 --- a/src/engine/userexperience.h +++ b/src/engine/userexperience.h @@ -185,12 +185,6 @@ BAAPI UserExperienceOnDetectBegin( __in BOOL fInstalled, __in DWORD cPackages ); -BAAPI UserExperienceOnDetectCompatibleMsiPackage( - __in BURN_USER_EXPERIENCE* pUserExperience, - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzCompatiblePackageId, - __in VERUTIL_VERSION* pCompatiblePackageVersion - ); BAAPI UserExperienceOnDetectComplete( __in BURN_USER_EXPERIENCE* pUserExperience, __in HRESULT hrStatus @@ -354,23 +348,6 @@ BAAPI UserExperienceOnPlanBegin( __in BURN_USER_EXPERIENCE* pUserExperience, __in DWORD cPackages ); -BAAPI UserExperienceOnPlanCompatibleMsiPackageBegin( - __in BURN_USER_EXPERIENCE* pUserExperience, - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzCompatiblePackageId, - __in VERUTIL_VERSION* pCompatiblePackageVersion, - __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState - ); -BAAPI UserExperienceOnPlanCompatibleMsiPackageComplete( - __in BURN_USER_EXPERIENCE* pUserExperience, - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzCompatiblePackageId, - __in HRESULT hrStatus, - __in BOOTSTRAPPER_PACKAGE_STATE state, - __in BOOTSTRAPPER_REQUEST_STATE requested, - __in BOOTSTRAPPER_ACTION_STATE execute, - __in BOOTSTRAPPER_ACTION_STATE rollback - ); BAAPI UserExperienceOnPlanComplete( __in BURN_USER_EXPERIENCE* pUserExperience, __in HRESULT hrStatus -- cgit v1.2.3-55-g6feb