From 4c3640ad5ef05b5be44df2aee2a23baa40471422 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 13 Apr 2022 10:14:45 -0500 Subject: Write EngineVersion, ProtocolVersion, and Win64 to the Burn manifest. --- src/burn/engine/engine.vcxproj | 32 +++++++++++++++++++-------- src/burn/engine/manifest.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++ src/burn/engine/precomp.h | 1 + 3 files changed, 74 insertions(+), 9 deletions(-) (limited to 'src/burn/engine') diff --git a/src/burn/engine/engine.vcxproj b/src/burn/engine/engine.vcxproj index 5c4860f1..b5cfcb45 100644 --- a/src/burn/engine/engine.vcxproj +++ b/src/burn/engine/engine.vcxproj @@ -35,13 +35,14 @@ engine Unicode Native component of WixToolset.Burn + ClCompile - ..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(ProjectAdditionalIncludeDirectories) + ..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(BurnGeneratedHeaderDirectory);$(ProjectAdditionalIncludeDirectories) @@ -144,14 +145,15 @@ - - + + Compiling message file... mc.exe -h "$(IntDir)." -r "$(IntDir)." -A -c -z engine.messages "$(InputDir)engine.mc" rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc" + $(InputDir)engine.mc $(IntDir)engine.messages.h;$(IntDir)engine.messages.rc - - + + @@ -160,14 +162,26 @@ rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc" $(GitBaseVersionPatch) $(GitCommits) $(rmj).$(rmm).$(rup).$(rpr) - rmj=$(rmj);rmm=$(rmm);rup=$(rup);rpr=$(rpr);szVerMajorMinorBuild="$(szVerMajorMinorBuild)" - - $(wixver);%(PreprocessorDefinitions) - + + + diff --git a/src/burn/engine/manifest.cpp b/src/burn/engine/manifest.cpp index 7e16de13..0cd10dbb 100644 --- a/src/burn/engine/manifest.cpp +++ b/src/burn/engine/manifest.cpp @@ -7,6 +7,11 @@ static HRESULT ParseFromXml( __in IXMLDOMDocument* pixdDocument, __in BURN_ENGINE_STATE* pEngineState ); +#if DEBUG +static void ValidateHarvestingAttributes( + __in IXMLDOMDocument* pixdDocument + ); +#endif // function definitions @@ -43,6 +48,10 @@ extern "C" HRESULT ManifestLoadXmlFromBuffer( hr = XmlLoadDocumentFromBuffer(pbBuffer, cbBuffer, &pixdDocument); ExitOnFailure(hr, "Failed to load manifest as XML document."); +#if DEBUG + ValidateHarvestingAttributes(pixdDocument); +#endif + hr = ParseFromXml(pixdDocument, pEngineState); LExit: @@ -162,3 +171,44 @@ LExit: ReleaseObject(pixeBundle); return hr; } + +#if DEBUG +static void ValidateHarvestingAttributes( + __in IXMLDOMDocument* pixdDocument + ) +{ + HRESULT hr = S_OK; + IXMLDOMElement* pixeBundle = NULL; + LPWSTR sczEngineVersion = NULL; + DWORD dwProtocolVersion = 0; + BOOL fWin64 = FALSE; + + hr = pixdDocument->get_documentElement(&pixeBundle); + ExitOnFailure(hr, "Failed to get document element."); + + hr = XmlGetAttributeEx(pixeBundle, L"EngineVersion", &sczEngineVersion); + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@EngineVersion attribute."); + + hr = XmlGetAttributeUInt32(pixeBundle, L"ProtocolVersion", &dwProtocolVersion); + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@ProtocolVersion attribute."); + + hr = XmlGetYesNoAttribute(pixeBundle, L"Win64", &fWin64); + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@Win64 attribute."); + + Assert(CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, sczEngineVersion, -1, wzVerMajorMinorBuild, -1)); + + Assert(BURN_PROTOCOL_VERSION == dwProtocolVersion); + +#if !defined(_WIN64) + Assert(!fWin64); +#else + Assert(fWin64); +#endif + +LExit: + AssertSz(SUCCEEDED(hr), "Failed to get harvesting attributes."); + + ReleaseStr(sczEngineVersion); + ReleaseObject(pixeBundle); +} +#endif diff --git a/src/burn/engine/precomp.h b/src/burn/engine/precomp.h index c83c1e74..19a6d48b 100644 --- a/src/burn/engine/precomp.h +++ b/src/burn/engine/precomp.h @@ -103,4 +103,5 @@ #include "EngineForApplication.h" #include "EngineForExtension.h" #include "engine.messages.h" +#include "engine.version.h" #include "engine.h" -- cgit v1.2.3-55-g6feb