diff options
Diffstat (limited to 'src/burn/engine/package.h')
-rw-r--r-- | src/burn/engine/package.h | 380 |
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) | ||
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_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 | |||
28 | enum 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 | |||
35 | enum 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 | |||
44 | enum BURN_DEPENDENCY_ACTION | ||
45 | { | ||
46 | BURN_DEPENDENCY_ACTION_NONE, | ||
47 | BURN_DEPENDENCY_ACTION_REGISTER, | ||
48 | BURN_DEPENDENCY_ACTION_UNREGISTER, | ||
49 | }; | ||
50 | |||
51 | enum 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 | |||
58 | enum 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 | |||
69 | enum 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 | |||
77 | enum 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 | |||
86 | typedef 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 | |||
93 | typedef 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 | |||
101 | typedef 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 | |||
123 | typedef 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 | |||
131 | typedef 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 | |||
149 | typedef 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 | |||
165 | typedef struct _BURN_CHAINED_PATCH | ||
166 | { | ||
167 | BURN_PACKAGE* pMspPackage; | ||
168 | DWORD dwMspTargetProductIndex; // index into the Msp.rgTargetProducts | ||
169 | } BURN_CHAINED_PATCH; | ||
170 | |||
171 | typedef 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 | |||
180 | typedef 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 | |||
191 | typedef 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 | |||
200 | typedef struct _BURN_PATCH_TARGETCODE | ||
201 | { | ||
202 | LPWSTR sczTargetCode; | ||
203 | BURN_PATCH_TARGETCODE_TYPE type; | ||
204 | } BURN_PATCH_TARGETCODE; | ||
205 | |||
206 | typedef 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 | |||
325 | typedef 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 | |||
345 | HRESULT PackagesParseFromXml( | ||
346 | __in BURN_PACKAGES* pPackages, | ||
347 | __in BURN_PAYLOADS* pPayloads, | ||
348 | __in IXMLDOMNode* pixnBundle | ||
349 | ); | ||
350 | void PackageUninitialize( | ||
351 | __in BURN_PACKAGE* pPackage | ||
352 | ); | ||
353 | void PackagesUninitialize( | ||
354 | __in BURN_PACKAGES* pPackages | ||
355 | ); | ||
356 | HRESULT PackageFindById( | ||
357 | __in BURN_PACKAGES* pPackages, | ||
358 | __in_z LPCWSTR wzId, | ||
359 | __out BURN_PACKAGE** ppPackage | ||
360 | ); | ||
361 | HRESULT PackageFindRelatedById( | ||
362 | __in BURN_RELATED_BUNDLES* pRelatedBundles, | ||
363 | __in_z LPCWSTR wzId, | ||
364 | __out BURN_PACKAGE** ppPackage | ||
365 | ); | ||
366 | HRESULT PackageGetProperty( | ||
367 | __in const BURN_PACKAGE* pPackage, | ||
368 | __in_z LPCWSTR wzProperty, | ||
369 | __out_z_opt LPWSTR* psczValue | ||
370 | ); | ||
371 | HRESULT 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 | ||