aboutsummaryrefslogtreecommitdiff
path: root/src/engine/plan.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/plan.h')
-rw-r--r--src/engine/plan.h543
1 files changed, 543 insertions, 0 deletions
diff --git a/src/engine/plan.h b/src/engine/plan.h
new file mode 100644
index 00000000..54cfe59d
--- /dev/null
+++ b/src/engine/plan.h
@@ -0,0 +1,543 @@
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_START,
42 BURN_CACHE_ACTION_TYPE_PACKAGE_STOP,
43 BURN_CACHE_ACTION_TYPE_ROLLBACK_PACKAGE,
44 BURN_CACHE_ACTION_TYPE_SIGNAL_SYNCPOINT,
45 BURN_CACHE_ACTION_TYPE_ACQUIRE_CONTAINER,
46 BURN_CACHE_ACTION_TYPE_EXTRACT_CONTAINER,
47 BURN_CACHE_ACTION_TYPE_LAYOUT_CONTAINER,
48 BURN_CACHE_ACTION_TYPE_ACQUIRE_PAYLOAD,
49 BURN_CACHE_ACTION_TYPE_CACHE_PAYLOAD,
50 BURN_CACHE_ACTION_TYPE_LAYOUT_PAYLOAD,
51 BURN_CACHE_ACTION_TYPE_TRANSACTION_BOUNDARY,
52};
53
54enum BURN_EXECUTE_ACTION_TYPE
55{
56 BURN_EXECUTE_ACTION_TYPE_NONE,
57 BURN_EXECUTE_ACTION_TYPE_CHECKPOINT,
58 BURN_EXECUTE_ACTION_TYPE_WAIT_SYNCPOINT,
59 BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE,
60 BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE,
61 BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE,
62 BURN_EXECUTE_ACTION_TYPE_MSP_TARGET,
63 BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE,
64 BURN_EXECUTE_ACTION_TYPE_SERVICE_STOP,
65 BURN_EXECUTE_ACTION_TYPE_SERVICE_START,
66 BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER,
67 BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY,
68 BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY,
69 BURN_EXECUTE_ACTION_TYPE_REGISTRATION,
70 BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE,
71};
72
73enum BURN_CLEAN_ACTION_TYPE
74{
75 BURN_CLEAN_ACTION_TYPE_NONE,
76 BURN_CLEAN_ACTION_TYPE_BUNDLE,
77 BURN_CLEAN_ACTION_TYPE_PACKAGE,
78};
79
80
81// structs
82
83typedef struct _BURN_EXTRACT_PAYLOAD
84{
85 BURN_PACKAGE* pPackage;
86 BURN_PAYLOAD* pPayload;
87 LPWSTR sczUnverifiedPath;
88} BURN_EXTRACT_PAYLOAD;
89
90typedef struct _BURN_DEPENDENT_REGISTRATION_ACTION
91{
92 BURN_DEPENDENT_REGISTRATION_ACTION_TYPE type;
93 LPWSTR sczBundleId;
94 LPWSTR sczDependentProviderKey;
95} BURN_DEPENDENT_REGISTRATION_ACTION;
96
97typedef struct _BURN_CACHE_CONTAINER_PROGRESS
98{
99 LPWSTR wzId;
100 DWORD iIndex;
101 BOOL fCachedDuringApply;
102 BURN_CONTAINER* pContainer;
103} BURN_CACHE_CONTAINER_PROGRESS;
104
105typedef struct _BURN_CACHE_PAYLOAD_PROGRESS
106{
107 LPWSTR wzId;
108 DWORD iIndex;
109 BOOL fCachedDuringApply;
110 BURN_PAYLOAD* pPayload;
111} BURN_CACHE_PAYLOAD_PROGRESS;
112
113typedef struct _BURN_CACHE_ACTION
114{
115 BURN_CACHE_ACTION_TYPE type;
116 BOOL fSkipUntilRetried;
117 union
118 {
119 struct
120 {
121 DWORD dwId;
122 } checkpoint;
123 struct
124 {
125 LPWSTR sczExecutableName;
126 LPWSTR sczLayoutDirectory;
127 LPWSTR sczUnverifiedPath;
128 DWORD64 qwBundleSize;
129 } bundleLayout;
130 struct
131 {
132 BURN_PACKAGE* pPackage;
133 DWORD cCachePayloads;
134 DWORD64 qwCachePayloadSizeTotal;
135 DWORD iPackageCompleteAction;
136 } packageStart;
137 struct
138 {
139 BURN_PACKAGE* pPackage;
140 } packageStop;
141 struct
142 {
143 BURN_PACKAGE* pPackage;
144 } rollbackPackage;
145 struct
146 {
147 HANDLE hEvent;
148 } syncpoint;
149 struct
150 {
151 BURN_CONTAINER* pContainer;
152 DWORD iProgress;
153 LPWSTR sczUnverifiedPath;
154 } resolveContainer;
155 struct
156 {
157 BURN_CONTAINER* pContainer;
158 DWORD iSkipUntilAcquiredByAction;
159 LPWSTR sczContainerUnverifiedPath;
160
161 BURN_EXTRACT_PAYLOAD* rgPayloads;
162 DWORD cPayloads;
163 } extractContainer;
164 struct
165 {
166 BURN_PACKAGE* pPackage;
167 BURN_CONTAINER* pContainer;
168 DWORD iProgress;
169 DWORD iTryAgainAction;
170 DWORD cTryAgainAttempts;
171 LPWSTR sczLayoutDirectory;
172 LPWSTR sczUnverifiedPath;
173 BOOL fMove;
174 } layoutContainer;
175 struct
176 {
177 BURN_PACKAGE* pPackage;
178 BURN_PAYLOAD* pPayload;
179 DWORD iProgress;
180 LPWSTR sczUnverifiedPath;
181 } resolvePayload;
182 struct
183 {
184 BURN_PACKAGE* pPackage;
185 BURN_PAYLOAD* pPayload;
186 DWORD iProgress;
187 DWORD iTryAgainAction;
188 DWORD cTryAgainAttempts;
189 LPWSTR sczUnverifiedPath;
190 BOOL fMove;
191 } cachePayload;
192 struct
193 {
194 BURN_PACKAGE* pPackage;
195 BURN_PAYLOAD* pPayload;
196 DWORD iProgress;
197 DWORD iTryAgainAction;
198 DWORD cTryAgainAttempts;
199 LPWSTR sczLayoutDirectory;
200 LPWSTR sczUnverifiedPath;
201 BOOL fMove;
202 } layoutPayload;
203 struct
204 {
205 BURN_ROLLBACK_BOUNDARY* pRollbackBoundary;
206 HANDLE hEvent;
207 } rollbackBoundary;
208 };
209} BURN_CACHE_ACTION;
210
211typedef struct _BURN_ORDERED_PATCHES
212{
213 DWORD dwOrder;
214 BURN_PACKAGE* pPackage;
215} BURN_ORDERED_PATCHES;
216
217typedef struct _BURN_EXECUTE_ACTION
218{
219 BURN_EXECUTE_ACTION_TYPE type;
220 BOOL fDeleted; // used to skip an action after it was planned since deleting actions out of the plan is too hard.
221 union
222 {
223 struct
224 {
225 DWORD dwId;
226 } checkpoint;
227 struct
228 {
229 HANDLE hEvent;
230 } syncpoint;
231 struct
232 {
233 BURN_PACKAGE* pPackage;
234 } uncachePackage;
235 struct
236 {
237 BURN_PACKAGE* pPackage;
238 BOOL fFireAndForget;
239 BOOTSTRAPPER_ACTION_STATE action;
240 LPWSTR sczIgnoreDependencies;
241 LPWSTR sczAncestors;
242 } exePackage;
243 struct
244 {
245 BURN_PACKAGE* pPackage;
246 LPWSTR sczLogPath;
247 DWORD dwLoggingAttributes;
248 INSTALLUILEVEL uiLevel;
249 BOOTSTRAPPER_ACTION_STATE action;
250
251 BOOTSTRAPPER_FEATURE_ACTION* rgFeatures;
252 BOOTSTRAPPER_ACTION_STATE* rgSlipstreamPatches;
253
254 BURN_ORDERED_PATCHES* rgOrderedPatches;
255 DWORD cPatches;
256 } msiPackage;
257 struct
258 {
259 BURN_PACKAGE* pPackage;
260 LPWSTR sczTargetProductCode;
261 BURN_PACKAGE* pChainedTargetPackage;
262 BOOL fSlipstream;
263 BOOL fPerMachineTarget;
264 LPWSTR sczLogPath;
265 INSTALLUILEVEL uiLevel;
266 BOOTSTRAPPER_ACTION_STATE action;
267
268 BURN_ORDERED_PATCHES* rgOrderedPatches;
269 DWORD cOrderedPatches;
270 } mspTarget;
271 struct
272 {
273 BURN_PACKAGE* pPackage;
274 LPWSTR sczLogPath;
275 BOOTSTRAPPER_ACTION_STATE action;
276 } msuPackage;
277 struct
278 {
279 LPWSTR sczServiceName;
280 } service;
281 struct
282 {
283 BOOL fKeep;
284 } registration;
285 struct
286 {
287 BURN_ROLLBACK_BOUNDARY* pRollbackBoundary;
288 } rollbackBoundary;
289 struct
290 {
291 BURN_PACKAGE* pPackage;
292 BURN_DEPENDENCY_ACTION action;
293 } packageProvider;
294 struct
295 {
296 BURN_PACKAGE* pPackage;
297 LPWSTR sczBundleProviderKey;
298 BURN_DEPENDENCY_ACTION action;
299 } packageDependency;
300 struct
301 {
302 BURN_PACKAGE* pReferencePackage;
303 LPWSTR sczInstalledProductCode;
304 DWORD64 qwInstalledVersion;
305 } compatiblePackage;
306 };
307} BURN_EXECUTE_ACTION;
308
309typedef struct _BURN_CLEAN_ACTION
310{
311 BURN_PACKAGE* pPackage;
312} BURN_CLEAN_ACTION;
313
314typedef struct _BURN_PLAN
315{
316 BOOTSTRAPPER_ACTION action;
317 LPWSTR wzBundleId; // points directly into parent the ENGINE_STATE.
318 LPWSTR wzBundleProviderKey; // points directly into parent the ENGINE_STATE.
319 BOOL fPerMachine;
320 BOOL fRegister;
321 DWORD dwRegistrationOperations;
322 BOOL fKeepRegistrationDefault;
323 BOOL fDisallowRemoval;
324
325 DWORD64 qwCacheSizeTotal;
326
327 DWORD64 qwEstimatedSize;
328
329 DWORD cExecutePackagesTotal;
330 DWORD cOverallProgressTicksTotal;
331
332 BURN_DEPENDENCY_REGISTRATION_ACTION dependencyRegistrationAction;
333
334 BURN_DEPENDENT_REGISTRATION_ACTION* rgRegistrationActions;
335 DWORD cRegistrationActions;
336
337 BURN_DEPENDENT_REGISTRATION_ACTION* rgRollbackRegistrationActions;
338 DWORD cRollbackRegistrationActions;
339
340 BURN_CACHE_ACTION* rgCacheActions;
341 DWORD cCacheActions;
342
343 BURN_CACHE_ACTION* rgRollbackCacheActions;
344 DWORD cRollbackCacheActions;
345
346 BURN_EXECUTE_ACTION* rgExecuteActions;
347 DWORD cExecuteActions;
348
349 BURN_EXECUTE_ACTION* rgRollbackActions;
350 DWORD cRollbackActions;
351
352 BURN_CLEAN_ACTION* rgCleanActions;
353 DWORD cCleanActions;
354
355 DEPENDENCY* rgPlannedProviders;
356 UINT cPlannedProviders;
357
358 BURN_CACHE_CONTAINER_PROGRESS* rgContainerProgress;
359 DWORD cContainerProgress;
360 STRINGDICT_HANDLE shContainerProgress;
361
362 BURN_CACHE_PAYLOAD_PROGRESS* rgPayloadProgress;
363 DWORD cPayloadProgress;
364 STRINGDICT_HANDLE shPayloadProgress;
365} BURN_PLAN;
366
367
368// functions
369
370void PlanReset(
371 __in BURN_PLAN* pPlan,
372 __in BURN_PACKAGES* pPackages
373 );
374void PlanUninitializeExecuteAction(
375 __in BURN_EXECUTE_ACTION* pExecuteAction
376 );
377HRESULT PlanSetVariables(
378 __in BOOTSTRAPPER_ACTION action,
379 __in BURN_VARIABLES* pVariables
380 );
381HRESULT PlanDefaultPackageRequestState(
382 __in BURN_PACKAGE_TYPE packageType,
383 __in BOOTSTRAPPER_PACKAGE_STATE currentState,
384 __in BOOL fPermanent,
385 __in BOOTSTRAPPER_ACTION action,
386 __in BURN_VARIABLES* pVariables,
387 __in_z_opt LPCWSTR wzInstallCondition,
388 __in BOOTSTRAPPER_RELATION_TYPE relationType,
389 __out BOOTSTRAPPER_REQUEST_STATE* pRequestState
390 );
391HRESULT PlanLayoutBundle(
392 __in BURN_PLAN* pPlan,
393 __in_z LPCWSTR wzExecutableName,
394 __in DWORD64 qwBundleSize,
395 __in BURN_VARIABLES* pVariables,
396 __in BURN_PAYLOADS* pPayloads,
397 __out_z LPWSTR* psczLayoutDirectory
398 );
399HRESULT PlanPackages(
400 __in BURN_REGISTRATION* pRegistration,
401 __in BURN_USER_EXPERIENCE* pUX,
402 __in BURN_PACKAGES* pPackages,
403 __in BURN_PLAN* pPlan,
404 __in BURN_LOGGING* pLog,
405 __in BURN_VARIABLES* pVariables,
406 __in BOOL fBundleInstalled,
407 __in BOOTSTRAPPER_DISPLAY display,
408 __in BOOTSTRAPPER_RELATION_TYPE relationType,
409 __in_z_opt LPCWSTR wzLayoutDirectory,
410 __inout HANDLE* phSyncpointEvent
411 );
412HRESULT PlanRegistration(
413 __in BURN_PLAN* pPlan,
414 __in BURN_REGISTRATION* pRegistration,
415 __in BOOTSTRAPPER_RESUME_TYPE resumeType,
416 __in BOOTSTRAPPER_RELATION_TYPE relationType,
417 __in_z_opt LPCWSTR wzIgnoreDependencies,
418 __out BOOL* pfContinuePlanning
419 );
420HRESULT PlanPassThroughBundle(
421 __in BURN_USER_EXPERIENCE* pUX,
422 __in BURN_PACKAGE* pPackage,
423 __in BURN_PLAN* pPlan,
424 __in BURN_LOGGING* pLog,
425 __in BURN_VARIABLES* pVariables,
426 __in BOOTSTRAPPER_DISPLAY display,
427 __in BOOTSTRAPPER_RELATION_TYPE relationType,
428 __inout HANDLE* phSyncpointEvent
429 );
430HRESULT PlanUpdateBundle(
431 __in BURN_USER_EXPERIENCE* pUX,
432 __in BURN_PACKAGE* pPackage,
433 __in BURN_PLAN* pPlan,
434 __in BURN_LOGGING* pLog,
435 __in BURN_VARIABLES* pVariables,
436 __in BOOTSTRAPPER_DISPLAY display,
437 __in BOOTSTRAPPER_RELATION_TYPE relationType,
438 __inout HANDLE* phSyncpointEvent
439 );
440HRESULT PlanLayoutPackage(
441 __in BURN_PLAN* pPlan,
442 __in BURN_PACKAGE* pPackage,
443 __in_z_opt LPCWSTR wzLayoutDirectory
444 );
445HRESULT PlanCachePackage(
446 __in BOOL fPerMachine,
447 __in BURN_USER_EXPERIENCE* pUserExperience,
448 __in BURN_PLAN* pPlan,
449 __in BURN_PACKAGE* pPackage,
450 __in BURN_VARIABLES* pVariables,
451 __out HANDLE* phSyncpointEvent
452 );
453HRESULT PlanExecutePackage(
454 __in BOOL fPerMachine,
455 __in BOOTSTRAPPER_DISPLAY display,
456 __in BURN_USER_EXPERIENCE* pUserExperience,
457 __in BURN_PLAN* pPlan,
458 __in BURN_PACKAGE* pPackage,
459 __in BURN_LOGGING* pLog,
460 __in BURN_VARIABLES* pVariables,
461 __inout HANDLE* phSyncpointEvent
462 );
463HRESULT PlanRelatedBundlesBegin(
464 __in BURN_USER_EXPERIENCE* pUserExperience,
465 __in BURN_REGISTRATION* pRegistration,
466 __in BOOTSTRAPPER_RELATION_TYPE relationType,
467 __in BURN_PLAN* pPlan
468 );
469HRESULT PlanRelatedBundlesComplete(
470 __in BURN_REGISTRATION* pRegistration,
471 __in BURN_PLAN* pPlan,
472 __in BURN_LOGGING* pLog,
473 __in BURN_VARIABLES* pVariables,
474 __inout HANDLE* phSyncpointEvent,
475 __in DWORD dwExecuteActionEarlyIndex
476 );
477HRESULT PlanFinalizeActions(
478 __in BURN_PLAN* pPlan
479 );
480HRESULT PlanCleanPackage(
481 __in BURN_PLAN* pPlan,
482 __in BURN_PACKAGE* pPackage
483 );
484HRESULT PlanExecuteCacheSyncAndRollback(
485 __in BURN_PLAN* pPlan,
486 __in BURN_PACKAGE* pPackage,
487 __in HANDLE hCacheEvent,
488 __in BOOL fPlanPackageCacheRollback
489 );
490HRESULT PlanExecuteCheckpoint(
491 __in BURN_PLAN* pPlan
492 );
493HRESULT PlanInsertExecuteAction(
494 __in DWORD dwIndex,
495 __in BURN_PLAN* pPlan,
496 __out BURN_EXECUTE_ACTION** ppExecuteAction
497 );
498HRESULT PlanInsertRollbackAction(
499 __in DWORD dwIndex,
500 __in BURN_PLAN* pPlan,
501 __out BURN_EXECUTE_ACTION** ppRollbackAction
502 );
503HRESULT PlanAppendExecuteAction(
504 __in BURN_PLAN* pPlan,
505 __out BURN_EXECUTE_ACTION** ppExecuteAction
506 );
507HRESULT PlanAppendRollbackAction(
508 __in BURN_PLAN* pPlan,
509 __out BURN_EXECUTE_ACTION** ppExecuteAction
510 );
511HRESULT PlanKeepRegistration(
512 __in BURN_PLAN* pPlan,
513 __in DWORD iAfterExecutePackageAction,
514 __in DWORD iBeforeRollbackPackageAction
515 );
516HRESULT PlanRemoveRegistration(
517 __in BURN_PLAN* pPlan,
518 __in DWORD iAfterExecutePackageAction,
519 __in DWORD iAfterRollbackPackageAction
520 );
521HRESULT PlanRollbackBoundaryBegin(
522 __in BURN_PLAN* pPlan,
523 __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary
524 );
525HRESULT PlanRollbackBoundaryComplete(
526 __in BURN_PLAN* pPlan
527 );
528HRESULT PlanSetResumeCommand(
529 __in BURN_REGISTRATION* pRegistration,
530 __in BOOTSTRAPPER_ACTION action,
531 __in BOOTSTRAPPER_COMMAND* pCommand,
532 __in BURN_LOGGING* pLog
533 );
534
535#ifdef DEBUG
536void PlanDump(
537 __in BURN_PLAN* pPlan
538 );
539#endif
540
541#if defined(__cplusplus)
542}
543#endif