From f866ab77f8fd0790f4d6628f54dcdf0bd66fccb6 Mon Sep 17 00:00:00 2001 From: Sean Hall <r.sean.hall@gmail.com> Date: Fri, 10 Jul 2020 21:25:44 +1000 Subject: Change the DetectSHA2Support element to WindowsFeatureSearch. This will make it easier to add support for other Windows features in the future. --- src/be/detectsha2support.cpp | 8 ++++---- src/be/detectsha2support.h | 2 +- src/be/utilsearch.cpp | 33 ++++++++++++++++++++++++++++----- src/be/utilsearch.h | 15 ++++++++++++++- 4 files changed, 47 insertions(+), 11 deletions(-) (limited to 'src/be') diff --git a/src/be/detectsha2support.cpp b/src/be/detectsha2support.cpp index f1f3637e..90e349cd 100644 --- a/src/be/detectsha2support.cpp +++ b/src/be/detectsha2support.cpp @@ -3,7 +3,7 @@ #include "precomp.h" // https://gist.github.com/navossoc/7572c7d82243e9f818989e2765e7793a -HRESULT DetectSHA2Support( +HRESULT DetectSHA2CodeSigning( __out BOOL* pfSupported ) { @@ -38,7 +38,7 @@ LExit: return hr; } -HRESULT UtilPerformDetectSHA2Support( +HRESULT UtilPerformDetectSHA2CodeSigning( __in LPCWSTR wzVariable, __in UTIL_SEARCH* /*pSearch*/, __in IBundleExtensionEngine* pEngine @@ -47,8 +47,8 @@ HRESULT UtilPerformDetectSHA2Support( HRESULT hr = S_OK; BOOL fSupported = FALSE; - hr = DetectSHA2Support(&fSupported); - ExitOnFailure(hr, "DetectSHA2Support failed."); + hr = DetectSHA2CodeSigning(&fSupported); + ExitOnFailure(hr, "DetectSHA2CodeSigning failed."); hr = pEngine->SetVariableNumeric(wzVariable, fSupported ? 1 : 0); ExitOnFailure(hr, "Failed to set variable '%ls'", wzVariable); diff --git a/src/be/detectsha2support.h b/src/be/detectsha2support.h index 7f1f6031..c38a3d59 100644 --- a/src/be/detectsha2support.h +++ b/src/be/detectsha2support.h @@ -1,7 +1,7 @@ #pragma once // 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. -HRESULT UtilPerformDetectSHA2Support( +HRESULT UtilPerformDetectSHA2CodeSigning( __in LPCWSTR wzVariable, __in UTIL_SEARCH* pSearch, __in IBundleExtensionEngine* pEngine diff --git a/src/be/utilsearch.cpp b/src/be/utilsearch.cpp index 4e9d86a1..7cd2ea09 100644 --- a/src/be/utilsearch.cpp +++ b/src/be/utilsearch.cpp @@ -13,9 +13,10 @@ STDMETHODIMP UtilSearchParseFromXml( IXMLDOMNode* pixnNode = NULL; DWORD cNodes = 0; BSTR bstrNodeName = NULL; + LPWSTR scz = NULL; // Select Util search nodes. - hr = XmlSelectNodes(pixnBundleExtension, L"WixDetectSHA2Support", &pixnNodes); + hr = XmlSelectNodes(pixnBundleExtension, L"WixWindowsFeatureSearch", &pixnNodes); ExitOnFailure(hr, "Failed to select Util search nodes."); // Get Util search node count. @@ -46,9 +47,23 @@ STDMETHODIMP UtilSearchParseFromXml( ExitOnFailure(hr, "Failed to get @Id."); // Read type specific attributes. - if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"WixDetectSHA2Support", -1)) + if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"WixWindowsFeatureSearch", -1)) { - pSearch->Type = UTIL_SEARCH_TYPE_DETECT_SHA2_SUPPORT; + pSearch->Type = UTIL_SEARCH_TYPE_WINDOWS_FEATURE_SEARCH; + + // @Type + hr = XmlGetAttributeEx(pixnNode, L"Type", &scz); + ExitOnFailure(hr, "Failed to get @Type."); + + if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"sha2CodeSigning", -1)) + { + pSearch->WindowsFeatureSearch.type = UTIL_WINDOWS_FEATURE_SEARCH_TYPE_SHA2_CODE_SIGNING; + } + else + { + hr = E_INVALIDARG; + ExitOnFailure(hr, "Invalid value for @Type: %ls", scz); + } } else { @@ -62,6 +77,7 @@ STDMETHODIMP UtilSearchParseFromXml( } LExit: + ReleaseStr(scz); ReleaseBSTR(bstrNodeName); ReleaseObject(pixnNode); ReleaseObject(pixnNodes); @@ -100,8 +116,15 @@ STDMETHODIMP UtilSearchExecute( switch (pSearch->Type) { - case UTIL_SEARCH_TYPE_DETECT_SHA2_SUPPORT: - hr = UtilPerformDetectSHA2Support(wzVariable, pSearch, pEngine); + case UTIL_SEARCH_TYPE_WINDOWS_FEATURE_SEARCH: + switch (pSearch->WindowsFeatureSearch.type) + { + case UTIL_WINDOWS_FEATURE_SEARCH_TYPE_SHA2_CODE_SIGNING: + hr = UtilPerformDetectSHA2CodeSigning(wzVariable, pSearch, pEngine); + break; + default: + hr = E_UNEXPECTED; + } break; default: hr = E_UNEXPECTED; diff --git a/src/be/utilsearch.h b/src/be/utilsearch.h index 1e0ca96d..deeab1f7 100644 --- a/src/be/utilsearch.h +++ b/src/be/utilsearch.h @@ -7,7 +7,13 @@ enum UTIL_SEARCH_TYPE { UTIL_SEARCH_TYPE_NONE, - UTIL_SEARCH_TYPE_DETECT_SHA2_SUPPORT, + UTIL_SEARCH_TYPE_WINDOWS_FEATURE_SEARCH, +}; + +enum UTIL_WINDOWS_FEATURE_SEARCH_TYPE +{ + UTIL_WINDOWS_FEATURE_SEARCH_TYPE_NONE, + UTIL_WINDOWS_FEATURE_SEARCH_TYPE_SHA2_CODE_SIGNING, }; @@ -18,6 +24,13 @@ typedef struct _UTIL_SEARCH LPWSTR sczId; UTIL_SEARCH_TYPE Type; + union + { + struct + { + UTIL_WINDOWS_FEATURE_SEARCH_TYPE type; + } WindowsFeatureSearch; + }; } UTIL_SEARCH; typedef struct _UTIL_SEARCHES -- cgit v1.2.3-55-g6feb