summaryrefslogtreecommitdiff
path: root/src/api/burn/balutil
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-05-13 13:50:50 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-05-14 11:12:31 -0500
commit6a6974a15deb6edf593736cdb8043bfb93064782 (patch)
tree0ae2afffcd02967ba3fe0f0a5d3e9273811f1e6f /src/api/burn/balutil
parent7d56566b7c51c49ded526466dfae6af9e1709040 (diff)
downloadwix-6a6974a15deb6edf593736cdb8043bfb93064782.tar.gz
wix-6a6974a15deb6edf593736cdb8043bfb93064782.tar.bz2
wix-6a6974a15deb6edf593736cdb8043bfb93064782.zip
Move infinite loop detection into the hosts.
Tell the BA during Destroy whether it will be reloaded, and let the BA decide then whether it's module should be unloaded. Show error when infinite prereq loop detected. Only clip the exit code if they're Win32 errors. Set related bundle type to none to avoid downgrades during preqba.
Diffstat (limited to 'src/api/burn/balutil')
-rw-r--r--src/api/burn/balutil/inc/BAFunctions.h17
-rw-r--r--src/api/burn/balutil/inc/balutil.h1
2 files changed, 17 insertions, 1 deletions
diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h
index c1057ab6..b23dd02e 100644
--- a/src/api/burn/balutil/inc/BAFunctions.h
+++ b/src/api/burn/balutil/inc/BAFunctions.h
@@ -126,6 +126,18 @@ struct BA_FUNCTIONS_CREATE_RESULTS
126 LPVOID pvBAFunctionsProcContext; 126 LPVOID pvBAFunctionsProcContext;
127}; 127};
128 128
129struct BA_FUNCTIONS_DESTROY_ARGS
130{
131 DWORD cbSize;
132 BOOL fReload;
133};
134
135struct BA_FUNCTIONS_DESTROY_RESULTS
136{
137 DWORD cbSize;
138 BOOL fDisableUnloading; // indicates the BAFunctions dll must not be unloaded after BAFunctionsDestroy.
139};
140
129struct BA_FUNCTIONS_ONTHEMECONTROLLOADED_ARGS 141struct BA_FUNCTIONS_ONTHEMECONTROLLOADED_ARGS
130{ 142{
131 DWORD cbSize; 143 DWORD cbSize;
@@ -218,7 +230,10 @@ typedef HRESULT(WINAPI *PFN_BA_FUNCTIONS_CREATE)(
218 __inout BA_FUNCTIONS_CREATE_RESULTS* pResults 230 __inout BA_FUNCTIONS_CREATE_RESULTS* pResults
219 ); 231 );
220 232
221typedef void (WINAPI *PFN_BA_FUNCTIONS_DESTROY)(); 233typedef void (WINAPI *PFN_BA_FUNCTIONS_DESTROY)(
234 __in const BA_FUNCTIONS_DESTROY_ARGS* pArgs,
235 __inout BA_FUNCTIONS_DESTROY_RESULTS* pResults
236 );
222 237
223#ifdef __cplusplus 238#ifdef __cplusplus
224} 239}
diff --git a/src/api/burn/balutil/inc/balutil.h b/src/api/burn/balutil/inc/balutil.h
index 2e370db7..33f1a6de 100644
--- a/src/api/burn/balutil/inc/balutil.h
+++ b/src/api/burn/balutil/inc/balutil.h
@@ -39,6 +39,7 @@ static const HRESULT E_WIXSTDBA_CONDITION_FAILED = MAKE_HRESULT(SEVERITY_ERROR,
39 39
40static const HRESULT E_MBAHOST_NET452_ON_WIN7RTM = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIX, 1000); 40static const HRESULT E_MBAHOST_NET452_ON_WIN7RTM = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIX, 1000);
41static const HRESULT E_DNCHOST_SCD_RUNTIME_FAILURE = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIX, 1001); 41static const HRESULT E_DNCHOST_SCD_RUNTIME_FAILURE = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIX, 1001);
42static const HRESULT E_PREREQBA_INFINITE_LOOP = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIX, 1002);
42 43
43 44
44/******************************************************************* 45/*******************************************************************