diff options
Diffstat (limited to 'src/be/utilsearch.cpp')
-rw-r--r-- | src/be/utilsearch.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
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( | |||
13 | IXMLDOMNode* pixnNode = NULL; | 13 | IXMLDOMNode* pixnNode = NULL; |
14 | DWORD cNodes = 0; | 14 | DWORD cNodes = 0; |
15 | BSTR bstrNodeName = NULL; | 15 | BSTR bstrNodeName = NULL; |
16 | LPWSTR scz = NULL; | ||
16 | 17 | ||
17 | // Select Util search nodes. | 18 | // Select Util search nodes. |
18 | hr = XmlSelectNodes(pixnBundleExtension, L"WixDetectSHA2Support", &pixnNodes); | 19 | hr = XmlSelectNodes(pixnBundleExtension, L"WixWindowsFeatureSearch", &pixnNodes); |
19 | ExitOnFailure(hr, "Failed to select Util search nodes."); | 20 | ExitOnFailure(hr, "Failed to select Util search nodes."); |
20 | 21 | ||
21 | // Get Util search node count. | 22 | // Get Util search node count. |
@@ -46,9 +47,23 @@ STDMETHODIMP UtilSearchParseFromXml( | |||
46 | ExitOnFailure(hr, "Failed to get @Id."); | 47 | ExitOnFailure(hr, "Failed to get @Id."); |
47 | 48 | ||
48 | // Read type specific attributes. | 49 | // Read type specific attributes. |
49 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"WixDetectSHA2Support", -1)) | 50 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"WixWindowsFeatureSearch", -1)) |
50 | { | 51 | { |
51 | pSearch->Type = UTIL_SEARCH_TYPE_DETECT_SHA2_SUPPORT; | 52 | pSearch->Type = UTIL_SEARCH_TYPE_WINDOWS_FEATURE_SEARCH; |
53 | |||
54 | // @Type | ||
55 | hr = XmlGetAttributeEx(pixnNode, L"Type", &scz); | ||
56 | ExitOnFailure(hr, "Failed to get @Type."); | ||
57 | |||
58 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"sha2CodeSigning", -1)) | ||
59 | { | ||
60 | pSearch->WindowsFeatureSearch.type = UTIL_WINDOWS_FEATURE_SEARCH_TYPE_SHA2_CODE_SIGNING; | ||
61 | } | ||
62 | else | ||
63 | { | ||
64 | hr = E_INVALIDARG; | ||
65 | ExitOnFailure(hr, "Invalid value for @Type: %ls", scz); | ||
66 | } | ||
52 | } | 67 | } |
53 | else | 68 | else |
54 | { | 69 | { |
@@ -62,6 +77,7 @@ STDMETHODIMP UtilSearchParseFromXml( | |||
62 | } | 77 | } |
63 | 78 | ||
64 | LExit: | 79 | LExit: |
80 | ReleaseStr(scz); | ||
65 | ReleaseBSTR(bstrNodeName); | 81 | ReleaseBSTR(bstrNodeName); |
66 | ReleaseObject(pixnNode); | 82 | ReleaseObject(pixnNode); |
67 | ReleaseObject(pixnNodes); | 83 | ReleaseObject(pixnNodes); |
@@ -100,8 +116,15 @@ STDMETHODIMP UtilSearchExecute( | |||
100 | 116 | ||
101 | switch (pSearch->Type) | 117 | switch (pSearch->Type) |
102 | { | 118 | { |
103 | case UTIL_SEARCH_TYPE_DETECT_SHA2_SUPPORT: | 119 | case UTIL_SEARCH_TYPE_WINDOWS_FEATURE_SEARCH: |
104 | hr = UtilPerformDetectSHA2Support(wzVariable, pSearch, pEngine); | 120 | switch (pSearch->WindowsFeatureSearch.type) |
121 | { | ||
122 | case UTIL_WINDOWS_FEATURE_SEARCH_TYPE_SHA2_CODE_SIGNING: | ||
123 | hr = UtilPerformDetectSHA2CodeSigning(wzVariable, pSearch, pEngine); | ||
124 | break; | ||
125 | default: | ||
126 | hr = E_UNEXPECTED; | ||
127 | } | ||
105 | break; | 128 | break; |
106 | default: | 129 | default: |
107 | hr = E_UNEXPECTED; | 130 | hr = E_UNEXPECTED; |