aboutsummaryrefslogtreecommitdiff
path: root/src/engine/package.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/engine/package.h336
1 files changed, 336 insertions, 0 deletions
diff --git a/src/engine/package.h b/src/engine/package.h
new file mode 100644
index 00000000..c295378e
--- /dev/null
+++ b/src/engine/package.h
@@ -0,0 +1,336 @@
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
17enum BURN_EXE_EXIT_CODE_TYPE
18{
19 BURN_EXE_EXIT_CODE_TYPE_NONE,
20 BURN_EXE_EXIT_CODE_TYPE_SUCCESS,
21 BURN_EXE_EXIT_CODE_TYPE_ERROR,
22 BURN_EXE_EXIT_CODE_TYPE_SCHEDULE_REBOOT,
23 BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT,
24};
25
26enum BURN_EXE_PROTOCOL_TYPE
27{
28 BURN_EXE_PROTOCOL_TYPE_NONE,
29 BURN_EXE_PROTOCOL_TYPE_BURN,
30 BURN_EXE_PROTOCOL_TYPE_NETFX4,
31};
32
33enum BURN_PACKAGE_TYPE
34{
35 BURN_PACKAGE_TYPE_NONE,
36 BURN_PACKAGE_TYPE_EXE,
37 BURN_PACKAGE_TYPE_MSI,
38 BURN_PACKAGE_TYPE_MSP,
39 BURN_PACKAGE_TYPE_MSU,
40};
41
42enum BURN_CACHE_STATE
43{
44 BURN_CACHE_STATE_NONE,
45 BURN_CACHE_STATE_PARTIAL,
46 BURN_CACHE_STATE_COMPLETE,
47};
48
49enum BURN_CACHE_TYPE
50{
51 BURN_CACHE_TYPE_NO,
52 BURN_CACHE_TYPE_YES,
53 BURN_CACHE_TYPE_ALWAYS,
54};
55
56enum BURN_DEPENDENCY_ACTION
57{
58 BURN_DEPENDENCY_ACTION_NONE,
59 BURN_DEPENDENCY_ACTION_REGISTER,
60 BURN_DEPENDENCY_ACTION_UNREGISTER,
61};
62
63enum BURN_PATCH_TARGETCODE_TYPE
64{
65 BURN_PATCH_TARGETCODE_TYPE_UNKNOWN,
66 BURN_PATCH_TARGETCODE_TYPE_PRODUCT,
67 BURN_PATCH_TARGETCODE_TYPE_UPGRADE,
68};
69
70// structs
71
72typedef struct _BURN_EXE_EXIT_CODE
73{
74 BURN_EXE_EXIT_CODE_TYPE type;
75 DWORD dwCode;
76 BOOL fWildcard;
77} BURN_EXE_EXIT_CODE;
78
79typedef struct _BURN_EXE_COMMAND_LINE_ARGUMENT
80{
81 LPWSTR sczInstallArgument;
82 LPWSTR sczUninstallArgument;
83 LPWSTR sczRepairArgument;
84 LPWSTR sczCondition;
85} BURN_EXE_COMMAND_LINE_ARGUMENT;
86
87typedef struct _BURN_MSPTARGETPRODUCT
88{
89 MSIINSTALLCONTEXT context;
90 DWORD dwOrder;
91 WCHAR wzTargetProductCode[39];
92 BURN_PACKAGE* pChainedTargetPackage;
93 BOOL fSlipstream;
94
95 BOOTSTRAPPER_PACKAGE_STATE patchPackageState; // only valid after Detect.
96 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
97 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
98} BURN_MSPTARGETPRODUCT;
99
100typedef struct _BURN_MSIPROPERTY
101{
102 LPWSTR sczId;
103 LPWSTR sczValue; // used during forward execution
104 LPWSTR sczRollbackValue; // used during rollback
105 LPWSTR sczCondition;
106} BURN_MSIPROPERTY;
107
108typedef struct _BURN_MSIFEATURE
109{
110 LPWSTR sczId;
111 LPWSTR sczAddLocalCondition;
112 LPWSTR sczAddSourceCondition;
113 LPWSTR sczAdvertiseCondition;
114 LPWSTR sczRollbackAddLocalCondition;
115 LPWSTR sczRollbackAddSourceCondition;
116 LPWSTR sczRollbackAdvertiseCondition;
117
118 BOOTSTRAPPER_FEATURE_STATE currentState; // only valid after Detect.
119 BOOTSTRAPPER_FEATURE_ACTION execute; // only valid during Plan.
120 BOOTSTRAPPER_FEATURE_ACTION rollback; // only valid during Plan.
121} BURN_MSIFEATURE;
122
123typedef struct _BURN_RELATED_MSI
124{
125 LPWSTR sczUpgradeCode;
126 DWORD64 qwMinVersion;
127 DWORD64 qwMaxVersion;
128 BOOL fMinProvided;
129 BOOL fMaxProvided;
130 BOOL fMinInclusive;
131 BOOL fMaxInclusive;
132 BOOL fOnlyDetect;
133 BOOL fLangInclusive;
134
135 DWORD* rgdwLanguages;
136 DWORD cLanguages;
137} BURN_RELATED_MSI;
138
139typedef struct _BURN_PACKAGE_PAYLOAD
140{
141 BURN_PAYLOAD* pPayload;
142 BOOL fCached;
143} BURN_PACKAGE_PAYLOAD;
144
145typedef struct _BURN_DEPENDENCY_PROVIDER
146{
147 LPWSTR sczKey;
148 LPWSTR sczVersion;
149 LPWSTR sczDisplayName;
150 BOOL fImported;
151} BURN_DEPENDENCY_PROVIDER;
152
153typedef struct _BURN_ROLLBACK_BOUNDARY
154{
155 LPWSTR sczId;
156 BOOL fVital;
157 BOOL fTransaction;
158} BURN_ROLLBACK_BOUNDARY;
159
160typedef struct _BURN_PATCH_TARGETCODE
161{
162 LPWSTR sczTargetCode;
163 BURN_PATCH_TARGETCODE_TYPE type;
164} BURN_PATCH_TARGETCODE;
165
166typedef struct _BURN_PACKAGE
167{
168 LPWSTR sczId;
169
170 LPWSTR sczLogPathVariable; // name of the variable that will be set to the log path.
171 LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path.
172
173 LPWSTR sczInstallCondition;
174 LPWSTR sczRollbackInstallCondition;
175 BOOL fPerMachine;
176 BOOL fUninstallable;
177 BOOL fVital;
178
179 BURN_CACHE_TYPE cacheType;
180 LPWSTR sczCacheId;
181
182 DWORD64 qwInstallSize;
183 DWORD64 qwSize;
184
185 BURN_ROLLBACK_BOUNDARY* pRollbackBoundaryForward; // used during install and repair.
186 BURN_ROLLBACK_BOUNDARY* pRollbackBoundaryBackward; // used during uninstall.
187
188 BOOTSTRAPPER_PACKAGE_STATE currentState; // only valid after Detect.
189 BURN_CACHE_STATE cache; // only valid after Detect.
190 BOOTSTRAPPER_PACKAGE_STATE expected; // only valid during Plan.
191 BOOTSTRAPPER_REQUEST_STATE defaultRequested;// only valid during Plan.
192 BOOTSTRAPPER_REQUEST_STATE requested; // only valid during Plan.
193 BOOL fAcquire; // only valid during Plan.
194 BOOL fUncache; // only valid during Plan.
195 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
196 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
197 BURN_DEPENDENCY_ACTION providerExecute; // only valid during Plan.
198 BURN_DEPENDENCY_ACTION providerRollback; // only valid during Plan.
199 BURN_DEPENDENCY_ACTION dependencyExecute; // only valid during Plan.
200 BURN_DEPENDENCY_ACTION dependencyRollback; // only valid during Plan.
201 BOOL fDependencyManagerWasHere; // only valid during Plan.
202 HRESULT hrCacheResult; // only valid during Apply.
203
204 BURN_PACKAGE_PAYLOAD* rgPayloads;
205 DWORD cPayloads;
206
207 BURN_DEPENDENCY_PROVIDER* rgDependencyProviders;
208 DWORD cDependencyProviders;
209
210 BURN_PACKAGE_TYPE type;
211 union
212 {
213 struct
214 {
215 LPWSTR sczDetectCondition;
216 LPWSTR sczInstallArguments;
217 LPWSTR sczRepairArguments;
218 LPWSTR sczUninstallArguments;
219 LPWSTR sczIgnoreDependencies;
220 LPWSTR sczAncestors;
221
222 BOOL fPseudoBundle;
223
224 BOOL fRepairable;
225 BURN_EXE_PROTOCOL_TYPE protocol;
226
227 BOOL fSupportsAncestors;
228
229 BURN_EXE_EXIT_CODE* rgExitCodes;
230 DWORD cExitCodes;
231
232 BURN_EXE_COMMAND_LINE_ARGUMENT* rgCommandLineArguments;
233 DWORD cCommandLineArguments;
234 } Exe;
235 struct
236 {
237 LPWSTR sczProductCode;
238 DWORD dwLanguage;
239 DWORD64 qwVersion;
240 LPWSTR sczInstalledProductCode;
241 DWORD64 qwInstalledVersion;
242 BOOL fDisplayInternalUI;
243 LPWSTR sczUpgradeCode;
244
245 BURN_MSIPROPERTY* rgProperties;
246 DWORD cProperties;
247
248 BURN_MSIFEATURE* rgFeatures;
249 DWORD cFeatures;
250
251 BURN_RELATED_MSI* rgRelatedMsis;
252 DWORD cRelatedMsis;
253
254 _BURN_PACKAGE** rgpSlipstreamMspPackages;
255 LPWSTR* rgsczSlipstreamMspPackageIds;
256 DWORD cSlipstreamMspPackages;
257
258 BOOL fCompatibleInstalled;
259 } Msi;
260 struct
261 {
262 LPWSTR sczPatchCode;
263 LPWSTR sczApplicabilityXml;
264 BOOL fDisplayInternalUI;
265
266 BURN_MSIPROPERTY* rgProperties;
267 DWORD cProperties;
268
269 BURN_MSPTARGETPRODUCT* rgTargetProducts;
270 DWORD cTargetProductCodes;
271 } Msp;
272 struct
273 {
274 LPWSTR sczDetectCondition;
275 LPWSTR sczKB;
276 } Msu;
277 };
278} BURN_PACKAGE;
279
280typedef struct _BURN_PACKAGES
281{
282 BURN_ROLLBACK_BOUNDARY* rgRollbackBoundaries;
283 DWORD cRollbackBoundaries;
284
285 BURN_PACKAGE* rgPackages;
286 DWORD cPackages;
287
288 BURN_PACKAGE* rgCompatiblePackages;
289 DWORD cCompatiblePackages;
290
291 BURN_PATCH_TARGETCODE* rgPatchTargetCodes;
292 DWORD cPatchTargetCodes;
293
294 MSIPATCHSEQUENCEINFOW* rgPatchInfo;
295 BURN_PACKAGE** rgPatchInfoToPackage; // direct lookup from patch information to the (MSP) package it describes.
296 // Thus this array is the exact same size as rgPatchInfo.
297 DWORD cPatchInfo;
298} BURN_PACKAGES;
299
300
301// function declarations
302
303HRESULT PackagesParseFromXml(
304 __in BURN_PACKAGES* pPackages,
305 __in BURN_PAYLOADS* pPayloads,
306 __in IXMLDOMNode* pixnBundle
307 );
308void PackageUninitialize(
309 __in BURN_PACKAGE* pPackage
310 );
311void PackagesUninitialize(
312 __in BURN_PACKAGES* pPackages
313 );
314HRESULT PackageFindById(
315 __in BURN_PACKAGES* pPackages,
316 __in_z LPCWSTR wzId,
317 __out BURN_PACKAGE** ppPackage
318 );
319HRESULT PackageFindRelatedById(
320 __in BURN_RELATED_BUNDLES* pRelatedBundles,
321 __in_z LPCWSTR wzId,
322 __out BURN_PACKAGE** ppPackage
323 );
324HRESULT PackageGetProperty(
325 __in const BURN_PACKAGE* pPackage,
326 __in_z LPCWSTR wzProperty,
327 __out_z_opt LPWSTR* psczValue
328 );
329HRESULT PackageEnsureCompatiblePackagesArray(
330 __in BURN_PACKAGES* pPackages
331 );
332
333
334#if defined(__cplusplus)
335}
336#endif