aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/package.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/package.h')
-rw-r--r--src/burn/engine/package.h380
1 files changed, 380 insertions, 0 deletions
diff --git a/src/burn/engine/package.h b/src/burn/engine/package.h
new file mode 100644
index 00000000..89a3d6e9
--- /dev/null
+++ b/src/burn/engine/package.h
@@ -0,0 +1,380 @@
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
9struct _BURN_RELATED_BUNDLES;
10typedef _BURN_RELATED_BUNDLES BURN_RELATED_BUNDLES;
11
12struct _BURN_PACKAGE;
13typedef _BURN_PACKAGE BURN_PACKAGE;
14
15// constants
16
17const DWORD BURN_PACKAGE_INVALID_PATCH_INDEX = 0x80000000;
18
19enum BURN_EXE_EXIT_CODE_TYPE
20{
21 BURN_EXE_EXIT_CODE_TYPE_NONE,
22 BURN_EXE_EXIT_CODE_TYPE_SUCCESS,
23 BURN_EXE_EXIT_CODE_TYPE_ERROR,
24 BURN_EXE_EXIT_CODE_TYPE_SCHEDULE_REBOOT,
25 BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT,
26};
27
28enum BURN_EXE_PROTOCOL_TYPE
29{
30 BURN_EXE_PROTOCOL_TYPE_NONE,
31 BURN_EXE_PROTOCOL_TYPE_BURN,
32 BURN_EXE_PROTOCOL_TYPE_NETFX4,
33};
34
35enum BURN_PACKAGE_TYPE
36{
37 BURN_PACKAGE_TYPE_NONE,
38 BURN_PACKAGE_TYPE_EXE,
39 BURN_PACKAGE_TYPE_MSI,
40 BURN_PACKAGE_TYPE_MSP,
41 BURN_PACKAGE_TYPE_MSU,
42};
43
44enum BURN_DEPENDENCY_ACTION
45{
46 BURN_DEPENDENCY_ACTION_NONE,
47 BURN_DEPENDENCY_ACTION_REGISTER,
48 BURN_DEPENDENCY_ACTION_UNREGISTER,
49};
50
51enum BURN_PATCH_TARGETCODE_TYPE
52{
53 BURN_PATCH_TARGETCODE_TYPE_UNKNOWN,
54 BURN_PATCH_TARGETCODE_TYPE_PRODUCT,
55 BURN_PATCH_TARGETCODE_TYPE_UPGRADE,
56};
57
58enum BOOTSTRAPPER_FEATURE_ACTION
59{
60 BOOTSTRAPPER_FEATURE_ACTION_NONE,
61 BOOTSTRAPPER_FEATURE_ACTION_ADDLOCAL,
62 BOOTSTRAPPER_FEATURE_ACTION_ADDSOURCE,
63 BOOTSTRAPPER_FEATURE_ACTION_ADDDEFAULT,
64 BOOTSTRAPPER_FEATURE_ACTION_REINSTALL,
65 BOOTSTRAPPER_FEATURE_ACTION_ADVERTISE,
66 BOOTSTRAPPER_FEATURE_ACTION_REMOVE,
67};
68
69enum BURN_PACKAGE_REGISTRATION_STATE
70{
71 BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN,
72 BURN_PACKAGE_REGISTRATION_STATE_ABSENT,
73 BURN_PACKAGE_REGISTRATION_STATE_IGNORED,
74 BURN_PACKAGE_REGISTRATION_STATE_PRESENT,
75};
76
77enum BURN_PATCH_SKIP_STATE
78{
79 BURN_PATCH_SKIP_STATE_NONE,
80 BURN_PATCH_SKIP_STATE_TARGET_UNINSTALL,
81 BURN_PATCH_SKIP_STATE_SLIPSTREAM,
82};
83
84// structs
85
86typedef struct _BURN_EXE_EXIT_CODE
87{
88 BURN_EXE_EXIT_CODE_TYPE type;
89 DWORD dwCode;
90 BOOL fWildcard;
91} BURN_EXE_EXIT_CODE;
92
93typedef struct _BURN_EXE_COMMAND_LINE_ARGUMENT
94{
95 LPWSTR sczInstallArgument;
96 LPWSTR sczUninstallArgument;
97 LPWSTR sczRepairArgument;
98 LPWSTR sczCondition;
99} BURN_EXE_COMMAND_LINE_ARGUMENT;
100
101typedef struct _BURN_MSPTARGETPRODUCT
102{
103 MSIINSTALLCONTEXT context;
104 DWORD dwOrder;
105 WCHAR wzTargetProductCode[39];
106 BURN_PACKAGE* pChainedTargetPackage;
107 BOOL fInstalled;
108 BOOL fSlipstream;
109 BOOL fSlipstreamRequired; // this means the target product is not present on the machine, but is available in the chain as a slipstream target.
110
111 BOOTSTRAPPER_PACKAGE_STATE patchPackageState; // only valid after Detect.
112 BOOTSTRAPPER_REQUEST_STATE defaultRequested; // only valid during Plan.
113 BOOTSTRAPPER_REQUEST_STATE requested; // only valid during Plan.
114 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
115 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
116 BURN_PATCH_SKIP_STATE executeSkip; // only valid during Plan.
117 BURN_PATCH_SKIP_STATE rollbackSkip; // only valid during Plan.
118
119 BURN_PACKAGE_REGISTRATION_STATE registrationState; // initialized during Detect, updated during Apply.
120 BURN_PACKAGE_REGISTRATION_STATE transactionRegistrationState;// only valid during Apply inside an MSI transaction.
121} BURN_MSPTARGETPRODUCT;
122
123typedef struct _BURN_MSIPROPERTY
124{
125 LPWSTR sczId;
126 LPWSTR sczValue; // used during forward execution
127 LPWSTR sczRollbackValue; // used during rollback
128 LPWSTR sczCondition;
129} BURN_MSIPROPERTY;
130
131typedef struct _BURN_MSIFEATURE
132{
133 LPWSTR sczId;
134 LPWSTR sczAddLocalCondition;
135 LPWSTR sczAddSourceCondition;
136 LPWSTR sczAdvertiseCondition;
137 LPWSTR sczRollbackAddLocalCondition;
138 LPWSTR sczRollbackAddSourceCondition;
139 LPWSTR sczRollbackAdvertiseCondition;
140
141 BOOTSTRAPPER_FEATURE_STATE currentState; // only valid after Detect.
142 BOOTSTRAPPER_FEATURE_STATE expectedState; // only valid during Plan.
143 BOOTSTRAPPER_FEATURE_STATE defaultRequested; // only valid during Plan.
144 BOOTSTRAPPER_FEATURE_STATE requested; // only valid during Plan.
145 BOOTSTRAPPER_FEATURE_ACTION execute; // only valid during Plan.
146 BOOTSTRAPPER_FEATURE_ACTION rollback; // only valid during Plan.
147} BURN_MSIFEATURE;
148
149typedef struct _BURN_RELATED_MSI
150{
151 LPWSTR sczUpgradeCode;
152 VERUTIL_VERSION* pMinVersion;
153 VERUTIL_VERSION* pMaxVersion;
154 BOOL fMinProvided;
155 BOOL fMaxProvided;
156 BOOL fMinInclusive;
157 BOOL fMaxInclusive;
158 BOOL fOnlyDetect;
159 BOOL fLangInclusive;
160
161 DWORD* rgdwLanguages;
162 DWORD cLanguages;
163} BURN_RELATED_MSI;
164
165typedef struct _BURN_CHAINED_PATCH
166{
167 BURN_PACKAGE* pMspPackage;
168 DWORD dwMspTargetProductIndex; // index into the Msp.rgTargetProducts
169} BURN_CHAINED_PATCH;
170
171typedef struct _BURN_SLIPSTREAM_MSP
172{
173 BURN_PACKAGE* pMspPackage;
174 DWORD dwMsiChainedPatchIndex; // index into the Msi.rgChainedPatches
175
176 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
177 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
178} BURN_SLIPSTREAM_MSP;
179
180typedef struct _BURN_DEPENDENCY_PROVIDER
181{
182 LPWSTR sczKey;
183 LPWSTR sczVersion;
184 LPWSTR sczDisplayName;
185 BOOL fImported;
186
187 DEPENDENCY* rgDependents; // only valid after Detect.
188 UINT cDependents; // only valid after Detect.
189} BURN_DEPENDENCY_PROVIDER;
190
191typedef struct _BURN_ROLLBACK_BOUNDARY
192{
193 LPWSTR sczId;
194 BOOL fVital;
195 BOOL fTransaction;
196 BOOL fActiveTransaction; // only valid during Apply.
197 LPWSTR sczLogPath;
198} BURN_ROLLBACK_BOUNDARY;
199
200typedef struct _BURN_PATCH_TARGETCODE
201{
202 LPWSTR sczTargetCode;
203 BURN_PATCH_TARGETCODE_TYPE type;
204} BURN_PATCH_TARGETCODE;
205
206typedef struct _BURN_PACKAGE
207{
208 LPWSTR sczId;
209
210 LPWSTR sczLogPathVariable; // name of the variable that will be set to the log path.
211 LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path.
212
213 LPWSTR sczInstallCondition;
214 BOOL fPerMachine;
215 BOOL fUninstallable;
216 BOOL fVital;
217 BOOL fCanAffectRegistration;
218
219 BOOTSTRAPPER_CACHE_TYPE authoredCacheType;
220 LPWSTR sczCacheId;
221
222 DWORD64 qwInstallSize;
223 DWORD64 qwSize;
224
225 BURN_ROLLBACK_BOUNDARY* pRollbackBoundaryForward; // used during install and repair.
226 BURN_ROLLBACK_BOUNDARY* pRollbackBoundaryBackward; // used during uninstall.
227
228 BOOTSTRAPPER_PACKAGE_STATE currentState; // only valid after Detect.
229 BOOL fCached; // only valid after Detect.
230 BOOL fPackageProviderExists; // only valid after Detect.
231 BOOTSTRAPPER_CACHE_TYPE cacheType; // only valid during Plan.
232 BOOTSTRAPPER_REQUEST_STATE defaultRequested;// only valid during Plan.
233 BOOTSTRAPPER_REQUEST_STATE requested; // only valid during Plan.
234 BOOL fPlannedCache; // only valid during Plan.
235 BOOL fPlannedUncache; // only valid during Plan.
236 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
237 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
238 BURN_DEPENDENCY_ACTION providerExecute; // only valid during Plan.
239 BURN_DEPENDENCY_ACTION providerRollback; // only valid during Plan.
240 BURN_DEPENDENCY_ACTION dependencyExecute; // only valid during Plan.
241 BURN_DEPENDENCY_ACTION dependencyRollback; // only valid during Plan.
242 BOOL fDependencyManagerWasHere; // only valid during Plan.
243 LPWSTR sczCacheFolder; // only valid during Apply.
244 HRESULT hrCacheResult; // only valid during Apply.
245
246 BURN_PACKAGE_REGISTRATION_STATE cacheRegistrationState; // initialized during Detect, updated during Apply.
247 BURN_PACKAGE_REGISTRATION_STATE installRegistrationState; // initialized during Detect, updated during Apply.
248 BURN_PACKAGE_REGISTRATION_STATE expectedCacheRegistrationState; // only valid after Plan.
249 BURN_PACKAGE_REGISTRATION_STATE expectedInstallRegistrationState;// only valid after Plan.
250 BURN_PACKAGE_REGISTRATION_STATE transactionRegistrationState; // only valid during Apply inside an MSI transaction.
251
252 BURN_PAYLOAD_GROUP payloads;
253
254 BURN_DEPENDENCY_PROVIDER* rgDependencyProviders;
255 DWORD cDependencyProviders;
256
257 BURN_PACKAGE_TYPE type;
258 union
259 {
260 struct
261 {
262 LPWSTR sczDetectCondition;
263 LPWSTR sczInstallArguments;
264 LPWSTR sczRepairArguments;
265 LPWSTR sczUninstallArguments;
266 LPWSTR sczIgnoreDependencies;
267 LPCWSTR wzAncestors; // points directly into engine state.
268
269 BOOL fPseudoBundle;
270
271 BOOL fRepairable;
272 BURN_EXE_PROTOCOL_TYPE protocol;
273
274 BOOL fSupportsAncestors;
275
276 BURN_EXE_EXIT_CODE* rgExitCodes;
277 DWORD cExitCodes;
278
279 BURN_EXE_COMMAND_LINE_ARGUMENT* rgCommandLineArguments;
280 DWORD cCommandLineArguments;
281 } Exe;
282 struct
283 {
284 LPWSTR sczProductCode;
285 DWORD dwLanguage;
286 VERUTIL_VERSION* pVersion;
287 VERUTIL_VERSION* pInstalledVersion;
288 LPWSTR sczUpgradeCode;
289
290 BURN_MSIPROPERTY* rgProperties;
291 DWORD cProperties;
292
293 BURN_MSIFEATURE* rgFeatures;
294 DWORD cFeatures;
295
296 BURN_RELATED_MSI* rgRelatedMsis;
297 DWORD cRelatedMsis;
298
299 BURN_SLIPSTREAM_MSP* rgSlipstreamMsps;
300 LPWSTR* rgsczSlipstreamMspPackageIds;
301 DWORD cSlipstreamMspPackages;
302
303 BURN_CHAINED_PATCH* rgChainedPatches;
304 DWORD cChainedPatches;
305 } Msi;
306 struct
307 {
308 LPWSTR sczPatchCode;
309 LPWSTR sczApplicabilityXml;
310
311 BURN_MSIPROPERTY* rgProperties;
312 DWORD cProperties;
313
314 BURN_MSPTARGETPRODUCT* rgTargetProducts;
315 DWORD cTargetProductCodes;
316 } Msp;
317 struct
318 {
319 LPWSTR sczDetectCondition;
320 LPWSTR sczKB;
321 } Msu;
322 };
323} BURN_PACKAGE;
324
325typedef struct _BURN_PACKAGES
326{
327 BURN_ROLLBACK_BOUNDARY* rgRollbackBoundaries;
328 DWORD cRollbackBoundaries;
329
330 BURN_PACKAGE* rgPackages;
331 DWORD cPackages;
332
333 BURN_PATCH_TARGETCODE* rgPatchTargetCodes;
334 DWORD cPatchTargetCodes;
335
336 MSIPATCHSEQUENCEINFOW* rgPatchInfo;
337 BURN_PACKAGE** rgPatchInfoToPackage; // direct lookup from patch information to the (MSP) package it describes.
338 // Thus this array is the exact same size as rgPatchInfo.
339 DWORD cPatchInfo;
340} BURN_PACKAGES;
341
342
343// function declarations
344
345HRESULT PackagesParseFromXml(
346 __in BURN_PACKAGES* pPackages,
347 __in BURN_PAYLOADS* pPayloads,
348 __in IXMLDOMNode* pixnBundle
349 );
350void PackageUninitialize(
351 __in BURN_PACKAGE* pPackage
352 );
353void PackagesUninitialize(
354 __in BURN_PACKAGES* pPackages
355 );
356HRESULT PackageFindById(
357 __in BURN_PACKAGES* pPackages,
358 __in_z LPCWSTR wzId,
359 __out BURN_PACKAGE** ppPackage
360 );
361HRESULT PackageFindRelatedById(
362 __in BURN_RELATED_BUNDLES* pRelatedBundles,
363 __in_z LPCWSTR wzId,
364 __out BURN_PACKAGE** ppPackage
365 );
366HRESULT PackageGetProperty(
367 __in const BURN_PACKAGE* pPackage,
368 __in_z LPCWSTR wzProperty,
369 __out_z_opt LPWSTR* psczValue
370 );
371HRESULT PackageFindRollbackBoundaryById(
372 __in BURN_PACKAGES* pPackages,
373 __in_z LPCWSTR wzId,
374 __out BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary
375 );
376
377
378#if defined(__cplusplus)
379}
380#endif