aboutsummaryrefslogtreecommitdiff
path: root/src/engine/manifest.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2018-12-29 22:12:08 -0600
committerSean Hall <r.sean.hall@gmail.com>2018-12-29 22:12:08 -0600
commit61847dddd4fd497057c780658e383c4627de19ec (patch)
treef85a845182922538ab9aa6ee85b0db3ab40c1f6e /src/engine/manifest.cpp
parent8295f5f8fd28042e1a0a172d5afbba79178064c2 (diff)
downloadwix-61847dddd4fd497057c780658e383c4627de19ec.tar.gz
wix-61847dddd4fd497057c780658e383c4627de19ec.tar.bz2
wix-61847dddd4fd497057c780658e383c4627de19ec.zip
Import code from old v4 repo
Diffstat (limited to 'src/engine/manifest.cpp')
-rw-r--r--src/engine/manifest.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/engine/manifest.cpp b/src/engine/manifest.cpp
new file mode 100644
index 00000000..c2214a89
--- /dev/null
+++ b/src/engine/manifest.cpp
@@ -0,0 +1,125 @@
1// 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.
2
3#include "precomp.h"
4
5
6// function definitions
7
8extern "C" HRESULT ManifestLoadXmlFromBuffer(
9 __in_bcount(cbBuffer) BYTE* pbBuffer,
10 __in SIZE_T cbBuffer,
11 __in BURN_ENGINE_STATE* pEngineState
12 )
13{
14 HRESULT hr = S_OK;
15 IXMLDOMDocument* pixdDocument = NULL;
16 IXMLDOMElement* pixeBundle = NULL;
17 IXMLDOMNode* pixnLog = NULL;
18 IXMLDOMNode* pixnChain = NULL;
19
20 // load xml document
21 hr = XmlLoadDocumentFromBuffer(pbBuffer, cbBuffer, &pixdDocument);
22 ExitOnFailure(hr, "Failed to load manifest as XML document.");
23
24 // get bundle element
25 hr = pixdDocument->get_documentElement(&pixeBundle);
26 ExitOnFailure(hr, "Failed to get bundle element.");
27
28 // parse the log element, if present.
29 hr = XmlSelectSingleNode(pixeBundle, L"Log", &pixnLog);
30 ExitOnFailure(hr, "Failed to get Log element.");
31
32 if (S_OK == hr)
33 {
34 hr = XmlGetAttributeEx(pixnLog, L"PathVariable", &pEngineState->log.sczPathVariable);
35 if (E_NOTFOUND != hr)
36 {
37 ExitOnFailure(hr, "Failed to get Log/@PathVariable.");
38 }
39
40 hr = XmlGetAttributeEx(pixnLog, L"Prefix", &pEngineState->log.sczPrefix);
41 ExitOnFailure(hr, "Failed to get Log/@Prefix attribute.");
42
43 hr = XmlGetAttributeEx(pixnLog, L"Extension", &pEngineState->log.sczExtension);
44 ExitOnFailure(hr, "Failed to get Log/@Extension attribute.");
45 }
46
47 // get the chain element
48 hr = XmlSelectSingleNode(pixeBundle, L"Chain", &pixnChain);
49 ExitOnFailure(hr, "Failed to get chain element.");
50
51 if (S_OK == hr)
52 {
53 // parse disable rollback
54 hr = XmlGetYesNoAttribute(pixnChain, L"DisableRollback", &pEngineState->fDisableRollback);
55 if (E_NOTFOUND != hr)
56 {
57 ExitOnFailure(hr, "Failed to get Chain/@DisableRollback");
58 }
59
60 // parse disable system restore
61 hr = XmlGetYesNoAttribute(pixnChain, L"DisableSystemRestore", &pEngineState->fDisableSystemRestore);
62 if (E_NOTFOUND != hr)
63 {
64 ExitOnFailure(hr, "Failed to get Chain/@DisableSystemRestore");
65 }
66
67 // parse parallel cache
68 hr = XmlGetYesNoAttribute(pixnChain, L"ParallelCache", &pEngineState->fParallelCacheAndExecute);
69 if (E_NOTFOUND != hr)
70 {
71 ExitOnFailure(hr, "Failed to get Chain/@ParallelCache");
72 }
73 }
74
75 // parse built-in condition
76 hr = ConditionGlobalParseFromXml(&pEngineState->condition, pixeBundle);
77 ExitOnFailure(hr, "Failed to parse global condition.");
78
79 // parse variables
80 hr = VariablesParseFromXml(&pEngineState->variables, pixeBundle);
81 ExitOnFailure(hr, "Failed to parse variables.");
82
83 // parse searches
84 hr = SearchesParseFromXml(&pEngineState->searches, pixeBundle); // TODO: Modularization
85 ExitOnFailure(hr, "Failed to parse searches.");
86
87 // parse user experience
88 hr = UserExperienceParseFromXml(&pEngineState->userExperience, pixeBundle);
89 ExitOnFailure(hr, "Failed to parse user experience.");
90
91 // parse catalog files
92 hr = CatalogsParseFromXml(&pEngineState->catalogs, pixeBundle);
93 ExitOnFailure(hr, "Failed to parse catalog files.");
94
95 // parse registration
96 hr = RegistrationParseFromXml(&pEngineState->registration, pixeBundle);
97 ExitOnFailure(hr, "Failed to parse registration.");
98
99 // parse update
100 hr = UpdateParseFromXml(&pEngineState->update, pixeBundle);
101 ExitOnFailure(hr, "Failed to parse update.");
102
103 // parse containers
104 hr = ContainersParseFromXml(&pEngineState->section, &pEngineState->containers, pixeBundle);
105 ExitOnFailure(hr, "Failed to parse containers.");
106
107 // parse payloads
108 hr = PayloadsParseFromXml(&pEngineState->payloads, &pEngineState->containers, &pEngineState->catalogs, pixeBundle);
109 ExitOnFailure(hr, "Failed to parse payloads.");
110
111 // parse packages
112 hr = PackagesParseFromXml(&pEngineState->packages, &pEngineState->payloads, pixeBundle);
113 ExitOnFailure(hr, "Failed to parse packages.");
114
115 // parse approved exes for elevation
116 hr = ApprovedExesParseFromXml(&pEngineState->approvedExes, pixeBundle);
117 ExitOnFailure(hr, "Failed to parse approved exes.");
118
119LExit:
120 ReleaseObject(pixnChain);
121 ReleaseObject(pixnLog);
122 ReleaseObject(pixeBundle);
123 ReleaseObject(pixdDocument);
124 return hr;
125}