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 | ||
