aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/plan.h
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-22 17:06:54 -0700
committerRob Mensching <rob@firegiant.com>2021-04-29 16:36:06 -0700
commitaf10c45d7b3a44af0b461a557847fe03263dcc10 (patch)
tree6a5c1532304782c36ffe4200b38f3afb76789a43 /src/burn/engine/plan.h
parent9c2aed97299fb96aeee3f1471ce40225437aaecf (diff)
downloadwix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.gz
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.bz2
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.zip
Move burn into burn
Diffstat (limited to 'src/burn/engine/plan.h')
-rw-r--r--src/burn/engine/plan.h456
1 files changed, 456 insertions, 0 deletions
diff --git a/src/burn/engine/plan.h b/src/burn/engine/plan.h
new file mode 100644
index 00000000..00ab5516
--- /dev/null
+++ b/src/burn/engine/plan.h
@@ -0,0 +1,456 @@
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
5#if defined(__cplusplus)
6extern "C" {
7#endif
8
9
10// constants
11
12const DWORD BURN_PLAN_INVALID_ACTION_INDEX = 0x80000000;
13
14enum BURN_REGISTRATION_ACTION_OPERATIONS
15{
16 BURN_REGISTRATION_ACTION_OPERATIONS_NONE = 0x0,
17 BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE = 0x1,
18 BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_REGISTRATION = 0x2,
19 BURN_REGISTRATION_ACTION_OPERATIONS_UPDATE_SIZE = 0x4,
20};
21
22enum BURN_DEPENDENCY_REGISTRATION_ACTION
23{
24 BURN_DEPENDENCY_REGISTRATION_ACTION_NONE,
25 BURN_DEPENDENCY_REGISTRATION_ACTION_REGISTER,
26 BURN_DEPENDENCY_REGISTRATION_ACTION_UNREGISTER,
27};
28
29enum BURN_DEPENDENT_REGISTRATION_ACTION_TYPE
30{
31 BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_NONE,
32 BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_REGISTER,
33 BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_UNREGISTER,
34};
35
36enum BURN_CACHE_ACTION_TYPE
37{
38 BURN_CACHE_ACTION_TYPE_NONE,
39 BURN_CACHE_ACTION_TYPE_CHECKPOINT,
40 BURN_CACHE_ACTION_TYPE_LAYOUT_BUNDLE,
41 BURN_CACHE_ACTION_TYPE_PACKAGE,
42 BURN_CACHE_ACTION_TYPE_ROLLBACK_PACKAGE,
43 BURN_CACHE_ACTION_TYPE_SIGNAL_SYNCPOINT,
44 BURN_CACHE_ACTION_TYPE_CONTAINER,
45};
46
47enum BURN_EXECUTE_ACTION_TYPE
48{
49 BURN_EXECUTE_ACTION_TYPE_NONE,
50 BURN_EXECUTE_ACTION_TYPE_CHECKPOINT,
51 BURN_EXECUTE_ACTION_TYPE_WAIT_SYNCPOINT,
52 BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE,
53 BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE,
54 BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE,
55 BURN_EXECUTE_ACTION_TYPE_MSP_TARGET,
56 BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE,
57 BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER,
58 BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY,
59 BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY,
60 BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION,
61 BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION,
62};
63
64enum BURN_CLEAN_ACTION_TYPE
65{
66 BURN_CLEAN_ACTION_TYPE_NONE,
67 BURN_CLEAN_ACTION_TYPE_BUNDLE,
68 BURN_CLEAN_ACTION_TYPE_PACKAGE,
69};
70
71
72// structs
73
74typedef struct _BURN_DEPENDENT_REGISTRATION_ACTION
75{
76 BURN_DEPENDENT_REGISTRATION_ACTION_TYPE type;
77 LPWSTR sczBundleId;
78 LPWSTR sczDependentProviderKey;
79} BURN_DEPENDENT_REGISTRATION_ACTION;
80
81typedef struct _BURN_CACHE_CONTAINER_PROGRESS
82{
83 LPWSTR wzId;
84 DWORD iIndex;
85 BOOL fCachedDuringApply;
86 BURN_CONTAINER* pContainer;
87} BURN_CACHE_CONTAINER_PROGRESS;
88
89typedef struct _BURN_CACHE_PAYLOAD_PROGRESS
90{
91 LPWSTR wzId;
92 DWORD iIndex;
93 BOOL fCachedDuringApply;
94 BURN_PAYLOAD* pPayload;
95} BURN_CACHE_PAYLOAD_PROGRESS;
96
97typedef struct _BURN_CACHE_ACTION
98{
99 BURN_CACHE_ACTION_TYPE type;
100 union
101 {
102 struct
103 {
104 DWORD dwId;
105 } checkpoint;
106 struct
107 {
108 LPWSTR sczExecutableName;
109 LPWSTR sczUnverifiedPath;
110 DWORD64 qwBundleSize;
111 BURN_PAYLOAD_GROUP* pPayloadGroup;
112 } bundleLayout;
113 struct
114 {
115 BURN_PACKAGE* pPackage;
116 } package;
117 struct
118 {
119 BURN_PACKAGE* pPackage;
120 } rollbackPackage;
121 struct
122 {
123 HANDLE hEvent;
124 } syncpoint;
125 struct
126 {
127 BURN_CONTAINER* pContainer;
128 } container;
129 };
130} BURN_CACHE_ACTION;
131
132typedef struct _BURN_ORDERED_PATCHES
133{
134 BURN_PACKAGE* pPackage;
135
136 BURN_MSPTARGETPRODUCT* pTargetProduct; // only valid in the unelevated engine.
137} BURN_ORDERED_PATCHES;
138
139typedef struct _BURN_EXECUTE_ACTION_CHECKPOINT
140{
141 DWORD dwId;
142 BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary;
143} BURN_EXECUTE_ACTION_CHECKPOINT;
144
145typedef struct _BURN_EXECUTE_ACTION
146{
147 BURN_EXECUTE_ACTION_TYPE type;
148 BOOL fDeleted; // used to skip an action after it was planned since deleting actions out of the plan is too hard.
149 union
150 {
151 BURN_EXECUTE_ACTION_CHECKPOINT checkpoint;
152 struct
153 {
154 HANDLE hEvent;
155 } syncpoint;
156 struct
157 {
158 BURN_PACKAGE* pPackage;
159 } uncachePackage;
160 struct
161 {
162 BURN_PACKAGE* pPackage;
163 BOOL fFireAndForget;
164 BOOTSTRAPPER_ACTION_STATE action;
165 LPWSTR sczIgnoreDependencies;
166 LPWSTR sczAncestors;
167 } exePackage;
168 struct
169 {
170 BURN_PACKAGE* pPackage;
171 LPWSTR sczLogPath;
172 DWORD dwLoggingAttributes;
173 BURN_MSI_PROPERTY actionMsiProperty;
174 INSTALLUILEVEL uiLevel;
175 BOOL fDisableExternalUiHandler;
176 BOOTSTRAPPER_ACTION_STATE action;
177
178 BOOTSTRAPPER_FEATURE_ACTION* rgFeatures;
179 } msiPackage;
180 struct
181 {
182 BURN_PACKAGE* pPackage;
183 LPWSTR sczTargetProductCode;
184 BURN_PACKAGE* pChainedTargetPackage;
185 BOOL fSlipstream;
186 BOOL fPerMachineTarget;
187 LPWSTR sczLogPath;
188 BURN_MSI_PROPERTY actionMsiProperty;
189 INSTALLUILEVEL uiLevel;
190 BOOL fDisableExternalUiHandler;
191 BOOTSTRAPPER_ACTION_STATE action;
192
193 BURN_ORDERED_PATCHES* rgOrderedPatches;
194 DWORD cOrderedPatches;
195 } mspTarget;
196 struct
197 {
198 BURN_PACKAGE* pPackage;
199 LPWSTR sczLogPath;
200 BOOTSTRAPPER_ACTION_STATE action;
201 } msuPackage;
202 struct
203 {
204 BURN_ROLLBACK_BOUNDARY* pRollbackBoundary;
205 } rollbackBoundary;
206 struct
207 {
208 BURN_PACKAGE* pPackage;
209 BURN_DEPENDENCY_ACTION action;
210 } packageProvider;
211 struct
212 {
213 BURN_PACKAGE* pPackage;
214 LPWSTR sczBundleProviderKey;
215 BURN_DEPENDENCY_ACTION action;
216 } packageDependency;
217 struct
218 {
219 BURN_ROLLBACK_BOUNDARY* pRollbackBoundary;
220 } msiTransaction;
221 };
222} BURN_EXECUTE_ACTION;
223
224typedef struct _BURN_CLEAN_ACTION
225{
226 BURN_PACKAGE* pPackage;
227} BURN_CLEAN_ACTION;
228
229typedef struct _BURN_PLAN
230{
231 BOOTSTRAPPER_ACTION action;
232 BURN_PAYLOADS* pPayloads; // points directly into parent the ENGINE_STATE.
233 LPWSTR wzBundleId; // points directly into parent the ENGINE_STATE.
234 LPWSTR wzBundleProviderKey; // points directly into parent the ENGINE_STATE.
235 BOOL fPerMachine;
236 BOOL fCanAffectMachineState;
237 DWORD dwRegistrationOperations;
238 BOOL fDisallowRemoval;
239 BOOL fDisableRollback;
240 BOOL fAffectedMachineState;
241 BOOL fIgnoreAllDependents;
242 LPWSTR sczLayoutDirectory;
243
244 DWORD64 qwCacheSizeTotal;
245
246 DWORD64 qwEstimatedSize;
247
248 DWORD cExecutePackagesTotal;
249 DWORD cOverallProgressTicksTotal;
250
251 BOOL fEnabledForwardCompatibleBundle;
252 BURN_PACKAGE forwardCompatibleBundle;
253
254 BURN_DEPENDENCY_REGISTRATION_ACTION dependencyRegistrationAction;
255
256 BURN_DEPENDENT_REGISTRATION_ACTION* rgRegistrationActions;
257 DWORD cRegistrationActions;
258
259 BURN_DEPENDENT_REGISTRATION_ACTION* rgRollbackRegistrationActions;
260 DWORD cRollbackRegistrationActions;
261
262 BURN_CACHE_ACTION* rgCacheActions;
263 DWORD cCacheActions;
264
265 BURN_CACHE_ACTION* rgRollbackCacheActions;
266 DWORD cRollbackCacheActions;
267
268 BURN_EXECUTE_ACTION* rgExecuteActions;
269 DWORD cExecuteActions;
270
271 BURN_EXECUTE_ACTION* rgRollbackActions;
272 DWORD cRollbackActions;
273
274 BURN_CLEAN_ACTION* rgCleanActions;
275 DWORD cCleanActions;
276
277 DEPENDENCY* rgPlannedProviders;
278 UINT cPlannedProviders;
279
280 BURN_CACHE_CONTAINER_PROGRESS* rgContainerProgress;
281 DWORD cContainerProgress;
282 STRINGDICT_HANDLE shContainerProgress;
283
284 BURN_CACHE_PAYLOAD_PROGRESS* rgPayloadProgress;
285 DWORD cPayloadProgress;
286 STRINGDICT_HANDLE shPayloadProgress;
287
288 DWORD dwNextCheckpointId; // for plan internal use
289 BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary; // for plan internal use
290} BURN_PLAN;
291
292
293// functions
294
295void PlanReset(
296 __in BURN_PLAN* pPlan,
297 __in BURN_CONTAINERS* pContainers,
298 __in BURN_PACKAGES* pPackages,
299 __in BURN_PAYLOAD_GROUP* pLayoutPayloads
300 );
301void PlanUninitializeExecuteAction(
302 __in BURN_EXECUTE_ACTION* pExecuteAction
303 );
304HRESULT PlanSetVariables(
305 __in BOOTSTRAPPER_ACTION action,
306 __in BURN_VARIABLES* pVariables
307 );
308HRESULT PlanDefaultPackageRequestState(
309 __in BURN_PACKAGE_TYPE packageType,
310 __in BOOTSTRAPPER_PACKAGE_STATE currentState,
311 __in BOOL fPermanent,
312 __in BOOTSTRAPPER_ACTION action,
313 __in BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition,
314 __in BOOTSTRAPPER_RELATION_TYPE relationType,
315 __out BOOTSTRAPPER_REQUEST_STATE* pRequestState
316 );
317HRESULT PlanLayoutBundle(
318 __in BURN_PLAN* pPlan,
319 __in_z LPCWSTR wzExecutableName,
320 __in DWORD64 qwBundleSize,
321 __in BURN_VARIABLES* pVariables,
322 __in BURN_PAYLOAD_GROUP* pLayoutPayloads
323 );
324HRESULT PlanForwardCompatibleBundles(
325 __in BURN_USER_EXPERIENCE* pUX,
326 __in BOOTSTRAPPER_COMMAND* pCommand,
327 __in BURN_PLAN* pPlan,
328 __in BURN_REGISTRATION* pRegistration,
329 __in BOOTSTRAPPER_ACTION action
330 );
331HRESULT PlanPackages(
332 __in BURN_USER_EXPERIENCE* pUX,
333 __in BURN_PACKAGES* pPackages,
334 __in BURN_PLAN* pPlan,
335 __in BURN_LOGGING* pLog,
336 __in BURN_VARIABLES* pVariables,
337 __in BOOTSTRAPPER_DISPLAY display,
338 __in BOOTSTRAPPER_RELATION_TYPE relationType
339 );
340HRESULT PlanRegistration(
341 __in BURN_PLAN* pPlan,
342 __in BURN_REGISTRATION* pRegistration,
343 __in BOOTSTRAPPER_RESUME_TYPE resumeType,
344 __in BOOTSTRAPPER_RELATION_TYPE relationType,
345 __inout BOOL* pfContinuePlanning
346 );
347HRESULT PlanPassThroughBundle(
348 __in BURN_USER_EXPERIENCE* pUX,
349 __in BURN_PACKAGE* pPackage,
350 __in BURN_PLAN* pPlan,
351 __in BURN_LOGGING* pLog,
352 __in BURN_VARIABLES* pVariables,
353 __in BOOTSTRAPPER_DISPLAY display,
354 __in BOOTSTRAPPER_RELATION_TYPE relationType
355 );
356HRESULT PlanUpdateBundle(
357 __in BURN_USER_EXPERIENCE* pUX,
358 __in BURN_PACKAGE* pPackage,
359 __in BURN_PLAN* pPlan,
360 __in BURN_LOGGING* pLog,
361 __in BURN_VARIABLES* pVariables,
362 __in BOOTSTRAPPER_DISPLAY display,
363 __in BOOTSTRAPPER_RELATION_TYPE relationType
364 );
365HRESULT PlanLayoutContainer(
366 __in BURN_PLAN* pPlan,
367 __in BURN_CONTAINER* pContainer
368 );
369HRESULT PlanLayoutPackage(
370 __in BURN_PLAN* pPlan,
371 __in BURN_PACKAGE* pPackage
372 );
373HRESULT PlanExecutePackage(
374 __in BOOL fPerMachine,
375 __in BOOTSTRAPPER_DISPLAY display,
376 __in BURN_USER_EXPERIENCE* pUserExperience,
377 __in BURN_PLAN* pPlan,
378 __in BURN_PACKAGE* pPackage,
379 __in BURN_LOGGING* pLog,
380 __in BURN_VARIABLES* pVariables,
381 __inout HANDLE* phSyncpointEvent
382 );
383HRESULT PlanDefaultRelatedBundleRequestState(
384 __in BOOTSTRAPPER_RELATION_TYPE commandRelationType,
385 __in BOOTSTRAPPER_RELATION_TYPE relatedBundleRelationType,
386 __in BOOTSTRAPPER_ACTION action,
387 __in VERUTIL_VERSION* pRegistrationVersion,
388 __in VERUTIL_VERSION* pRelatedBundleVersion,
389 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestState
390 );
391HRESULT PlanRelatedBundlesBegin(
392 __in BURN_USER_EXPERIENCE* pUserExperience,
393 __in BURN_REGISTRATION* pRegistration,
394 __in BOOTSTRAPPER_RELATION_TYPE relationType,
395 __in BURN_PLAN* pPlan
396 );
397HRESULT PlanRelatedBundlesComplete(
398 __in BURN_REGISTRATION* pRegistration,
399 __in BURN_PLAN* pPlan,
400 __in BURN_LOGGING* pLog,
401 __in BURN_VARIABLES* pVariables,
402 __in DWORD dwExecuteActionEarlyIndex
403 );
404HRESULT PlanFinalizeActions(
405 __in BURN_PLAN* pPlan
406 );
407HRESULT PlanCleanPackage(
408 __in BURN_PLAN* pPlan,
409 __in BURN_PACKAGE* pPackage
410 );
411HRESULT PlanExecuteCacheSyncAndRollback(
412 __in BURN_PLAN* pPlan,
413 __in BURN_PACKAGE* pPackage,
414 __in HANDLE hCacheEvent
415 );
416HRESULT PlanExecuteCheckpoint(
417 __in BURN_PLAN* pPlan
418 );
419HRESULT PlanInsertExecuteAction(
420 __in DWORD dwIndex,
421 __in BURN_PLAN* pPlan,
422 __out BURN_EXECUTE_ACTION** ppExecuteAction
423 );
424HRESULT PlanInsertRollbackAction(
425 __in DWORD dwIndex,
426 __in BURN_PLAN* pPlan,
427 __out BURN_EXECUTE_ACTION** ppRollbackAction
428 );
429HRESULT PlanAppendExecuteAction(
430 __in BURN_PLAN* pPlan,
431 __out BURN_EXECUTE_ACTION** ppExecuteAction
432 );
433HRESULT PlanAppendRollbackAction(
434 __in BURN_PLAN* pPlan,
435 __out BURN_EXECUTE_ACTION** ppExecuteAction
436 );
437HRESULT PlanRollbackBoundaryBegin(
438 __in BURN_PLAN* pPlan,
439 __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary
440 );
441HRESULT PlanRollbackBoundaryComplete(
442 __in BURN_PLAN* pPlan
443 );
444HRESULT PlanSetResumeCommand(
445 __in BURN_REGISTRATION* pRegistration,
446 __in BOOTSTRAPPER_ACTION action,
447 __in BOOTSTRAPPER_COMMAND* pCommand,
448 __in BURN_LOGGING* pLog
449 );
450void PlanDump(
451 __in BURN_PLAN* pPlan
452 );
453
454#if defined(__cplusplus)
455}
456#endif