aboutsummaryrefslogtreecommitdiff
path: root/src/engine/userexperience.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/userexperience.h')
-rw-r--r--src/engine/userexperience.h439
1 files changed, 439 insertions, 0 deletions
diff --git a/src/engine/userexperience.h b/src/engine/userexperience.h
new file mode 100644
index 00000000..27a94115
--- /dev/null
+++ b/src/engine/userexperience.h
@@ -0,0 +1,439 @@
1#pragma once
2// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4#define BAAPI HRESULT __stdcall
5
6#if defined(__cplusplus)
7extern "C" {
8#endif
9
10
11// constants
12
13const DWORD MB_RETRYTRYAGAIN = 0xF;
14
15
16// structs
17
18struct BOOTSTRAPPER_ENGINE_CONTEXT;
19
20typedef struct _BURN_USER_EXPERIENCE
21{
22 BOOL fSplashScreen;
23 BURN_PAYLOADS payloads;
24
25 HMODULE hUXModule;
26 PFN_BOOTSTRAPPER_APPLICATION_PROC pfnBAProc;
27 LPVOID pvBAProcContext;
28 LPWSTR sczTempDirectory;
29
30 CRITICAL_SECTION csEngineActive; // Changing the engine active state in the user experience must be
31 // syncronized through this critical section.
32 // Note: The engine must never do a UX callback while in this critical section.
33
34 BOOL fEngineActive; // Indicates that the engine is currently active with one of the execution
35 // steps (detect, plan, apply), and cannot accept requests from the UX.
36 // This flag should be cleared by the engine prior to UX callbacks that
37 // allows altering of the engine state.
38
39 HRESULT hrApplyError; // Tracks is an error occurs during apply that requires the cache or
40 // execute threads to bail.
41
42 HWND hwndApply; // The window handle provided at the beginning of Apply(). Only valid
43 // during apply.
44
45 HWND hwndDetect; // The window handle provided at the beginning of Detect(). Only valid
46 // during Detect.
47
48 DWORD dwExitCode; // Exit code returned by the user experience for the engine overall.
49} BURN_USER_EXPERIENCE;
50
51// functions
52
53HRESULT UserExperienceParseFromXml(
54 __in BURN_USER_EXPERIENCE* pUserExperience,
55 __in IXMLDOMNode* pixnBundle
56 );
57void UserExperienceUninitialize(
58 __in BURN_USER_EXPERIENCE* pUserExperience
59 );
60HRESULT UserExperienceLoad(
61 __in BURN_USER_EXPERIENCE* pUserExperience,
62 __in BOOTSTRAPPER_ENGINE_CONTEXT* pEngineContext,
63 __in BOOTSTRAPPER_COMMAND* pCommand
64 );
65HRESULT UserExperienceUnload(
66 __in BURN_USER_EXPERIENCE* pUserExperience
67 );
68HRESULT UserExperienceEnsureWorkingFolder(
69 __in LPCWSTR wzBundleId,
70 __deref_out_z LPWSTR* psczUserExperienceWorkingFolder
71 );
72HRESULT UserExperienceRemove(
73 __in BURN_USER_EXPERIENCE* pUserExperience
74 );
75int UserExperienceSendError(
76 __in BURN_USER_EXPERIENCE* pUserExperience,
77 __in BOOTSTRAPPER_ERROR_TYPE errorType,
78 __in_z_opt LPCWSTR wzPackageId,
79 __in HRESULT hrCode,
80 __in_z_opt LPCWSTR wzError,
81 __in DWORD uiFlags,
82 __in int nRecommendation
83 );
84HRESULT UserExperienceActivateEngine(
85 __in BURN_USER_EXPERIENCE* pUserExperience,
86 __out_opt BOOL* pfActivated
87 );
88void UserExperienceDeactivateEngine(
89 __in BURN_USER_EXPERIENCE* pUserExperience
90 );
91HRESULT UserExperienceEnsureEngineInactive(
92 __in BURN_USER_EXPERIENCE* pUserExperience
93 );
94void UserExperienceExecuteReset(
95 __in BURN_USER_EXPERIENCE* pUserExperience
96 );
97void UserExperienceExecutePhaseComplete(
98 __in BURN_USER_EXPERIENCE* pUserExperience,
99 __in HRESULT hrResult
100 );
101BAAPI UserExperienceOnApplyBegin(
102 __in BURN_USER_EXPERIENCE* pUserExperience,
103 __in DWORD dwPhaseCount
104 );
105BAAPI UserExperienceOnApplyComplete(
106 __in BURN_USER_EXPERIENCE* pUserExperience,
107 __in HRESULT hrStatus,
108 __in BOOTSTRAPPER_APPLY_RESTART restart,
109 __inout BOOTSTRAPPER_APPLYCOMPLETE_ACTION* pAction
110);
111BAAPI UserExperienceOnCacheAcquireBegin(
112 __in BURN_USER_EXPERIENCE* pUserExperience,
113 __in_z_opt LPCWSTR wzPackageOrContainerId,
114 __in_z_opt LPCWSTR wzPayloadId,
115 __in BOOTSTRAPPER_CACHE_OPERATION operation,
116 __in_z LPCWSTR wzSource
117 );
118BAAPI UserExperienceOnCacheAcquireComplete(
119 __in BURN_USER_EXPERIENCE* pUserExperience,
120 __in_z_opt LPCWSTR wzPackageOrContainerId,
121 __in_z_opt LPCWSTR wzPayloadId,
122 __in HRESULT hrStatus,
123 __inout BOOL* pfRetry
124 );
125BAAPI UserExperienceOnCacheAcquireProgress(
126 __in BURN_USER_EXPERIENCE* pUserExperience,
127 __in_z_opt LPCWSTR wzPackageOrContainerId,
128 __in_z_opt LPCWSTR wzPayloadId,
129 __in DWORD64 dw64Progress,
130 __in DWORD64 dw64Total,
131 __in DWORD dwOverallPercentage
132 );
133BAAPI UserExperienceOnCacheBegin(
134 __in BURN_USER_EXPERIENCE* pUserExperience
135 );
136BAAPI UserExperienceOnCacheComplete(
137 __in BURN_USER_EXPERIENCE* pUserExperience,
138 __in HRESULT hrStatus
139 );
140BAAPI UserExperienceOnCachePackageBegin(
141 __in BURN_USER_EXPERIENCE* pUserExperience,
142 __in_z LPCWSTR wzPackageId,
143 __in DWORD cCachePayloads,
144 __in DWORD64 dw64PackageCacheSize
145 );
146BAAPI UserExperienceOnCachePackageComplete(
147 __in BURN_USER_EXPERIENCE* pUserExperience,
148 __in_z LPCWSTR wzPackageId,
149 __in HRESULT hrStatus,
150 __inout BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION* pAction
151 );
152BAAPI UserExperienceOnCacheVerifyBegin(
153 __in BURN_USER_EXPERIENCE* pUserExperience,
154 __in_z_opt LPCWSTR wzPackageOrContainerId,
155 __in_z_opt LPCWSTR wzPayloadId
156 );
157BAAPI UserExperienceOnCacheVerifyComplete(
158 __in BURN_USER_EXPERIENCE* pUserExperience,
159 __in_z_opt LPCWSTR wzPackageOrContainerId,
160 __in_z_opt LPCWSTR wzPayloadId,
161 __in HRESULT hrStatus,
162 __inout BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION* pAction
163 );
164BAAPI UserExperienceOnDetectBegin(
165 __in BURN_USER_EXPERIENCE* pUserExperience,
166 __in BOOL fInstalled,
167 __in DWORD cPackages
168 );
169BAAPI UserExperienceOnDetectCompatibleMsiPackage(
170 __in BURN_USER_EXPERIENCE* pUserExperience,
171 __in_z LPCWSTR wzPackageId,
172 __in_z LPCWSTR wzCompatiblePackageId,
173 __in DWORD64 dw64CompatiblePackageVersion
174 );
175BAAPI UserExperienceOnDetectComplete(
176 __in BURN_USER_EXPERIENCE* pUserExperience,
177 __in HRESULT hrStatus
178 );
179BAAPI UserExperienceOnDetectForwardCompatibleBundle(
180 __in BURN_USER_EXPERIENCE* pUserExperience,
181 __in_z LPCWSTR wzBundleId,
182 __in BOOTSTRAPPER_RELATION_TYPE relationType,
183 __in_z LPCWSTR wzBundleTag,
184 __in BOOL fPerMachine,
185 __in DWORD64 dw64Version,
186 __inout BOOL* pfIgnoreBundle
187 );
188BAAPI UserExperienceOnDetectMsiFeature(
189 __in BURN_USER_EXPERIENCE* pUserExperience,
190 __in_z LPCWSTR wzPackageId,
191 __in_z LPCWSTR wzFeatureId,
192 __in BOOTSTRAPPER_FEATURE_STATE state
193 );
194BAAPI UserExperienceOnDetectPackageBegin(
195 __in BURN_USER_EXPERIENCE* pUserExperience,
196 __in_z LPCWSTR wzPackageId
197 );
198BAAPI UserExperienceOnDetectPackageComplete(
199 __in BURN_USER_EXPERIENCE* pUserExperience,
200 __in_z LPCWSTR wzPackageId,
201 __in HRESULT hrStatus,
202 __in BOOTSTRAPPER_PACKAGE_STATE state
203 );
204BAAPI UserExperienceOnDetectRelatedBundle(
205 __in BURN_USER_EXPERIENCE* pUserExperience,
206 __in_z LPCWSTR wzBundleId,
207 __in BOOTSTRAPPER_RELATION_TYPE relationType,
208 __in_z LPCWSTR wzBundleTag,
209 __in BOOL fPerMachine,
210 __in DWORD64 dw64Version,
211 __in BOOTSTRAPPER_RELATED_OPERATION operation
212 );
213BAAPI UserExperienceOnDetectRelatedMsiPackage(
214 __in BURN_USER_EXPERIENCE* pUserExperience,
215 __in_z LPCWSTR wzPackageId,
216 __in_z LPCWSTR wzUpgradeCode,
217 __in_z LPCWSTR wzProductCode,
218 __in BOOL fPerMachine,
219 __in DWORD64 dw64Version,
220 __in BOOTSTRAPPER_RELATED_OPERATION operation
221 );
222BAAPI UserExperienceOnDetectTargetMsiPackage(
223 __in BURN_USER_EXPERIENCE* pUserExperience,
224 __in_z LPCWSTR wzPackageId,
225 __in_z LPCWSTR wzProductCode,
226 __in BOOTSTRAPPER_PACKAGE_STATE patchState
227 );
228BAAPI UserExperienceOnDetectUpdate(
229 __in BURN_USER_EXPERIENCE* pUserExperience,
230 __in_z LPCWSTR wzUpdateLocation,
231 __in DWORD64 dw64Size,
232 __in DWORD64 dw64Version,
233 __in_z_opt LPCWSTR wzTitle,
234 __in_z_opt LPCWSTR wzSummary,
235 __in_z_opt LPCWSTR wzContentType,
236 __in_z_opt LPCWSTR wzContent,
237 __inout BOOL* pfStopProcessingUpdates
238 );
239BAAPI UserExperienceOnDetectUpdateBegin(
240 __in BURN_USER_EXPERIENCE* pUserExperience,
241 __in_z LPCWSTR wzUpdateLocation,
242 __inout BOOL* pfSkip
243 );
244BAAPI UserExperienceOnDetectUpdateComplete(
245 __in BURN_USER_EXPERIENCE* pUserExperience,
246 __in HRESULT hrStatus,
247 __inout BOOL* pfIgnoreError
248 );
249BAAPI UserExperienceOnElevateBegin(
250 __in BURN_USER_EXPERIENCE* pUserExperience
251 );
252BAAPI UserExperienceOnElevateComplete(
253 __in BURN_USER_EXPERIENCE* pUserExperience,
254 __in HRESULT hrStatus
255 );
256BAAPI UserExperienceOnError(
257 __in BURN_USER_EXPERIENCE* pUserExperience,
258 __in BOOTSTRAPPER_ERROR_TYPE errorType,
259 __in_z_opt LPCWSTR wzPackageId,
260 __in DWORD dwCode,
261 __in_z_opt LPCWSTR wzError,
262 __in DWORD dwUIHint,
263 __in DWORD cData,
264 __in_ecount_z_opt(cData) LPCWSTR* rgwzData,
265 __inout int* pnResult
266 );
267BAAPI UserExperienceOnExecuteBegin(
268 __in BURN_USER_EXPERIENCE* pUserExperience,
269 __in DWORD cExecutingPackages
270 );
271BAAPI UserExperienceOnExecuteComplete(
272 __in BURN_USER_EXPERIENCE* pUserExperience,
273 __in HRESULT hrStatus
274);
275BAAPI UserExperienceOnExecuteFilesInUse(
276 __in BURN_USER_EXPERIENCE* pUserExperience,
277 __in_z LPCWSTR wzPackageId,
278 __in DWORD cFiles,
279 __in_ecount_z_opt(cFiles) LPCWSTR* rgwzFiles,
280 __inout int* pnResult
281 );
282BAAPI UserExperienceOnExecuteMsiMessage(
283 __in BURN_USER_EXPERIENCE* pUserExperience,
284 __in_z LPCWSTR wzPackageId,
285 __in INSTALLMESSAGE messageType,
286 __in DWORD dwUIHint,
287 __in_z LPCWSTR wzMessage,
288 __in DWORD cData,
289 __in_ecount_z_opt(cData) LPCWSTR* rgwzData,
290 __inout int* pnResult
291 );
292BAAPI UserExperienceOnExecutePackageBegin(
293 __in BURN_USER_EXPERIENCE* pUserExperience,
294 __in_z LPCWSTR wzPackageId,
295 __in BOOL fExecute
296 );
297BAAPI UserExperienceOnExecutePackageComplete(
298 __in BURN_USER_EXPERIENCE* pUserExperience,
299 __in_z LPCWSTR wzPackageId,
300 __in HRESULT hrStatus,
301 __in BOOTSTRAPPER_APPLY_RESTART restart,
302 __inout BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION* pAction
303 );
304BAAPI UserExperienceOnExecutePatchTarget(
305 __in BURN_USER_EXPERIENCE* pUserExperience,
306 __in_z LPCWSTR wzPackageId,
307 __in_z LPCWSTR wzTargetProductCode
308 );
309BAAPI UserExperienceOnExecuteProgress(
310 __in BURN_USER_EXPERIENCE* pUserExperience,
311 __in_z LPCWSTR wzPackageId,
312 __in DWORD dwProgressPercentage,
313 __in DWORD dwOverallPercentage,
314 __inout int* pnResult
315 );
316BAAPI UserExperienceOnLaunchApprovedExeBegin(
317 __in BURN_USER_EXPERIENCE* pUserExperience
318 );
319BAAPI UserExperienceOnLaunchApprovedExeComplete(
320 __in BURN_USER_EXPERIENCE* pUserExperience,
321 __in HRESULT hrStatus,
322 __in DWORD dwProcessId
323 );
324BAAPI UserExperienceOnPlanBegin(
325 __in BURN_USER_EXPERIENCE* pUserExperience,
326 __in DWORD cPackages
327 );
328BAAPI UserExperienceOnPlanCompatibleMsiPackageBegin(
329 __in BURN_USER_EXPERIENCE* pUserExperience,
330 __in_z LPCWSTR wzPackageId,
331 __in_z LPCWSTR wzCompatiblePackageId,
332 __in DWORD64 dw64CompatiblePackageVersion,
333 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState
334 );
335BAAPI UserExperienceOnPlanCompatibleMsiPackageComplete(
336 __in BURN_USER_EXPERIENCE* pUserExperience,
337 __in_z LPCWSTR wzPackageId,
338 __in_z LPCWSTR wzCompatiblePackageId,
339 __in HRESULT hrStatus,
340 __in BOOTSTRAPPER_PACKAGE_STATE state,
341 __in BOOTSTRAPPER_REQUEST_STATE requested,
342 __in BOOTSTRAPPER_ACTION_STATE execute,
343 __in BOOTSTRAPPER_ACTION_STATE rollback
344 );
345BAAPI UserExperienceOnPlanComplete(
346 __in BURN_USER_EXPERIENCE* pUserExperience,
347 __in HRESULT hrStatus
348 );
349BAAPI UserExperienceOnPlanMsiFeature(
350 __in BURN_USER_EXPERIENCE* pUserExperience,
351 __in_z LPCWSTR wzPackageId,
352 __in_z LPCWSTR wzFeatureId,
353 __inout BOOTSTRAPPER_FEATURE_STATE* pRequestedState
354 );
355BAAPI UserExperienceOnPlanPackageBegin(
356 __in BURN_USER_EXPERIENCE* pUserExperience,
357 __in_z LPCWSTR wzPackageId,
358 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState
359 );
360BAAPI UserExperienceOnPlanPackageComplete(
361 __in BURN_USER_EXPERIENCE* pUserExperience,
362 __in_z LPCWSTR wzPackageId,
363 __in HRESULT hrStatus,
364 __in BOOTSTRAPPER_PACKAGE_STATE state,
365 __in BOOTSTRAPPER_REQUEST_STATE requested,
366 __in BOOTSTRAPPER_ACTION_STATE execute,
367 __in BOOTSTRAPPER_ACTION_STATE rollback
368 );
369BAAPI UserExperienceOnPlanRelatedBundle(
370 __in BURN_USER_EXPERIENCE* pUserExperience,
371 __in_z LPCWSTR wzBundleId,
372 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState
373 );
374BAAPI UserExperienceOnPlanTargetMsiPackage(
375 __in BURN_USER_EXPERIENCE* pUserExperience,
376 __in_z LPCWSTR wzPackageId,
377 __in_z LPCWSTR wzProductCode,
378 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState
379 );
380BAAPI UserExperienceOnProgress(
381 __in BURN_USER_EXPERIENCE* pUserExperience,
382 __in BOOL fRollback,
383 __in DWORD dwProgressPercentage,
384 __in DWORD dwOverallPercentage
385 );
386BAAPI UserExperienceOnRegisterBegin(
387 __in BURN_USER_EXPERIENCE* pUserExperience
388 );
389BAAPI UserExperienceOnRegisterComplete(
390 __in BURN_USER_EXPERIENCE* pUserExperience,
391 __in HRESULT hrStatus
392 );
393BAAPI UserExperienceOnResolveSource(
394 __in BURN_USER_EXPERIENCE* pUserExperience,
395 __in_z LPCWSTR wzPackageOrContainerId,
396 __in_z_opt LPCWSTR wzPayloadId,
397 __in_z LPCWSTR wzLocalSource,
398 __in_z_opt LPCWSTR wzDownloadSource,
399 __inout BOOTSTRAPPER_RESOLVESOURCE_ACTION* pAction
400 );
401BAAPI UserExperienceOnShutdown(
402 __in BURN_USER_EXPERIENCE* pUserExperience,
403 __inout BOOTSTRAPPER_SHUTDOWN_ACTION* pAction
404 );
405BAAPI UserExperienceOnStartup(
406 __in BURN_USER_EXPERIENCE* pUserExperience
407 );
408BAAPI UserExperienceOnSystemShutdown(
409 __in BURN_USER_EXPERIENCE* pUserExperience,
410 __in DWORD dwEndSession,
411 __inout BOOL* pfCancel
412 );
413BAAPI UserExperienceOnUnregisterBegin(
414 __in BURN_USER_EXPERIENCE* pUserExperience
415 );
416BAAPI UserExperienceOnUnregisterComplete(
417 __in BURN_USER_EXPERIENCE* pUserExperience,
418 __in HRESULT hrStatus
419 );
420HRESULT UserExperienceInterpretResult(
421 __in BURN_USER_EXPERIENCE* pUserExperience,
422 __in DWORD dwAllowedResults,
423 __in int nResult
424 );
425int UserExperienceCheckExecuteResult(
426 __in BURN_USER_EXPERIENCE* pUserExperience,
427 __in BOOL fRollback,
428 __in DWORD dwAllowedResults,
429 __in int nResult
430 );
431HRESULT UserExperienceInterpretExecuteResult(
432 __in BURN_USER_EXPERIENCE* pUserExperience,
433 __in BOOL fRollback,
434 __in DWORD dwAllowedResults,
435 __in int nResult
436 );
437#if defined(__cplusplus)
438}
439#endif