main
h 490 lines 14.9 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 struct _BURN_RELATED_BUNDLES;
10 typedef _BURN_RELATED_BUNDLES BURN_RELATED_BUNDLES;
11
12 struct _BURN_PACKAGE;
13 typedef _BURN_PACKAGE BURN_PACKAGE;
14
15 // constants
16
17 const DWORD BURN_PACKAGE_INVALID_PATCH_INDEX = 0x80000000;
18
19 enum BURN_CACHE_PACKAGE_TYPE
20 {
21 BURN_CACHE_PACKAGE_TYPE_NONE,
22 BURN_CACHE_PACKAGE_TYPE_OPTIONAL,
23 BURN_CACHE_PACKAGE_TYPE_REQUIRED,
24 };
25
26 enum BURN_EXE_DETECTION_TYPE
27 {
28 BURN_EXE_DETECTION_TYPE_NONE,
29 BURN_EXE_DETECTION_TYPE_CONDITION,
30 BURN_EXE_DETECTION_TYPE_ARP,
31 };
32
33 enum BURN_EXE_EXIT_CODE_TYPE
34 {
35 BURN_EXE_EXIT_CODE_TYPE_NONE,
36 BURN_EXE_EXIT_CODE_TYPE_SUCCESS,
37 BURN_EXE_EXIT_CODE_TYPE_ERROR,
38 BURN_EXE_EXIT_CODE_TYPE_SCHEDULE_REBOOT,
39 BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT,
40 BURN_EXE_EXIT_CODE_TYPE_ERROR_SCHEDULE_REBOOT,
41 BURN_EXE_EXIT_CODE_TYPE_ERROR_FORCE_REBOOT,
42 };
43
44 enum BURN_EXE_PROTOCOL_TYPE
45 {
46 BURN_EXE_PROTOCOL_TYPE_NONE,
47 BURN_EXE_PROTOCOL_TYPE_BURN,
48 BURN_EXE_PROTOCOL_TYPE_NETFX4,
49 };
50
51 enum BURN_PACKAGE_TYPE
52 {
53 BURN_PACKAGE_TYPE_NONE,
54 BURN_PACKAGE_TYPE_BUNDLE,
55 BURN_PACKAGE_TYPE_EXE,
56 BURN_PACKAGE_TYPE_MSI,
57 BURN_PACKAGE_TYPE_MSP,
58 BURN_PACKAGE_TYPE_MSU,
59 };
60
61 enum BURN_DEPENDENCY_ACTION
62 {
63 BURN_DEPENDENCY_ACTION_NONE,
64 BURN_DEPENDENCY_ACTION_UNREGISTER,
65 BURN_DEPENDENCY_ACTION_REGISTER,
66 };
67
68 enum BURN_PATCH_TARGETCODE_TYPE
69 {
70 BURN_PATCH_TARGETCODE_TYPE_UNKNOWN,
71 BURN_PATCH_TARGETCODE_TYPE_PRODUCT,
72 BURN_PATCH_TARGETCODE_TYPE_UPGRADE,
73 };
74
75 enum BOOTSTRAPPER_FEATURE_ACTION
76 {
77 BOOTSTRAPPER_FEATURE_ACTION_NONE,
78 BOOTSTRAPPER_FEATURE_ACTION_ADDLOCAL,
79 BOOTSTRAPPER_FEATURE_ACTION_ADDSOURCE,
80 BOOTSTRAPPER_FEATURE_ACTION_ADDDEFAULT,
81 BOOTSTRAPPER_FEATURE_ACTION_REINSTALL,
82 BOOTSTRAPPER_FEATURE_ACTION_ADVERTISE,
83 BOOTSTRAPPER_FEATURE_ACTION_REMOVE,
84 };
85
86 enum BURN_PACKAGE_REGISTRATION_STATE
87 {
88 BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN,
89 BURN_PACKAGE_REGISTRATION_STATE_ABSENT,
90 BURN_PACKAGE_REGISTRATION_STATE_IGNORED,
91 BURN_PACKAGE_REGISTRATION_STATE_PRESENT,
92 };
93
94 enum BURN_PATCH_SKIP_STATE
95 {
96 BURN_PATCH_SKIP_STATE_NONE,
97 BURN_PATCH_SKIP_STATE_TARGET_UNINSTALL,
98 BURN_PATCH_SKIP_STATE_SLIPSTREAM,
99 };
100
101 // structs
102
103 typedef struct _BURN_EXE_EXIT_CODE
104 {
105 BURN_EXE_EXIT_CODE_TYPE type;
106 DWORD dwCode;
107 BOOL fWildcard;
108 } BURN_EXE_EXIT_CODE;
109
110 typedef struct _BURN_EXE_COMMAND_LINE_ARGUMENT
111 {
112 LPWSTR sczInstallArgument;
113 LPWSTR sczUninstallArgument;
114 LPWSTR sczRepairArgument;
115 LPWSTR sczCondition;
116 } BURN_EXE_COMMAND_LINE_ARGUMENT;
117
118 typedef struct _BURN_MSPTARGETPRODUCT
119 {
120 MSIINSTALLCONTEXT context;
121 DWORD dwOrder;
122 WCHAR wzTargetProductCode[39];
123 BURN_PACKAGE* pChainedTargetPackage;
124 BOOL fInstalled;
125 BOOL fSlipstream;
126 BOOL fSlipstreamRequired; // this means the target product is not present on the machine, but is available in the chain as a slipstream target.
127
128 BOOTSTRAPPER_PACKAGE_STATE patchPackageState; // only valid after Detect.
129 BOOTSTRAPPER_REQUEST_STATE defaultRequested; // only valid during Plan.
130 BOOTSTRAPPER_REQUEST_STATE requested; // only valid during Plan.
131 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
132 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
133 BURN_PATCH_SKIP_STATE executeSkip; // only valid during Plan.
134 BURN_PATCH_SKIP_STATE rollbackSkip; // only valid during Plan.
135
136 BURN_PACKAGE_REGISTRATION_STATE registrationState; // initialized during Detect, updated during Apply.
137 BURN_PACKAGE_REGISTRATION_STATE transactionRegistrationState;// only valid during Apply inside an MSI transaction.
138 } BURN_MSPTARGETPRODUCT;
139
140 typedef struct _BURN_MSIPROPERTY
141 {
142 LPWSTR sczId;
143 LPWSTR sczValue; // used during forward execution
144 LPWSTR sczRollbackValue; // used during rollback
145 LPWSTR sczCondition;
146 } BURN_MSIPROPERTY;
147
148 typedef struct _BURN_MSIFEATURE
149 {
150 LPWSTR sczId;
151 LPWSTR sczAddLocalCondition;
152 LPWSTR sczAddSourceCondition;
153 LPWSTR sczAdvertiseCondition;
154 LPWSTR sczRollbackAddLocalCondition;
155 LPWSTR sczRollbackAddSourceCondition;
156 LPWSTR sczRollbackAdvertiseCondition;
157
158 BOOTSTRAPPER_FEATURE_STATE currentState; // only valid after Detect.
159 BOOTSTRAPPER_FEATURE_STATE expectedState; // only valid during Plan.
160 BOOTSTRAPPER_FEATURE_STATE defaultRequested; // only valid during Plan.
161 BOOTSTRAPPER_FEATURE_STATE requested; // only valid during Plan.
162 BOOTSTRAPPER_FEATURE_ACTION execute; // only valid during Plan.
163 BOOTSTRAPPER_FEATURE_ACTION rollback; // only valid during Plan.
164 } BURN_MSIFEATURE;
165
166 typedef struct _BURN_COMPATIBLE_PROVIDER_ENTRY
167 {
168 LPWSTR sczProviderKey;
169 LPWSTR sczId;
170 LPWSTR sczName;
171 LPWSTR sczVersion;
172 } BURN_COMPATIBLE_PROVIDER_ENTRY;
173
174 typedef struct _BURN_RELATED_MSI
175 {
176 LPWSTR sczUpgradeCode;
177 VERUTIL_VERSION* pMinVersion;
178 VERUTIL_VERSION* pMaxVersion;
179 BOOL fMinProvided;
180 BOOL fMaxProvided;
181 BOOL fMinInclusive;
182 BOOL fMaxInclusive;
183 BOOL fOnlyDetect;
184 BOOL fLangInclusive;
185
186 DWORD* rgdwLanguages;
187 DWORD cLanguages;
188 } BURN_RELATED_MSI;
189
190 typedef struct _BURN_CHAINED_PATCH
191 {
192 BURN_PACKAGE* pMspPackage;
193 DWORD dwMspTargetProductIndex; // index into the Msp.rgTargetProducts
194 } BURN_CHAINED_PATCH;
195
196 typedef struct _BURN_SLIPSTREAM_MSP
197 {
198 BURN_PACKAGE* pMspPackage;
199 DWORD dwMsiChainedPatchIndex; // index into the Msi.rgChainedPatches
200
201 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
202 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
203 } BURN_SLIPSTREAM_MSP;
204
205 typedef struct _BURN_DEPENDENCY_PROVIDER
206 {
207 LPWSTR sczKey;
208 LPWSTR sczVersion;
209 LPWSTR sczDisplayName;
210 BOOL fImported;
211
212 BOOL fExists; // only valid after Detect.
213 BOOL fBundleRegisteredAsDependent; // only valid after Detect.
214 DEPENDENCY* rgDependents; // only valid after Detect.
215 UINT cDependents; // only valid after Detect.
216
217 BURN_DEPENDENCY_ACTION dependentExecute; // only valid during Plan.
218 BURN_DEPENDENCY_ACTION dependentRollback; // only valid during Plan.
219 BURN_DEPENDENCY_ACTION providerExecute; // only valid during Plan.
220 BURN_DEPENDENCY_ACTION providerRollback; // only valid during Plan.
221 } BURN_DEPENDENCY_PROVIDER;
222
223 typedef struct _BURN_ROLLBACK_BOUNDARY
224 {
225 LPWSTR sczId;
226 BOOL fVital;
227 BOOL fTransactionAuthored;
228 BOOL fTransaction;
229 BOOL fActiveTransaction; // only valid during Apply.
230 LPWSTR sczLogPathVariable;
231 LPWSTR sczLogPath;
232 } BURN_ROLLBACK_BOUNDARY;
233
234 typedef struct _BURN_PATCH_TARGETCODE
235 {
236 LPWSTR sczTargetCode;
237 BURN_PATCH_TARGETCODE_TYPE type;
238 } BURN_PATCH_TARGETCODE;
239
240 typedef struct _BURN_COMPATIBLE_PACKAGE
241 {
242 BOOL fDetected;
243 BOOL fPlannable;
244 BOOL fDefaultRequested;
245 BOOL fRequested;
246 BOOL fRemove;
247 LPWSTR sczCacheId;
248 BURN_COMPATIBLE_PROVIDER_ENTRY compatibleEntry;
249
250 BURN_PACKAGE_TYPE type;
251 union
252 {
253 struct
254 {
255 LPWSTR sczVersion;
256 VERUTIL_VERSION* pVersion;
257 } Msi;
258 };
259 } BURN_COMPATIBLE_PACKAGE;
260
261 typedef struct _BURN_PACKAGE
262 {
263 LPWSTR sczId;
264
265 LPWSTR sczLogPathVariable; // name of the variable that will be set to the log path.
266 LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path.
267 LPWSTR sczCompatibleLogPathVariable;
268
269 LPWSTR sczInstallCondition;
270 LPWSTR sczRepairCondition;
271 BOOL fPerMachine;
272 BOOL fPermanent;
273 BOOL fVital;
274 BOOL fCanAffectRegistration;
275
276 BOOTSTRAPPER_CACHE_TYPE authoredCacheType;
277 LPWSTR sczCacheId;
278
279 DWORD64 qwInstallSize;
280 DWORD64 qwSize;
281
282 BURN_ROLLBACK_BOUNDARY* pRollbackBoundaryForward; // used during install and repair.
283 BURN_ROLLBACK_BOUNDARY* pRollbackBoundaryBackward; // used during uninstall.
284
285 BOOTSTRAPPER_PACKAGE_STATE currentState; // only valid after Detect.
286 BOOL fCached; // only valid after Detect.
287 BOOTSTRAPPER_CACHE_TYPE cacheType; // only valid during Plan.
288 BOOTSTRAPPER_REQUEST_STATE defaultRequested;// only valid during Plan.
289 BOOTSTRAPPER_REQUEST_STATE requested; // only valid during Plan.
290 BOOL fCacheVital; // only valid during Plan.
291 BOOL fPlannedUncache; // only valid during Plan.
292 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
293 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
294 BOOL fProviderExecute; // only valid during Plan.
295 BOOL fProviderRollback; // only valid during Plan.
296 BURN_DEPENDENCY_ACTION dependencyExecute; // only valid during Plan.
297 BURN_DEPENDENCY_ACTION dependencyRollback; // only valid during Plan.
298 BOOL fDependencyManagerWasHere; // only valid during Plan.
299 BURN_CACHE_PACKAGE_TYPE executeCacheType; // only valid during Plan.
300 BURN_CACHE_PACKAGE_TYPE rollbackCacheType; // only valid during Plan.
301 HANDLE hCacheEvent; // only valid during Plan.
302 LPWSTR sczCacheFolder; // only valid during Apply.
303 HRESULT hrCacheResult; // only valid during Apply.
304 BOOL fAcquireOptionalSource; // only valid during Apply.
305 BOOL fReachedExecution; // only valid during Apply.
306 BOOL fAbandonedProcess; // only valid during Apply.
307
308 BURN_PACKAGE_REGISTRATION_STATE cacheRegistrationState; // initialized during Detect, updated during Apply.
309 BURN_PACKAGE_REGISTRATION_STATE installRegistrationState; // initialized during Detect, updated during Apply.
310 BURN_PACKAGE_REGISTRATION_STATE expectedCacheRegistrationState; // only valid after Plan.
311 BURN_PACKAGE_REGISTRATION_STATE expectedInstallRegistrationState;// only valid after Plan.
312 BURN_PACKAGE_REGISTRATION_STATE transactionRegistrationState; // only valid during Apply inside an MSI transaction.
313
314 BURN_PAYLOAD_GROUP payloads;
315
316 BURN_DEPENDENCY_PROVIDER* rgDependencyProviders;
317 DWORD cDependencyProviders;
318
319 BURN_COMPATIBLE_PACKAGE compatiblePackage;
320
321 BURN_PACKAGE_TYPE type;
322 union
323 {
324 struct
325 {
326 LPWSTR sczBundleId;
327 LPWSTR sczArpKeyPath;
328 VERUTIL_VERSION* pVersion;
329 LPWSTR sczRegistrationKey;
330 LPWSTR sczInstallArguments;
331 LPWSTR sczRepairArguments;
332 LPWSTR sczUninstallArguments;
333
334 LPWSTR* rgsczDetectCodes;
335 DWORD cDetectCodes;
336
337 LPWSTR* rgsczUpgradeCodes;
338 DWORD cUpgradeCodes;
339
340 LPWSTR* rgsczAddonCodes;
341 DWORD cAddonCodes;
342
343 LPWSTR* rgsczPatchCodes;
344 DWORD cPatchCodes;
345
346 BOOL fHideARP;
347 BOOL fWin64;
348 BOOL fSupportsBurnProtocol;
349
350 BURN_EXE_EXIT_CODE* rgExitCodes;
351 DWORD cExitCodes;
352
353 BURN_EXE_COMMAND_LINE_ARGUMENT* rgCommandLineArguments;
354 DWORD cCommandLineArguments;
355
356 LPWSTR sczIgnoreDependencies;
357 LPCWSTR wzAncestors; // points directly into engine state.
358 LPCWSTR wzEngineWorkingDirectory; // points directly into engine state.
359 } Bundle;
360 struct
361 {
362 BURN_EXE_DETECTION_TYPE detectionType;
363
364 BOOL fArpWin64;
365 BOOL fArpUseUninstallString;
366 LPWSTR sczArpKeyPath;
367 VERUTIL_VERSION* pArpDisplayVersion;
368
369 LPWSTR sczDetectCondition;
370 LPWSTR sczInstallArguments;
371 LPWSTR sczRepairArguments;
372 LPWSTR sczUninstallArguments;
373 LPCWSTR wzAncestors; // points directly into engine state.
374 LPCWSTR wzEngineWorkingDirectory; // points directly into engine state.
375
376 BOOL fBundle;
377 BOOL fPseudoPackage;
378 BOOL fFireAndForget;
379 BOOL fRepairable;
380 BOOL fUninstallable;
381 BURN_EXE_PROTOCOL_TYPE protocol;
382
383 BURN_EXE_EXIT_CODE* rgExitCodes;
384 DWORD cExitCodes;
385
386 BURN_EXE_COMMAND_LINE_ARGUMENT* rgCommandLineArguments;
387 DWORD cCommandLineArguments;
388 } Exe;
389 struct
390 {
391 LPWSTR sczProductCode;
392 DWORD dwLanguage;
393 VERUTIL_VERSION* pVersion;
394 LPWSTR sczUpgradeCode;
395
396 BOOTSTRAPPER_RELATED_OPERATION operation;
397
398 BURN_MSIPROPERTY* rgProperties;
399 DWORD cProperties;
400
401 BURN_MSIFEATURE* rgFeatures;
402 DWORD cFeatures;
403
404 BURN_RELATED_MSI* rgRelatedMsis;
405 DWORD cRelatedMsis;
406
407 BURN_SLIPSTREAM_MSP* rgSlipstreamMsps;
408 LPWSTR* rgsczSlipstreamMspPackageIds;
409 DWORD cSlipstreamMspPackages;
410
411 BURN_CHAINED_PATCH* rgChainedPatches;
412 DWORD cChainedPatches;
413 } Msi;
414 struct
415 {
416 LPWSTR sczPatchCode;
417 LPWSTR sczApplicabilityXml;
418
419 BURN_MSIPROPERTY* rgProperties;
420 DWORD cProperties;
421
422 BURN_MSPTARGETPRODUCT* rgTargetProducts;
423 DWORD cTargetProductCodes;
424 } Msp;
425 struct
426 {
427 LPWSTR sczDetectCondition;
428 } Msu;
429 };
430 } BURN_PACKAGE;
431
432 typedef struct _BURN_PACKAGES
433 {
434 BURN_ROLLBACK_BOUNDARY* rgRollbackBoundaries;
435 DWORD cRollbackBoundaries;
436
437 BURN_PACKAGE* rgPackages;
438 DWORD cPackages;
439
440 BURN_PATCH_TARGETCODE* rgPatchTargetCodes;
441 DWORD cPatchTargetCodes;
442
443 MSIPATCHSEQUENCEINFOW* rgPatchInfo;
444 BURN_PACKAGE** rgPatchInfoToPackage; // direct lookup from patch information to the (MSP) package it describes.
445 // Thus this array is the exact same size as rgPatchInfo.
446 DWORD cPatchInfo;
447 } BURN_PACKAGES;
448
449
450 // function declarations
451
452 HRESULT PackagesParseFromXml(
453 __in BURN_PACKAGES* pPackages,
454 __in BURN_PAYLOADS* pPayloads,
455 __in IXMLDOMNode* pixnBundle
456 );
457 void PackageUninitialize(
458 __in BURN_PACKAGE* pPackage
459 );
460 void PackageUninitializeCompatible(
461 __in BURN_COMPATIBLE_PACKAGE* pCompatiblePackage
462 );
463 void PackagesUninitialize(
464 __in BURN_PACKAGES* pPackages
465 );
466 HRESULT PackageFindById(
467 __in BURN_PACKAGES* pPackages,
468 __in_z LPCWSTR wzId,
469 __out BURN_PACKAGE** ppPackage
470 );
471 HRESULT PackageFindRelatedById(
472 __in BURN_RELATED_BUNDLES* pRelatedBundles,
473 __in_z LPCWSTR wzId,
474 __out BURN_PACKAGE** ppPackage
475 );
476 HRESULT PackageGetProperty(
477 __in const BURN_PACKAGE* pPackage,
478 __in_z LPCWSTR wzProperty,
479 __out_z_opt LPWSTR* psczValue
480 );
481 HRESULT PackageFindRollbackBoundaryById(
482 __in BURN_PACKAGES* pPackages,
483 __in_z LPCWSTR wzId,
484 __out BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary
485 );
486
487
488 #if defined(__cplusplus)
489 }
490 #endif