aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-12-10 11:42:44 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-12-11 20:03:13 -0600
commitfc30db9fa3aa1d25a6ef078452864673caa67ec5 (patch)
treee3415a5a1329a867b2934a038243e95098214ec3 /src/api
parent1d58b3333d1d694d08b68f6c87223aa504bfe773 (diff)
downloadwix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.tar.gz
wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.tar.bz2
wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.zip
Add BA events for setting the update bundle.
Fixes #6410
Diffstat (limited to 'src/api')
-rw-r--r--src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h25
-rw-r--r--src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs48
-rw-r--r--src/api/burn/WixToolset.Mba.Core/BundleInfo.cs8
-rw-r--r--src/api/burn/WixToolset.Mba.Core/EventArgs.cs37
-rw-r--r--src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs18
-rw-r--r--src/api/burn/WixToolset.Mba.Core/IBundleInfo.cs7
-rw-r--r--src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs10
-rw-r--r--src/api/burn/WixToolset.Mba.Core/PackageInfo.cs19
-rw-r--r--src/api/burn/balutil/balinfo.cpp43
-rw-r--r--src/api/burn/balutil/inc/BAFunctions.h2
-rw-r--r--src/api/burn/balutil/inc/BalBaseBAFunctions.h14
-rw-r--r--src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h2
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h14
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h24
-rw-r--r--src/api/burn/balutil/inc/IBootstrapperApplication.h8
-rw-r--r--src/api/burn/balutil/inc/balinfo.h15
16 files changed, 292 insertions, 2 deletions
diff --git a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
index ad920577..2ffcf9d6 100644
--- a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
+++ b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
@@ -197,6 +197,8 @@ enum BOOTSTRAPPER_APPLICATION_MESSAGE
197 BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE, 197 BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE,
198 BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS, 198 BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS,
199 BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY, 199 BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY,
200 BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATEBEGIN,
201 BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATECOMPLETE,
200}; 202};
201 203
202enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION 204enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION
@@ -1228,6 +1230,29 @@ struct BA_ONROLLBACKMSITRANSACTIONCOMPLETE_RESULTS
1228 DWORD cbSize; 1230 DWORD cbSize;
1229}; 1231};
1230 1232
1233struct BA_ONSETUPDATEBEGIN_ARGS
1234{
1235 DWORD cbSize;
1236};
1237
1238struct BA_ONSETUPDATEBEGIN_RESULTS
1239{
1240 DWORD cbSize;
1241};
1242
1243struct BA_ONSETUPDATECOMPLETE_ARGS
1244{
1245 DWORD cbSize;
1246 HRESULT hrStatus;
1247 LPCWSTR wzPreviousPackageId;
1248 LPCWSTR wzNewPackageId;
1249};
1250
1251struct BA_ONSETUPDATECOMPLETE_RESULTS
1252{
1253 DWORD cbSize;
1254};
1255
1231struct BA_ONSHUTDOWN_ARGS 1256struct BA_ONSHUTDOWN_ARGS
1232{ 1257{
1233 DWORD cbSize; 1258 DWORD cbSize;
diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
index 0520463f..a78bf43f 100644
--- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
@@ -253,6 +253,12 @@ namespace WixToolset.Mba.Core
253 /// <inheritdoc/> 253 /// <inheritdoc/>
254 public event EventHandler<CachePayloadExtractCompleteEventArgs> CachePayloadExtractComplete; 254 public event EventHandler<CachePayloadExtractCompleteEventArgs> CachePayloadExtractComplete;
255 255
256 /// <inheritdoc/>
257 public event EventHandler<SetUpdateBeginEventArgs> SetUpdateBegin;
258
259 /// <inheritdoc/>
260 public event EventHandler<SetUpdateCompleteEventArgs> SetUpdateComplete;
261
256 /// <summary> 262 /// <summary>
257 /// Entry point that is called when the bootstrapper application is ready to run. 263 /// Entry point that is called when the bootstrapper application is ready to run.
258 /// </summary> 264 /// </summary>
@@ -1225,6 +1231,32 @@ namespace WixToolset.Mba.Core
1225 } 1231 }
1226 } 1232 }
1227 1233
1234 /// <summary>
1235 /// Called by the engine, raises the <see cref="SetUpdateBegin"/> event.
1236 /// </summary>
1237 /// <param name="args"></param>
1238 protected virtual void OnSetUpdateBegin(SetUpdateBeginEventArgs args)
1239 {
1240 EventHandler<SetUpdateBeginEventArgs> handler = this.SetUpdateBegin;
1241 if (null != handler)
1242 {
1243 handler(this, args);
1244 }
1245 }
1246
1247 /// <summary>
1248 /// Called by the engine, raises the <see cref="SetUpdateComplete"/> event.
1249 /// </summary>
1250 /// <param name="args"></param>
1251 protected virtual void OnSetUpdateComplete(SetUpdateCompleteEventArgs args)
1252 {
1253 EventHandler<SetUpdateCompleteEventArgs> handler = this.SetUpdateComplete;
1254 if (null != handler)
1255 {
1256 handler(this, args);
1257 }
1258 }
1259
1228 #region IBootstrapperApplication Members 1260 #region IBootstrapperApplication Members
1229 1261
1230 int IBootstrapperApplication.BAProc(int message, IntPtr pvArgs, IntPtr pvResults, IntPtr pvContext) 1262 int IBootstrapperApplication.BAProc(int message, IntPtr pvArgs, IntPtr pvResults, IntPtr pvContext)
@@ -1895,6 +1927,22 @@ namespace WixToolset.Mba.Core
1895 return args.HResult; 1927 return args.HResult;
1896 } 1928 }
1897 1929
1930 int IBootstrapperApplication.OnSetUpdateBegin()
1931 {
1932 SetUpdateBeginEventArgs args = new SetUpdateBeginEventArgs();
1933 this.OnSetUpdateBegin(args);
1934
1935 return args.HResult;
1936 }
1937
1938 int IBootstrapperApplication.OnSetUpdateComplete(int hrStatus, string wzPreviousPackageId, string wzNewPackageId)
1939 {
1940 SetUpdateCompleteEventArgs args = new SetUpdateCompleteEventArgs(hrStatus, wzPreviousPackageId, wzNewPackageId);
1941 this.OnSetUpdateComplete(args);
1942
1943 return args.HResult;
1944 }
1945
1898 #endregion 1946 #endregion
1899 } 1947 }
1900} 1948}
diff --git a/src/api/burn/WixToolset.Mba.Core/BundleInfo.cs b/src/api/burn/WixToolset.Mba.Core/BundleInfo.cs
index 4a533bf9..ee751ebf 100644
--- a/src/api/burn/WixToolset.Mba.Core/BundleInfo.cs
+++ b/src/api/burn/WixToolset.Mba.Core/BundleInfo.cs
@@ -41,6 +41,14 @@ namespace WixToolset.Mba.Core
41 return package; 41 return package;
42 } 42 }
43 43
44 /// <inheritdoc/>
45 public IPackageInfo AddUpdateBundleAsPackage(SetUpdateCompleteEventArgs e)
46 {
47 var package = PackageInfo.GetUpdateBundleAsPackage(e.NewPackageId);
48 this.Packages.Add(package.Id, package);
49 return package;
50 }
51
44 /// <summary> 52 /// <summary>
45 /// Parses BA manifest from the given stream. 53 /// Parses BA manifest from the given stream.
46 /// </summary> 54 /// </summary>
diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
index 556db821..55c9e74c 100644
--- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
+++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
@@ -2230,4 +2230,41 @@ namespace WixToolset.Mba.Core
2230 /// </summary> 2230 /// </summary>
2231 public string PayloadId { get; private set; } 2231 public string PayloadId { get; private set; }
2232 } 2232 }
2233
2234 /// <summary>
2235 /// EventArgs for <see cref="IDefaultBootstrapperApplication.SetUpdateBegin"/>.
2236 /// </summary>
2237 [Serializable]
2238 public class SetUpdateBeginEventArgs : HResultEventArgs
2239 {
2240 /// <summary />
2241 public SetUpdateBeginEventArgs()
2242 {
2243 }
2244 }
2245
2246 /// <summary>
2247 /// Event arguments for <see cref="IDefaultBootstrapperApplication.SetUpdateComplete"/>
2248 /// </summary>
2249 [Serializable]
2250 public class SetUpdateCompleteEventArgs : StatusEventArgs
2251 {
2252 /// <summary />
2253 public SetUpdateCompleteEventArgs(int hrStatus, string previousPackageId, string newPackageId)
2254 : base(hrStatus)
2255 {
2256 this.PreviousPackageId = previousPackageId;
2257 this.NewPackageId = newPackageId;
2258 }
2259
2260 /// <summary>
2261 /// Gets the identifier of the update package that was removed.
2262 /// </summary>
2263 public string PreviousPackageId { get; private set; }
2264
2265 /// <summary>
2266 /// Gets the identifier of the update package that was added.
2267 /// </summary>
2268 public string NewPackageId { get; private set; }
2269 }
2233} 2270}
diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
index 259c407f..f0c0b7ec 100644
--- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
@@ -1097,6 +1097,24 @@ namespace WixToolset.Mba.Core
1097 [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, 1097 [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId,
1098 int hrStatus 1098 int hrStatus
1099 ); 1099 );
1100
1101 /// <summary>
1102 /// See <see cref="IDefaultBootstrapperApplication.SetUpdateBegin"/>.
1103 /// </summary>
1104 [PreserveSig]
1105 [return: MarshalAs(UnmanagedType.I4)]
1106 int OnSetUpdateBegin();
1107
1108 /// <summary>
1109 /// See <see cref="IDefaultBootstrapperApplication.SetUpdateComplete"/>.
1110 /// </summary>
1111 [PreserveSig]
1112 [return: MarshalAs(UnmanagedType.I4)]
1113 int OnSetUpdateComplete(
1114 int hrStatus,
1115 [MarshalAs(UnmanagedType.LPWStr)] string wzPreviousPackageId,
1116 [MarshalAs(UnmanagedType.LPWStr)] string wzNewPackageId
1117 );
1100 } 1118 }
1101 1119
1102 /// <summary> 1120 /// <summary>
diff --git a/src/api/burn/WixToolset.Mba.Core/IBundleInfo.cs b/src/api/burn/WixToolset.Mba.Core/IBundleInfo.cs
index 35decc88..3227b72d 100644
--- a/src/api/burn/WixToolset.Mba.Core/IBundleInfo.cs
+++ b/src/api/burn/WixToolset.Mba.Core/IBundleInfo.cs
@@ -40,5 +40,12 @@ namespace WixToolset.Mba.Core
40 /// <param name="e"></param> 40 /// <param name="e"></param>
41 /// <returns>The created <see cref="IPackageInfo"/>.</returns> 41 /// <returns>The created <see cref="IPackageInfo"/>.</returns>
42 IPackageInfo AddRelatedBundleAsPackage(DetectRelatedBundleEventArgs e); 42 IPackageInfo AddRelatedBundleAsPackage(DetectRelatedBundleEventArgs e);
43
44 /// <summary>
45 /// Adds an update bundle as a package.
46 /// </summary>
47 /// <param name="e"></param>
48 /// <returns>The created <see cref="IPackageInfo"/>.</returns>
49 IPackageInfo AddUpdateBundleAsPackage(SetUpdateCompleteEventArgs e);
43 } 50 }
44} \ No newline at end of file 51} \ No newline at end of file
diff --git a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs
index 20ce9f88..e809a965 100644
--- a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs
@@ -344,6 +344,16 @@ namespace WixToolset.Mba.Core
344 event EventHandler<RollbackMsiTransactionCompleteEventArgs> RollbackMsiTransactionComplete; 344 event EventHandler<RollbackMsiTransactionCompleteEventArgs> RollbackMsiTransactionComplete;
345 345
346 /// <summary> 346 /// <summary>
347 /// Fired when the engine has begun to setup the update package.
348 /// </summary>
349 event EventHandler<SetUpdateBeginEventArgs> SetUpdateBegin;
350
351 /// <summary>
352 /// Fired when the engine has completed setting up the update package.
353 /// </summary>
354 event EventHandler<SetUpdateCompleteEventArgs> SetUpdateComplete;
355
356 /// <summary>
347 /// Fired when the engine is shutting down the bootstrapper application. 357 /// Fired when the engine is shutting down the bootstrapper application.
348 /// </summary> 358 /// </summary>
349 event EventHandler<ShutdownEventArgs> Shutdown; 359 event EventHandler<ShutdownEventArgs> Shutdown;
diff --git a/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs b/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs
index 567a7cdd..3681a497 100644
--- a/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs
+++ b/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs
@@ -51,6 +51,11 @@ namespace WixToolset.Mba.Core
51 /// 51 ///
52 /// </summary> 52 /// </summary>
53 PatchBundle, 53 PatchBundle,
54
55 /// <summary>
56 ///
57 /// </summary>
58 UpdateBundle,
54 } 59 }
55 60
56 /// <summary> 61 /// <summary>
@@ -269,6 +274,20 @@ namespace WixToolset.Mba.Core
269 return package; 274 return package;
270 } 275 }
271 276
277 /// <summary>
278 ///
279 /// </summary>
280 /// <param name="id"></param>
281 /// <returns></returns>
282 public static IPackageInfo GetUpdateBundleAsPackage(string id)
283 {
284 PackageInfo package = new PackageInfo();
285 package.Id = id;
286 package.Type = PackageType.UpdateBundle;
287
288 return package;
289 }
290
272 internal static void ParseBalPackageInfoFromXml(XPathNavigator root, XmlNamespaceManager namespaceManager, Dictionary<string, IPackageInfo> packagesById) 291 internal static void ParseBalPackageInfoFromXml(XPathNavigator root, XmlNamespaceManager namespaceManager, Dictionary<string, IPackageInfo> packagesById)
273 { 292 {
274 XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixBalPackageInfo", namespaceManager); 293 XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixBalPackageInfo", namespaceManager);
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp
index 2746f49e..d9cc9b76 100644
--- a/src/api/burn/balutil/balinfo.cpp
+++ b/src/api/burn/balutil/balinfo.cpp
@@ -166,7 +166,7 @@ LExit:
166 166
167DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( 167DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage(
168 __in BAL_INFO_PACKAGES* pPackages, 168 __in BAL_INFO_PACKAGES* pPackages,
169 __in LPCWSTR wzId, 169 __in_z LPCWSTR wzId,
170 __in BOOTSTRAPPER_RELATION_TYPE relationType, 170 __in BOOTSTRAPPER_RELATION_TYPE relationType,
171 __in BOOL /*fPerMachine*/, 171 __in BOOL /*fPerMachine*/,
172 __out_opt BAL_INFO_PACKAGE** ppPackage 172 __out_opt BAL_INFO_PACKAGE** ppPackage
@@ -228,6 +228,47 @@ LExit:
228} 228}
229 229
230 230
231DAPI_(HRESULT) BalInfoAddUpdateBundleAsPackage(
232 __in BAL_INFO_PACKAGES* pPackages,
233 __in_z LPCWSTR wzId,
234 __in_z LPCWSTR /*wzPreviousId*/,
235 __out_opt BAL_INFO_PACKAGE** ppPackage
236 )
237{
238 HRESULT hr = S_OK;
239 BAL_INFO_PACKAGE* pPackage = NULL;
240
241 // Check to see if the bundle is already in the list of packages.
242 for (DWORD i = 0; i < pPackages->cPackages; ++i)
243 {
244 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzId, -1, pPackages->rgPackages[i].sczId, -1))
245 {
246 ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS));
247 }
248 }
249
250 // Add the update bundle as a package.
251 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pPackages->rgPackages), pPackages->cPackages + 1, sizeof(BAL_INFO_PACKAGE), 2);
252 ExitOnFailure(hr, "Failed to allocate memory for update bundle package information.");
253
254 pPackage = pPackages->rgPackages + pPackages->cPackages;
255 ++pPackages->cPackages;
256
257 hr = StrAllocString(&pPackage->sczId, wzId, 0);
258 ExitOnFailure(hr, "Failed to copy update bundle package id.");
259
260 pPackage->type = BAL_INFO_PACKAGE_TYPE_BUNDLE_UPDATE;
261
262 if (ppPackage)
263 {
264 *ppPackage = pPackage;
265 }
266
267LExit:
268 return hr;
269}
270
271
231DAPI_(HRESULT) BalInfoFindPackageById( 272DAPI_(HRESULT) BalInfoFindPackageById(
232 __in BAL_INFO_PACKAGES* pPackages, 273 __in BAL_INFO_PACKAGES* pPackages,
233 __in LPCWSTR wzId, 274 __in LPCWSTR wzId,
diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h
index 21cace1f..2698a6e3 100644
--- a/src/api/burn/balutil/inc/BAFunctions.h
+++ b/src/api/burn/balutil/inc/BAFunctions.h
@@ -82,6 +82,8 @@ enum BA_FUNCTIONS_MESSAGE
82 BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE, 82 BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE,
83 BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS, 83 BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS,
84 BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY, 84 BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY,
85 BA_FUNCTIONS_MESSAGE_ONSETUPDATEBEGIN = BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATEBEGIN,
86 BA_FUNCTIONS_MESSAGE_ONSETUPDATECOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATECOMPLETE,
85 87
86 BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024, 88 BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024,
87 BA_FUNCTIONS_MESSAGE_WNDPROC, 89 BA_FUNCTIONS_MESSAGE_WNDPROC,
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
index e45db2dc..8d9bddca 100644
--- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h
+++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
@@ -794,6 +794,20 @@ public: // IBootstrapperApplication
794 return S_OK; 794 return S_OK;
795 } 795 }
796 796
797 virtual STDMETHODIMP OnSetUpdateBegin()
798 {
799 return S_OK;
800 }
801
802 virtual STDMETHODIMP OnSetUpdateComplete(
803 __in HRESULT /*hrStatus*/,
804 __in_z_opt LPCWSTR /*wzPreviousPackageId*/,
805 __in_z_opt LPCWSTR /*wzNewPackageId*/
806 )
807 {
808 return S_OK;
809 }
810
797public: // IBAFunctions 811public: // IBAFunctions
798 virtual STDMETHODIMP OnPlan( 812 virtual STDMETHODIMP OnPlan(
799 ) 813 )
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h
index e841c660..1ab0df59 100644
--- a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h
+++ b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h
@@ -153,6 +153,8 @@ static HRESULT WINAPI BalBaseBAFunctionsProc(
153 case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE: 153 case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE:
154 case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS: 154 case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS:
155 case BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY: 155 case BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY:
156 case BA_FUNCTIONS_MESSAGE_ONSETUPDATEBEGIN:
157 case BA_FUNCTIONS_MESSAGE_ONSETUPDATECOMPLETE:
156 hr = BalBaseBootstrapperApplicationProc((BOOTSTRAPPER_APPLICATION_MESSAGE)message, pvArgs, pvResults, pvContext); 158 hr = BalBaseBootstrapperApplicationProc((BOOTSTRAPPER_APPLICATION_MESSAGE)message, pvArgs, pvResults, pvContext);
157 break; 159 break;
158 case BA_FUNCTIONS_MESSAGE_ONTHEMELOADED: 160 case BA_FUNCTIONS_MESSAGE_ONTHEMELOADED:
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
index c10b662c..4d043dfe 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
@@ -990,6 +990,20 @@ public: // IBootstrapperApplication
990 return S_OK; 990 return S_OK;
991 } 991 }
992 992
993 virtual STDMETHODIMP OnSetUpdateBegin()
994 {
995 return S_OK;
996 }
997
998 virtual STDMETHODIMP OnSetUpdateComplete(
999 __in HRESULT /*hrStatus*/,
1000 __in_z_opt LPCWSTR /*wzPreviousPackageId*/,
1001 __in_z_opt LPCWSTR /*wzNewPackageId*/
1002 )
1003 {
1004 return S_OK;
1005 }
1006
993public: //CBalBaseBootstrapperApplication 1007public: //CBalBaseBootstrapperApplication
994 virtual STDMETHODIMP Initialize( 1008 virtual STDMETHODIMP Initialize(
995 __in const BOOTSTRAPPER_CREATE_ARGS* pCreateArgs 1009 __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 f17e1fcb..59bfc1f8 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
@@ -666,6 +666,24 @@ static HRESULT BalBaseBAProcOnCachePayloadExtractComplete(
666 return pBA->OnCachePayloadExtractComplete(pArgs->wzContainerId, pArgs->wzPayloadId, pArgs->hrStatus); 666 return pBA->OnCachePayloadExtractComplete(pArgs->wzContainerId, pArgs->wzPayloadId, pArgs->hrStatus);
667} 667}
668 668
669static HRESULT BalBaseBAProcOnSetUpdateBegin(
670 __in IBootstrapperApplication* pBA,
671 __in BA_ONSETUPDATEBEGIN_ARGS* /*pArgs*/,
672 __inout BA_ONSETUPDATEBEGIN_RESULTS* /*pResults*/
673 )
674{
675 return pBA->OnSetUpdateBegin();
676}
677
678static HRESULT BalBaseBAProcOnSetUpdateComplete(
679 __in IBootstrapperApplication* pBA,
680 __in BA_ONSETUPDATECOMPLETE_ARGS* pArgs,
681 __inout BA_ONSETUPDATECOMPLETE_RESULTS* /*pResults*/
682 )
683{
684 return pBA->OnSetUpdateComplete(pArgs->hrStatus, pArgs->wzPreviousPackageId, pArgs->wzNewPackageId);
685}
686
669/******************************************************************* 687/*******************************************************************
670BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication. 688BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication.
671 Provides a default mapping between the new message based BA interface and 689 Provides a default mapping between the new message based BA interface and
@@ -904,6 +922,12 @@ static HRESULT WINAPI BalBaseBootstrapperApplicationProc(
904 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY: 922 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY:
905 hr = BalBaseBAProcOnPlanRollbackBoundary(pBA, reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_RESULTS*>(pvResults)); 923 hr = BalBaseBAProcOnPlanRollbackBoundary(pBA, reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_RESULTS*>(pvResults));
906 break; 924 break;
925 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATEBEGIN:
926 hr = BalBaseBAProcOnSetUpdateBegin(pBA, reinterpret_cast<BA_ONSETUPDATEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONSETUPDATEBEGIN_RESULTS*>(pvResults));
927 break;
928 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATECOMPLETE:
929 hr = BalBaseBAProcOnSetUpdateComplete(pBA, reinterpret_cast<BA_ONSETUPDATECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONSETUPDATECOMPLETE_RESULTS*>(pvResults));
930 break;
907 } 931 }
908 } 932 }
909 933
diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h
index 1fc99988..be9b7b6e 100644
--- a/src/api/burn/balutil/inc/IBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h
@@ -658,4 +658,12 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
658 __in_z_opt LPCWSTR wzPayloadId, 658 __in_z_opt LPCWSTR wzPayloadId,
659 __in HRESULT hrStatus 659 __in HRESULT hrStatus
660 ) = 0; 660 ) = 0;
661
662 STDMETHOD(OnSetUpdateBegin)() = 0;
663
664 STDMETHOD(OnSetUpdateComplete)(
665 __in HRESULT hrStatus,
666 __in_z_opt LPCWSTR wzPreviousPackageId,
667 __in_z_opt LPCWSTR wzNewPackageId
668 ) = 0;
661}; 669};
diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h
index 769becb2..8f61685f 100644
--- a/src/api/burn/balutil/inc/balinfo.h
+++ b/src/api/burn/balutil/inc/balinfo.h
@@ -16,6 +16,7 @@ typedef enum BAL_INFO_PACKAGE_TYPE
16 BAL_INFO_PACKAGE_TYPE_BUNDLE_UPGRADE, 16 BAL_INFO_PACKAGE_TYPE_BUNDLE_UPGRADE,
17 BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON, 17 BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON,
18 BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, 18 BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH,
19 BAL_INFO_PACKAGE_TYPE_BUNDLE_UPDATE,
19} BAL_INFO_PACKAGE_TYPE; 20} BAL_INFO_PACKAGE_TYPE;
20 21
21typedef enum _BAL_INFO_RESTART 22typedef enum _BAL_INFO_RESTART
@@ -125,7 +126,7 @@ DAPI_(HRESULT) BalInfoParseFromXml(
125 ********************************************************************/ 126 ********************************************************************/
126DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( 127DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage(
127 __in BAL_INFO_PACKAGES* pPackages, 128 __in BAL_INFO_PACKAGES* pPackages,
128 __in LPCWSTR wzId, 129 __in_z LPCWSTR wzId,
129 __in BOOTSTRAPPER_RELATION_TYPE relationType, 130 __in BOOTSTRAPPER_RELATION_TYPE relationType,
130 __in BOOL fPerMachine, 131 __in BOOL fPerMachine,
131 __out_opt BAL_INFO_PACKAGE** ppPackage 132 __out_opt BAL_INFO_PACKAGE** ppPackage
@@ -133,6 +134,18 @@ DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage(
133 134
134 135
135/******************************************************************* 136/*******************************************************************
137 BalInfoAddUpdateBundleAsPackage - adds an update bundle as a package.
138
139 ********************************************************************/
140DAPI_(HRESULT) BalInfoAddUpdateBundleAsPackage(
141 __in BAL_INFO_PACKAGES* pPackages,
142 __in_z LPCWSTR wzId,
143 __in_z LPCWSTR wzPreviousId,
144 __out_opt BAL_INFO_PACKAGE** ppPackage
145 );
146
147
148/*******************************************************************
136 BalInfoFindPackageById - finds a package by its id. 149 BalInfoFindPackageById - finds a package by its id.
137 150
138 ********************************************************************/ 151 ********************************************************************/