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