diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-08-08 18:02:15 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-08-09 09:57:02 -0500 |
commit | 240b663ad5fc94ed6d19c966b5c9105a176ecf40 (patch) | |
tree | d194e242ccb5bb69f0dbbc388ede87cef65c700f /src/burn | |
parent | 8e1cbe8d7b468553d76c20452561e89726de5c47 (diff) | |
download | wix-240b663ad5fc94ed6d19c966b5c9105a176ecf40.tar.gz wix-240b663ad5fc94ed6d19c966b5c9105a176ecf40.tar.bz2 wix-240b663ad5fc94ed6d19c966b5c9105a176ecf40.zip |
Skip logging errors in some places when they are due to missing files or registry keys or values.
Related to 6696
Diffstat (limited to 'src/burn')
-rw-r--r-- | src/burn/engine/apply.cpp | 16 | ||||
-rw-r--r-- | src/burn/engine/bundlepackageengine.cpp | 14 | ||||
-rw-r--r-- | src/burn/engine/cache.cpp | 3 | ||||
-rw-r--r-- | src/burn/engine/dependency.cpp | 44 | ||||
-rw-r--r-- | src/burn/engine/exeengine.cpp | 21 | ||||
-rw-r--r-- | src/burn/engine/registration.cpp | 32 | ||||
-rw-r--r-- | src/burn/engine/relatedbundle.cpp | 17 | ||||
-rw-r--r-- | src/burn/engine/search.cpp | 89 |
8 files changed, 100 insertions, 136 deletions
diff --git a/src/burn/engine/apply.cpp b/src/burn/engine/apply.cpp index 31d756a8..e67208b4 100644 --- a/src/burn/engine/apply.cpp +++ b/src/burn/engine/apply.cpp | |||
@@ -611,7 +611,7 @@ extern "C" HRESULT ApplyCache( | |||
611 | ExitOnFailure(hr, "Failed cache action: %ls", L"layout bundle"); | 611 | ExitOnFailure(hr, "Failed cache action: %ls", L"layout bundle"); |
612 | 612 | ||
613 | hr = ReportOverallProgressTicks(pUX, FALSE, pPlan->cOverallProgressTicksTotal, pContext); | 613 | hr = ReportOverallProgressTicks(pUX, FALSE, pPlan->cOverallProgressTicksTotal, pContext); |
614 | LogExitOnFailure(hr, MSG_USER_CANCELED, "Cancel during cache: %ls", L"layout bundle"); | 614 | LogExitOnRootFailure(hr, MSG_USER_CANCELED, "Cancel during cache: %ls", L"layout bundle"); |
615 | 615 | ||
616 | break; | 616 | break; |
617 | 617 | ||
@@ -637,7 +637,7 @@ extern "C" HRESULT ApplyCache( | |||
637 | ExitOnFailure(hr, "Failed cache action: %ls", L"cache package"); | 637 | ExitOnFailure(hr, "Failed cache action: %ls", L"cache package"); |
638 | 638 | ||
639 | hr = ReportOverallProgressTicks(pUX, FALSE, pPlan->cOverallProgressTicksTotal, pContext); | 639 | hr = ReportOverallProgressTicks(pUX, FALSE, pPlan->cOverallProgressTicksTotal, pContext); |
640 | LogExitOnFailure(hr, MSG_USER_CANCELED, "Cancel during cache: %ls", L"cache package"); | 640 | LogExitOnRootFailure(hr, MSG_USER_CANCELED, "Cancel during cache: %ls", L"cache package"); |
641 | 641 | ||
642 | break; | 642 | break; |
643 | 643 | ||
@@ -1038,7 +1038,7 @@ static HRESULT ApplyCachePackage( | |||
1038 | } | 1038 | } |
1039 | else if (fCanceledBegin) | 1039 | else if (fCanceledBegin) |
1040 | { | 1040 | { |
1041 | LogExitOnFailure(hr, MSG_USER_CANCELED, "Cancel during cache: %ls: %ls", L"begin cache package", pPackage->sczId); | 1041 | LogExitOnRootFailure(hr, MSG_USER_CANCELED, "Cancel during cache: %ls: %ls", L"begin cache package", pPackage->sczId); |
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | break; | 1044 | break; |
@@ -1796,8 +1796,7 @@ static HRESULT AcquireContainerOrPayload( | |||
1796 | 1796 | ||
1797 | break; | 1797 | break; |
1798 | default: | 1798 | default: |
1799 | hr = E_FILENOTFOUND; | 1799 | LogExitWithRootFailure(hr, E_FILENOTFOUND, MSG_RESOLVE_SOURCE_FAILED, "Failed to resolve source, payload: %ls, package: %ls, container: %ls", wzPayloadId, pPackage ? pPackage->sczId : NULL, pContainer ? pContainer->sczId : NULL); |
1800 | LogExitOnFailure(hr, MSG_RESOLVE_SOURCE_FAILED, "Failed to resolve source, payload: %ls, package: %ls, container: %ls", wzPayloadId, pPackage ? pPackage->sczId : NULL, pContainer ? pContainer->sczId : NULL); | ||
1801 | } | 1800 | } |
1802 | 1801 | ||
1803 | // Send 100% complete here. This is sometimes the only progress sent to the BA. | 1802 | // Send 100% complete here. This is sometimes the only progress sent to the BA. |
@@ -1965,17 +1964,12 @@ static HRESULT PreparePayloadDestinationPath( | |||
1965 | dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY; | 1964 | dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY; |
1966 | if (!::SetFileAttributes(wzDestinationPath, dwFileAttributes)) | 1965 | if (!::SetFileAttributes(wzDestinationPath, dwFileAttributes)) |
1967 | { | 1966 | { |
1968 | ExitWithLastError(hr, "Failed to clear readonly bit on payload destination path: %ls", wzDestinationPath); | 1967 | ExitWithPathLastError(hr, "Failed to clear readonly bit on payload destination path: %ls", wzDestinationPath); |
1969 | } | 1968 | } |
1970 | } | 1969 | } |
1971 | } | 1970 | } |
1972 | 1971 | ||
1973 | LExit: | 1972 | LExit: |
1974 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) | ||
1975 | { | ||
1976 | hr = S_OK; | ||
1977 | } | ||
1978 | |||
1979 | return hr; | 1973 | return hr; |
1980 | } | 1974 | } |
1981 | 1975 | ||
diff --git a/src/burn/engine/bundlepackageengine.cpp b/src/burn/engine/bundlepackageengine.cpp index dafe1967..8896fdd0 100644 --- a/src/burn/engine/bundlepackageengine.cpp +++ b/src/burn/engine/bundlepackageengine.cpp | |||
@@ -1049,6 +1049,7 @@ static HRESULT DetectArpEntry( | |||
1049 | { | 1049 | { |
1050 | HRESULT hr = S_OK; | 1050 | HRESULT hr = S_OK; |
1051 | HKEY hKey = NULL; | 1051 | HKEY hKey = NULL; |
1052 | BOOL fExists = FALSE; | ||
1052 | HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 1053 | HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
1053 | REG_KEY_BITNESS keyBitness = pPackage->Bundle.fWin64 ? REG_KEY_64BIT : REG_KEY_32BIT; | 1054 | REG_KEY_BITNESS keyBitness = pPackage->Bundle.fWin64 ? REG_KEY_64BIT : REG_KEY_32BIT; |
1054 | 1055 | ||
@@ -1065,20 +1066,17 @@ static HRESULT DetectArpEntry( | |||
1065 | } | 1066 | } |
1066 | 1067 | ||
1067 | hr = RegOpenEx(hkRoot, pPackage->Bundle.sczArpKeyPath, KEY_READ, keyBitness, &hKey); | 1068 | hr = RegOpenEx(hkRoot, pPackage->Bundle.sczArpKeyPath, KEY_READ, keyBitness, &hKey); |
1068 | if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr || HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) | 1069 | ExitOnPathFailure(hr, fExists, "Failed to open registry key: %ls.", pPackage->Bundle.sczArpKeyPath); |
1070 | |||
1071 | if (!fExists) | ||
1069 | { | 1072 | { |
1070 | ExitFunction1(hr = S_OK); | 1073 | ExitFunction(); |
1071 | } | 1074 | } |
1072 | ExitOnFailure(hr, "Failed to open registry key: %ls.", pPackage->Bundle.sczArpKeyPath); | ||
1073 | 1075 | ||
1074 | *pfRegistered = TRUE; | 1076 | *pfRegistered = TRUE; |
1075 | 1077 | ||
1076 | hr = RegReadString(hKey, L"QuietUninstallString", psczQuietUninstallString); | 1078 | hr = RegReadString(hKey, L"QuietUninstallString", psczQuietUninstallString); |
1077 | if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) | 1079 | ExitOnPathFailure(hr, fExists, "Failed to read QuietUninstallString."); |
1078 | { | ||
1079 | hr = S_OK; | ||
1080 | } | ||
1081 | ExitOnFailure(hr, "Failed to read QuietUninstallString."); | ||
1082 | 1080 | ||
1083 | LExit: | 1081 | LExit: |
1084 | ReleaseRegKey(hKey); | 1082 | ReleaseRegKey(hKey); |
diff --git a/src/burn/engine/cache.cpp b/src/burn/engine/cache.cpp index a23ce9ed..01237162 100644 --- a/src/burn/engine/cache.cpp +++ b/src/burn/engine/cache.cpp | |||
@@ -1144,8 +1144,7 @@ extern "C" HRESULT CacheCompletePayload( | |||
1144 | } | 1144 | } |
1145 | else // if the working path and unverified path do not exist, nothing we can do. | 1145 | else // if the working path and unverified path do not exist, nothing we can do. |
1146 | { | 1146 | { |
1147 | hr = E_FILENOTFOUND; | 1147 | ExitWithRootFailure(hr, E_FILENOTFOUND, "Failed to find payload: %ls in working path: %ls and unverified path: %ls", pPayload->sczKey, wzWorkingPayloadPath, sczUnverifiedPayloadPath); |
1148 | ExitOnFailure(hr, "Failed to find payload: %ls in working path: %ls and unverified path: %ls", pPayload->sczKey, wzWorkingPayloadPath, sczUnverifiedPayloadPath); | ||
1149 | } | 1148 | } |
1150 | 1149 | ||
1151 | hr = ResetPathPermissions(fPerMachine, sczUnverifiedPayloadPath); | 1150 | hr = ResetPathPermissions(fPerMachine, sczUnverifiedPayloadPath); |
diff --git a/src/burn/engine/dependency.cpp b/src/burn/engine/dependency.cpp index 221c7bbf..d6698680 100644 --- a/src/burn/engine/dependency.cpp +++ b/src/burn/engine/dependency.cpp | |||
@@ -279,19 +279,13 @@ extern "C" HRESULT DependencyDetectBundle( | |||
279 | ) | 279 | ) |
280 | { | 280 | { |
281 | HRESULT hr = S_OK; | 281 | HRESULT hr = S_OK; |
282 | BOOL fExists = FALSE; | ||
282 | 283 | ||
283 | hr = DependencyDetectProviderKeyBundleId(pRegistration); | 284 | hr = DependencyDetectProviderKeyBundleId(pRegistration); |
284 | ExitOnFailure(hr, "Failed to detect provider key bundle id."); | 285 | ExitOnFailure(hr, "Failed to detect provider key bundle id."); |
285 | 286 | ||
286 | hr = DepCheckDependents(pRegistration->hkRoot, pRegistration->sczProviderKey, 0, NULL, &pRegistration->rgDependents, &pRegistration->cDependents); | 287 | hr = DepCheckDependents(pRegistration->hkRoot, pRegistration->sczProviderKey, 0, NULL, &pRegistration->rgDependents, &pRegistration->cDependents); |
287 | if (E_FILENOTFOUND != hr) | 288 | ExitOnPathFailure(hr, fExists, "Failed dependents check on bundle."); |
288 | { | ||
289 | ExitOnFailure(hr, "Failed dependents check on bundle."); | ||
290 | } | ||
291 | else | ||
292 | { | ||
293 | hr = S_OK; | ||
294 | } | ||
295 | 289 | ||
296 | if (pDependencies->fSelfDependent || pDependencies->fActiveParent) | 290 | if (pDependencies->fSelfDependent || pDependencies->fActiveParent) |
297 | { | 291 | { |
@@ -813,6 +807,7 @@ extern "C" HRESULT DependencyProcessDependentRegistration( | |||
813 | ) | 807 | ) |
814 | { | 808 | { |
815 | HRESULT hr = S_OK; | 809 | HRESULT hr = S_OK; |
810 | BOOL fDeleted = FALSE; | ||
816 | 811 | ||
817 | switch (pAction->type) | 812 | switch (pAction->type) |
818 | { | 813 | { |
@@ -823,12 +818,11 @@ extern "C" HRESULT DependencyProcessDependentRegistration( | |||
823 | 818 | ||
824 | case BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_UNREGISTER: | 819 | case BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_UNREGISTER: |
825 | hr = DepUnregisterDependent(pRegistration->hkRoot, pRegistration->sczProviderKey, pAction->sczDependentProviderKey); | 820 | hr = DepUnregisterDependent(pRegistration->hkRoot, pRegistration->sczProviderKey, pAction->sczDependentProviderKey); |
826 | ExitOnFailure(hr, "Failed to unregister dependent: %ls", pAction->sczDependentProviderKey); | 821 | ExitOnPathFailure(hr, fDeleted, "Failed to unregister dependent: %ls", pAction->sczDependentProviderKey); |
827 | break; | 822 | break; |
828 | 823 | ||
829 | default: | 824 | default: |
830 | hr = E_INVALIDARG; | 825 | ExitWithRootFailure(hr, E_INVALIDARG, "Unrecognized registration action type: %d", pAction->type); |
831 | ExitOnRootFailure(hr, "Unrecognized registration action type: %d", pAction->type); | ||
832 | } | 826 | } |
833 | 827 | ||
834 | LExit: | 828 | LExit: |
@@ -848,11 +842,11 @@ extern "C" void DependencyUnregisterBundle( | |||
848 | { | 842 | { |
849 | // Remove the bundle provider key. | 843 | // Remove the bundle provider key. |
850 | hr = DepUnregisterDependency(pRegistration->hkRoot, pRegistration->sczProviderKey); | 844 | hr = DepUnregisterDependency(pRegistration->hkRoot, pRegistration->sczProviderKey); |
851 | if (SUCCEEDED(hr)) | 845 | if (SUCCEEDED(hr) || E_FILENOTFOUND == hr) |
852 | { | 846 | { |
853 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED, pRegistration->sczProviderKey); | 847 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED, pRegistration->sczProviderKey); |
854 | } | 848 | } |
855 | else if (FAILED(hr) && E_FILENOTFOUND != hr) | 849 | else |
856 | { | 850 | { |
857 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED_FAILED, pRegistration->sczProviderKey, hr); | 851 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED_FAILED, pRegistration->sczProviderKey, hr); |
858 | } | 852 | } |
@@ -961,13 +955,10 @@ static HRESULT DetectPackageDependents( | |||
961 | for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i) | 955 | for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i) |
962 | { | 956 | { |
963 | BURN_DEPENDENCY_PROVIDER* pProvider = &pPackage->rgDependencyProviders[i]; | 957 | BURN_DEPENDENCY_PROVIDER* pProvider = &pPackage->rgDependencyProviders[i]; |
958 | BOOL fExists = FALSE; | ||
964 | 959 | ||
965 | hr = DepCheckDependents(hkHive, pProvider->sczKey, 0, NULL, &pProvider->rgDependents, &pProvider->cDependents); | 960 | hr = DepCheckDependents(hkHive, pProvider->sczKey, 0, NULL, &pProvider->rgDependents, &pProvider->cDependents); |
966 | if (E_FILENOTFOUND == hr) | 961 | ExitOnPathFailure(hr, fExists, "Failed dependents check on package provider: %ls", pProvider->sczKey); |
967 | { | ||
968 | hr = S_OK; | ||
969 | } | ||
970 | ExitOnFailure(hr, "Failed dependents check on package provider: %ls", pProvider->sczKey); | ||
971 | 962 | ||
972 | if (0 < pProvider->cDependents || GetProviderExists(hkHive, pProvider->sczKey)) | 963 | if (0 < pProvider->cDependents || GetProviderExists(hkHive, pProvider->sczKey)) |
973 | { | 964 | { |
@@ -1366,11 +1357,11 @@ static void UnregisterPackageProvider( | |||
1366 | HRESULT hr = S_OK; | 1357 | HRESULT hr = S_OK; |
1367 | 1358 | ||
1368 | hr = DepUnregisterDependency(hkRoot, pProvider->sczKey); | 1359 | hr = DepUnregisterDependency(hkRoot, pProvider->sczKey); |
1369 | if (SUCCEEDED(hr)) | 1360 | if (SUCCEEDED(hr) || E_FILENOTFOUND == hr) |
1370 | { | 1361 | { |
1371 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED, pProvider->sczKey, wzPackageId); | 1362 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED, pProvider->sczKey, wzPackageId); |
1372 | } | 1363 | } |
1373 | else if (FAILED(hr) && E_FILENOTFOUND != hr) | 1364 | else |
1374 | { | 1365 | { |
1375 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_FAILED, pProvider->sczKey, wzPackageId, hr); | 1366 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_FAILED, pProvider->sczKey, wzPackageId, hr); |
1376 | } | 1367 | } |
@@ -1390,15 +1381,14 @@ static HRESULT RegisterPackageProviderDependent( | |||
1390 | ) | 1381 | ) |
1391 | { | 1382 | { |
1392 | HRESULT hr = S_OK; | 1383 | HRESULT hr = S_OK; |
1384 | BOOL fExists = FALSE; | ||
1393 | 1385 | ||
1394 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_REGISTER_DEPENDENCY, wzDependentProviderKey, pProvider->sczKey, wzPackageId); | 1386 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_REGISTER_DEPENDENCY, wzDependentProviderKey, pProvider->sczKey, wzPackageId); |
1395 | 1387 | ||
1396 | hr = DepRegisterDependent(hkRoot, pProvider->sczKey, wzDependentProviderKey, NULL, NULL, 0); | 1388 | hr = DepRegisterDependent(hkRoot, pProvider->sczKey, wzDependentProviderKey, NULL, NULL, 0); |
1397 | if (E_FILENOTFOUND != hr) | 1389 | ExitOnPathFailure(hr, fExists, "Failed to register the dependency on package dependency provider: %ls", pProvider->sczKey); |
1398 | { | 1390 | |
1399 | ExitOnFailure(hr, "Failed to register the dependency on package dependency provider: %ls", pProvider->sczKey); | 1391 | if (!fExists) |
1400 | } | ||
1401 | else | ||
1402 | { | 1392 | { |
1403 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_SKIP_MISSING, pProvider->sczKey, wzPackageId); | 1393 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_SKIP_MISSING, pProvider->sczKey, wzPackageId); |
1404 | } | 1394 | } |
@@ -1454,11 +1444,11 @@ static void UnregisterPackageProviderDependent( | |||
1454 | HRESULT hr = S_OK; | 1444 | HRESULT hr = S_OK; |
1455 | 1445 | ||
1456 | hr = DepUnregisterDependent(hkRoot, pProvider->sczKey, wzDependentProviderKey); | 1446 | hr = DepUnregisterDependent(hkRoot, pProvider->sczKey, wzDependentProviderKey); |
1457 | if (SUCCEEDED(hr)) | 1447 | if (SUCCEEDED(hr) || E_FILENOTFOUND == hr) |
1458 | { | 1448 | { |
1459 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_DEPENDENCY, wzDependentProviderKey, pProvider->sczKey, wzPackageId); | 1449 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_DEPENDENCY, wzDependentProviderKey, pProvider->sczKey, wzPackageId); |
1460 | } | 1450 | } |
1461 | else if (FAILED(hr) && E_FILENOTFOUND != hr) | 1451 | else |
1462 | { | 1452 | { |
1463 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_DEPENDENCY_FAILED, wzDependentProviderKey, pProvider->sczKey, wzPackageId, hr); | 1453 | LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_DEPENDENCY_FAILED, wzDependentProviderKey, pProvider->sczKey, wzPackageId, hr); |
1464 | } | 1454 | } |
diff --git a/src/burn/engine/exeengine.cpp b/src/burn/engine/exeengine.cpp index ef0015ac..b4898d42 100644 --- a/src/burn/engine/exeengine.cpp +++ b/src/burn/engine/exeengine.cpp | |||
@@ -1040,6 +1040,7 @@ static HRESULT DetectArpEntry( | |||
1040 | { | 1040 | { |
1041 | HRESULT hr = S_OK; | 1041 | HRESULT hr = S_OK; |
1042 | HKEY hKey = NULL; | 1042 | HKEY hKey = NULL; |
1043 | BOOL fExists = FALSE; | ||
1043 | VERUTIL_VERSION* pVersion = NULL; | 1044 | VERUTIL_VERSION* pVersion = NULL; |
1044 | int nCompareResult = 0; | 1045 | int nCompareResult = 0; |
1045 | HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 1046 | HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
@@ -1052,18 +1053,20 @@ static HRESULT DetectArpEntry( | |||
1052 | } | 1053 | } |
1053 | 1054 | ||
1054 | hr = RegOpenEx(hkRoot, pPackage->Exe.sczArpKeyPath, KEY_READ, keyBitness, &hKey); | 1055 | hr = RegOpenEx(hkRoot, pPackage->Exe.sczArpKeyPath, KEY_READ, keyBitness, &hKey); |
1055 | if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr || HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) | 1056 | ExitOnPathFailure(hr, fExists, "Failed to open registry key: %ls.", pPackage->Exe.sczArpKeyPath); |
1057 | |||
1058 | if (!fExists) | ||
1056 | { | 1059 | { |
1057 | ExitFunction1(hr = S_OK); | 1060 | ExitFunction(); |
1058 | } | 1061 | } |
1059 | ExitOnFailure(hr, "Failed to open registry key: %ls.", pPackage->Exe.sczArpKeyPath); | ||
1060 | 1062 | ||
1061 | hr = RegReadWixVersion(hKey, L"DisplayVersion", &pVersion); | 1063 | hr = RegReadWixVersion(hKey, L"DisplayVersion", &pVersion); |
1062 | if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) | 1064 | ExitOnPathFailure(hr, fExists, "Failed to read DisplayVersion."); |
1065 | |||
1066 | if (!fExists) | ||
1063 | { | 1067 | { |
1064 | ExitFunction1(hr = S_OK); | 1068 | ExitFunction(); |
1065 | } | 1069 | } |
1066 | ExitOnFailure(hr, "Failed to read DisplayVersion."); | ||
1067 | 1070 | ||
1068 | if (pVersion->fInvalid) | 1071 | if (pVersion->fInvalid) |
1069 | { | 1072 | { |
@@ -1089,11 +1092,7 @@ static HRESULT DetectArpEntry( | |||
1089 | if (psczQuietUninstallString) | 1092 | if (psczQuietUninstallString) |
1090 | { | 1093 | { |
1091 | hr = RegReadString(hKey, L"QuietUninstallString", psczQuietUninstallString); | 1094 | hr = RegReadString(hKey, L"QuietUninstallString", psczQuietUninstallString); |
1092 | if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) | 1095 | ExitOnPathFailure(hr, fExists, "Failed to read QuietUninstallString."); |
1093 | { | ||
1094 | hr = S_OK; | ||
1095 | } | ||
1096 | ExitOnFailure(hr, "Failed to read QuietUninstallString."); | ||
1097 | } | 1096 | } |
1098 | 1097 | ||
1099 | LExit: | 1098 | LExit: |
diff --git a/src/burn/engine/registration.cpp b/src/burn/engine/registration.cpp index 484c08ac..35100336 100644 --- a/src/burn/engine/registration.cpp +++ b/src/burn/engine/registration.cpp | |||
@@ -492,25 +492,28 @@ extern "C" HRESULT RegistrationDetectResumeType( | |||
492 | { | 492 | { |
493 | HRESULT hr = S_OK; | 493 | HRESULT hr = S_OK; |
494 | HKEY hkRegistration = NULL; | 494 | HKEY hkRegistration = NULL; |
495 | BOOL fExists = FALSE; | ||
495 | DWORD dwResume = 0; | 496 | DWORD dwResume = 0; |
496 | 497 | ||
497 | // open registration key | 498 | // open registration key |
498 | hr = RegOpen(pRegistration->hkRoot, pRegistration->sczRegistrationKey, KEY_QUERY_VALUE, &hkRegistration); | 499 | hr = RegOpen(pRegistration->hkRoot, pRegistration->sczRegistrationKey, KEY_QUERY_VALUE, &hkRegistration); |
499 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) | 500 | ExitOnPathFailure(hr, fExists, "Failed to open registration key."); |
501 | |||
502 | if (!fExists) | ||
500 | { | 503 | { |
501 | *pResumeType = BOOTSTRAPPER_RESUME_TYPE_NONE; | 504 | *pResumeType = BOOTSTRAPPER_RESUME_TYPE_NONE; |
502 | ExitFunction1(hr = S_OK); | 505 | ExitFunction(); |
503 | } | 506 | } |
504 | ExitOnFailure(hr, "Failed to open registration key."); | ||
505 | 507 | ||
506 | // read Resume value | 508 | // read Resume value |
507 | hr = RegReadNumber(hkRegistration, L"Resume", &dwResume); | 509 | hr = RegReadNumber(hkRegistration, L"Resume", &dwResume); |
508 | if (E_FILENOTFOUND == hr) | 510 | ExitOnPathFailure(hr, fExists, "Failed to read Resume value."); |
511 | |||
512 | if (!fExists) | ||
509 | { | 513 | { |
510 | *pResumeType = BOOTSTRAPPER_RESUME_TYPE_INVALID; | 514 | *pResumeType = BOOTSTRAPPER_RESUME_TYPE_INVALID; |
511 | ExitFunction1(hr = S_OK); | 515 | ExitFunction(); |
512 | } | 516 | } |
513 | ExitOnFailure(hr, "Failed to read Resume value."); | ||
514 | 517 | ||
515 | switch (dwResume) | 518 | switch (dwResume) |
516 | { | 519 | { |
@@ -855,6 +858,7 @@ extern "C" HRESULT RegistrationSessionEnd( | |||
855 | { | 858 | { |
856 | HRESULT hr = S_OK; | 859 | HRESULT hr = S_OK; |
857 | HKEY hkRegistration = NULL; | 860 | HKEY hkRegistration = NULL; |
861 | BOOL fDeleted = FALSE; | ||
858 | 862 | ||
859 | // If no resume mode, then remove the bundle registration. | 863 | // If no resume mode, then remove the bundle registration. |
860 | if (BURN_RESUME_MODE_NONE == resumeMode) | 864 | if (BURN_RESUME_MODE_NONE == resumeMode) |
@@ -874,10 +878,7 @@ extern "C" HRESULT RegistrationSessionEnd( | |||
874 | 878 | ||
875 | // Delete registration key. | 879 | // Delete registration key. |
876 | hr = RegDelete(pRegistration->hkRoot, pRegistration->sczRegistrationKey, REG_KEY_DEFAULT, TRUE); | 880 | hr = RegDelete(pRegistration->hkRoot, pRegistration->sczRegistrationKey, REG_KEY_DEFAULT, TRUE); |
877 | if (E_FILENOTFOUND != hr) | 881 | ExitOnPathFailure(hr, fDeleted, "Failed to delete registration key: %ls", pRegistration->sczRegistrationKey); |
878 | { | ||
879 | ExitOnFailure(hr, "Failed to delete registration key: %ls", pRegistration->sczRegistrationKey); | ||
880 | } | ||
881 | 882 | ||
882 | CacheRemoveBundle(pCache, pRegistration->fPerMachine, pRegistration->sczId); | 883 | CacheRemoveBundle(pCache, pRegistration->fPerMachine, pRegistration->sczId); |
883 | } | 884 | } |
@@ -967,7 +968,10 @@ extern "C" HRESULT RegistrationSaveState( | |||
967 | ExitOnFailure(hr, "Failed to enumerate value %u", i); | 968 | ExitOnFailure(hr, "Failed to enumerate value %u", i); |
968 | 969 | ||
969 | er = ::RegDeleteValueW(hkRegistration, sczValueName); | 970 | er = ::RegDeleteValueW(hkRegistration, sczValueName); |
970 | ExitOnWin32Error(er, hr, "Failed to delete registration variable value."); | 971 | if (ERROR_FILE_NOT_FOUND != er) |
972 | { | ||
973 | ExitOnWin32Error(er, hr, "Failed to delete registration variable value."); | ||
974 | } | ||
971 | } | 975 | } |
972 | 976 | ||
973 | // Write variables. | 977 | // Write variables. |
@@ -1486,6 +1490,7 @@ static HRESULT RemoveUpdateRegistration( | |||
1486 | LPWSTR sczPackageVersion = NULL; | 1490 | LPWSTR sczPackageVersion = NULL; |
1487 | HKEY hkKey = NULL; | 1491 | HKEY hkKey = NULL; |
1488 | BOOL fDeleteRegKey = TRUE; | 1492 | BOOL fDeleteRegKey = TRUE; |
1493 | BOOL fDeleted = FALSE; | ||
1489 | 1494 | ||
1490 | hr = FormatUpdateRegistrationKey(pRegistration, &sczKey); | 1495 | hr = FormatUpdateRegistrationKey(pRegistration, &sczKey); |
1491 | ExitOnFailure(hr, "Failed to format key for update registration."); | 1496 | ExitOnFailure(hr, "Failed to format key for update registration."); |
@@ -1513,10 +1518,7 @@ static HRESULT RemoveUpdateRegistration( | |||
1513 | if (fDeleteRegKey) | 1518 | if (fDeleteRegKey) |
1514 | { | 1519 | { |
1515 | hr = RegDelete(pRegistration->hkRoot, sczKey, REG_KEY_DEFAULT, FALSE); | 1520 | hr = RegDelete(pRegistration->hkRoot, sczKey, REG_KEY_DEFAULT, FALSE); |
1516 | if (E_FILENOTFOUND != hr) | 1521 | ExitOnPathFailure(hr, fDeleted, "Failed to remove update registration key: %ls", sczKey); |
1517 | { | ||
1518 | ExitOnFailure(hr, "Failed to remove update registration key: %ls", sczKey); | ||
1519 | } | ||
1520 | } | 1522 | } |
1521 | 1523 | ||
1522 | LExit: | 1524 | LExit: |
diff --git a/src/burn/engine/relatedbundle.cpp b/src/burn/engine/relatedbundle.cpp index 586446b1..23e0f352 100644 --- a/src/burn/engine/relatedbundle.cpp +++ b/src/burn/engine/relatedbundle.cpp | |||
@@ -322,6 +322,7 @@ static HRESULT LoadRelatedBundleFromKey( | |||
322 | LPWSTR sczCachePath = NULL; | 322 | LPWSTR sczCachePath = NULL; |
323 | BOOL fCached = FALSE; | 323 | BOOL fCached = FALSE; |
324 | DWORD64 qwFileSize = 0; | 324 | DWORD64 qwFileSize = 0; |
325 | BOOL fExists = FALSE; | ||
325 | BURN_DEPENDENCY_PROVIDER dependencyProvider = { }; | 326 | BURN_DEPENDENCY_PROVIDER dependencyProvider = { }; |
326 | BURN_DEPENDENCY_PROVIDER* pBundleDependencyProvider = NULL; | 327 | BURN_DEPENDENCY_PROVIDER* pBundleDependencyProvider = NULL; |
327 | 328 | ||
@@ -369,10 +370,7 @@ static HRESULT LoadRelatedBundleFromKey( | |||
369 | pRelatedBundle->fPlannable = fCached; | 370 | pRelatedBundle->fPlannable = fCached; |
370 | 371 | ||
371 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_PROVIDER_KEY, &dependencyProvider.sczKey); | 372 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_PROVIDER_KEY, &dependencyProvider.sczKey); |
372 | if (E_FILENOTFOUND != hr) | 373 | ExitOnPathFailure(hr, fExists, "Failed to read provider key from registry for bundle: %ls", wzRelatedBundleId); |
373 | { | ||
374 | ExitOnFailure(hr, "Failed to read provider key from registry for bundle: %ls", wzRelatedBundleId); | ||
375 | } | ||
376 | 374 | ||
377 | if (dependencyProvider.sczKey && *dependencyProvider.sczKey) | 375 | if (dependencyProvider.sczKey && *dependencyProvider.sczKey) |
378 | { | 376 | { |
@@ -384,18 +382,11 @@ static HRESULT LoadRelatedBundleFromKey( | |||
384 | ExitOnFailure(hr, "Failed to copy version for bundle: %ls", wzRelatedBundleId); | 382 | ExitOnFailure(hr, "Failed to copy version for bundle: %ls", wzRelatedBundleId); |
385 | 383 | ||
386 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_DISPLAY_NAME, &dependencyProvider.sczDisplayName); | 384 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_DISPLAY_NAME, &dependencyProvider.sczDisplayName); |
387 | if (E_FILENOTFOUND != hr) | 385 | ExitOnPathFailure(hr, fExists, "Failed to copy display name for bundle: %ls", wzRelatedBundleId); |
388 | { | ||
389 | ExitOnFailure(hr, "Failed to copy display name for bundle: %ls", wzRelatedBundleId); | ||
390 | } | ||
391 | } | 386 | } |
392 | 387 | ||
393 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_TAG, &pRelatedBundle->sczTag); | 388 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_TAG, &pRelatedBundle->sczTag); |
394 | if (E_FILENOTFOUND == hr) | 389 | ExitOnPathFailure(hr, fExists, "Failed to read tag from registry for bundle: %ls", wzRelatedBundleId); |
395 | { | ||
396 | hr = S_OK; | ||
397 | } | ||
398 | ExitOnFailure(hr, "Failed to read tag from registry for bundle: %ls", wzRelatedBundleId); | ||
399 | 390 | ||
400 | pRelatedBundle->detectRelationType = relationType; | 391 | pRelatedBundle->detectRelationType = relationType; |
401 | 392 | ||
diff --git a/src/burn/engine/search.cpp b/src/burn/engine/search.cpp index b37dc9bd..a1b6b74a 100644 --- a/src/burn/engine/search.cpp +++ b/src/burn/engine/search.cpp | |||
@@ -610,6 +610,7 @@ static HRESULT DirectorySearchExists( | |||
610 | ) | 610 | ) |
611 | { | 611 | { |
612 | HRESULT hr = S_OK; | 612 | HRESULT hr = S_OK; |
613 | DWORD er = ERROR_SUCCESS; | ||
613 | LPWSTR sczPath = NULL; | 614 | LPWSTR sczPath = NULL; |
614 | BOOL fExists = FALSE; | 615 | BOOL fExists = FALSE; |
615 | 616 | ||
@@ -629,21 +630,25 @@ static HRESULT DirectorySearchExists( | |||
629 | DWORD dwAttributes = ::GetFileAttributesW(sczPath); | 630 | DWORD dwAttributes = ::GetFileAttributesW(sczPath); |
630 | if (INVALID_FILE_ATTRIBUTES == dwAttributes) | 631 | if (INVALID_FILE_ATTRIBUTES == dwAttributes) |
631 | { | 632 | { |
632 | hr = HRESULT_FROM_WIN32(::GetLastError()); | 633 | er = ::GetLastError(); |
633 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) | 634 | if (ERROR_FILE_NOT_FOUND == er || ERROR_PATH_NOT_FOUND == er) |
634 | { | 635 | { |
635 | hr = S_OK; // didn't find file, fExists still is false. | 636 | LogStringLine(REPORT_STANDARD, "Directory search: %ls, did not find path: %ls", pSearch->sczKey, pSearch->DirectorySearch.sczPath); |
637 | } | ||
638 | else | ||
639 | { | ||
640 | ExitOnWin32Error(er, hr, "Directory search: %ls, failed get to directory attributes. '%ls'", pSearch->sczKey, pSearch->DirectorySearch.sczPath); | ||
636 | } | 641 | } |
637 | } | 642 | } |
638 | else if (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) | 643 | else if (FILE_ATTRIBUTE_DIRECTORY != (dwAttributes & FILE_ATTRIBUTE_DIRECTORY)) |
644 | { | ||
645 | LogStringLine(REPORT_STANDARD, "Directory search: %ls, found file at path: %ls", pSearch->sczKey, pSearch->DirectorySearch.sczPath); | ||
646 | } | ||
647 | else | ||
639 | { | 648 | { |
640 | fExists = TRUE; | 649 | fExists = TRUE; |
641 | } | 650 | } |
642 | 651 | ||
643 | // else must have found a file. | ||
644 | // What if there is a hidden variable in sczPath? | ||
645 | ExitOnFailure(hr, "Failed while searching directory search: %ls, for path: %ls", pSearch->sczKey, sczPath); | ||
646 | |||
647 | // set variable | 652 | // set variable |
648 | hr = VariableSetNumeric(pVariables, pSearch->sczVariable, fExists, FALSE); | 653 | hr = VariableSetNumeric(pVariables, pSearch->sczVariable, fExists, FALSE); |
649 | ExitOnFailure(hr, "Failed to set variable."); | 654 | ExitOnFailure(hr, "Failed to set variable."); |
@@ -694,13 +699,12 @@ static HRESULT DirectorySearchPath( | |||
694 | hr = E_PATHNOTFOUND; | 699 | hr = E_PATHNOTFOUND; |
695 | } | 700 | } |
696 | 701 | ||
697 | // What if there is a hidden variable in sczPath? | ||
698 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) | 702 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) |
699 | { | 703 | { |
700 | LogStringLine(REPORT_STANDARD, "Directory search: %ls, did not find path: %ls, reason: 0x%x", pSearch->sczKey, sczPath, hr); | 704 | LogStringLine(REPORT_STANDARD, "Directory search: %ls, did not find path: %ls, reason: 0x%x", pSearch->sczKey, pSearch->DirectorySearch.sczPath, hr); |
701 | ExitFunction1(hr = S_OK); | 705 | ExitFunction1(hr = S_OK); |
702 | } | 706 | } |
703 | ExitOnFailure(hr, "Failed while searching directory search: %ls, for path: %ls", pSearch->sczKey, sczPath); | 707 | ExitOnFailure(hr, "Failed while searching directory search: %ls, for path: %ls", pSearch->sczKey, pSearch->DirectorySearch.sczPath); |
704 | 708 | ||
705 | LExit: | 709 | LExit: |
706 | #if !defined(_WIN64) | 710 | #if !defined(_WIN64) |
@@ -742,15 +746,18 @@ static HRESULT FileSearchExists( | |||
742 | er = ::GetLastError(); | 746 | er = ::GetLastError(); |
743 | if (ERROR_FILE_NOT_FOUND == er || ERROR_PATH_NOT_FOUND == er) | 747 | if (ERROR_FILE_NOT_FOUND == er || ERROR_PATH_NOT_FOUND == er) |
744 | { | 748 | { |
745 | // What if there is a hidden variable in sczPath? | 749 | LogStringLine(REPORT_STANDARD, "File search: %ls, did not find path: %ls", pSearch->sczKey, pSearch->FileSearch.sczPath); |
746 | LogStringLine(REPORT_STANDARD, "File search: %ls, did not find path: %ls", pSearch->sczKey, sczPath); | ||
747 | } | 750 | } |
748 | else | 751 | else |
749 | { | 752 | { |
750 | ExitOnWin32Error(er, hr, "Failed get to file attributes. '%ls'", pSearch->FileSearch.sczPath); | 753 | ExitOnWin32Error(er, hr, "File search: %ls, failed get to file attributes. '%ls'", pSearch->sczKey, pSearch->FileSearch.sczPath); |
751 | } | 754 | } |
752 | } | 755 | } |
753 | else if (FILE_ATTRIBUTE_DIRECTORY != (dwAttributes & FILE_ATTRIBUTE_DIRECTORY)) | 756 | else if (FILE_ATTRIBUTE_DIRECTORY == (dwAttributes & FILE_ATTRIBUTE_DIRECTORY)) |
757 | { | ||
758 | LogStringLine(REPORT_STANDARD, "File search: %ls, found directory at path: %ls", pSearch->sczKey, pSearch->FileSearch.sczPath); | ||
759 | } | ||
760 | else | ||
754 | { | 761 | { |
755 | fExists = TRUE; | 762 | fExists = TRUE; |
756 | } | 763 | } |
@@ -795,8 +802,7 @@ static HRESULT FileSearchVersion( | |||
795 | hr = FileVersion(sczPath, &uliVersion.HighPart, &uliVersion.LowPart); | 802 | hr = FileVersion(sczPath, &uliVersion.HighPart, &uliVersion.LowPart); |
796 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) | 803 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) |
797 | { | 804 | { |
798 | // What if there is a hidden variable in sczPath? | 805 | LogStringLine(REPORT_STANDARD, "File search: %ls, did not find path: %ls", pSearch->sczKey, pSearch->FileSearch.sczPath); |
799 | LogStringLine(REPORT_STANDARD, "File search: %ls, did not find path: %ls", pSearch->sczKey, sczPath); | ||
800 | ExitFunction1(hr = S_OK); | 806 | ExitFunction1(hr = S_OK); |
801 | } | 807 | } |
802 | ExitOnFailure(hr, "Failed to get file version."); | 808 | ExitOnFailure(hr, "Failed to get file version."); |
@@ -854,13 +860,12 @@ static HRESULT FileSearchPath( | |||
854 | ExitOnFailure(hr, "Failed to set variable to file search path."); | 860 | ExitOnFailure(hr, "Failed to set variable to file search path."); |
855 | } | 861 | } |
856 | 862 | ||
857 | // What if there is a hidden variable in sczPath? | ||
858 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) | 863 | if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) |
859 | { | 864 | { |
860 | LogStringLine(REPORT_STANDARD, "File search: %ls, did not find path: %ls", pSearch->sczKey, sczPath); | 865 | LogStringLine(REPORT_STANDARD, "File search: %ls, did not find path: %ls", pSearch->sczKey, pSearch->FileSearch.sczPath); |
861 | ExitFunction1(hr = S_OK); | 866 | ExitFunction1(hr = S_OK); |
862 | } | 867 | } |
863 | ExitOnFailure(hr, "Failed while searching file search: %ls, for path: %ls", pSearch->sczKey, sczPath); | 868 | ExitOnFailure(hr, "Failed while searching file search: %ls, for path: %ls", pSearch->sczKey, pSearch->FileSearch.sczPath); |
864 | 869 | ||
865 | LExit: | 870 | LExit: |
866 | #if !defined(_WIN64) | 871 | #if !defined(_WIN64) |
@@ -891,24 +896,13 @@ static HRESULT RegistrySearchExists( | |||
891 | 896 | ||
892 | // open key | 897 | // open key |
893 | hr = RegOpenEx(pSearch->RegistrySearch.hRoot, sczKey, KEY_QUERY_VALUE, pSearch->RegistrySearch.fWin64 ? REG_KEY_64BIT : REG_KEY_32BIT, &hKey); | 898 | hr = RegOpenEx(pSearch->RegistrySearch.hRoot, sczKey, KEY_QUERY_VALUE, pSearch->RegistrySearch.fWin64 ? REG_KEY_64BIT : REG_KEY_32BIT, &hKey); |
894 | if (SUCCEEDED(hr)) | 899 | ExitOnPathFailure(hr, fExists, "Failed to open registry key. Key = '%ls'", pSearch->RegistrySearch.sczKey); |
895 | { | 900 | |
896 | fExists = TRUE; | 901 | if (!fExists) |
897 | } | ||
898 | else if (E_FILENOTFOUND == hr) | ||
899 | { | ||
900 | // What if there is a hidden variable in sczKey? | ||
901 | LogStringLine(REPORT_STANDARD, "Registry key not found. Key = '%ls'", sczKey); | ||
902 | fExists = FALSE; | ||
903 | hr = S_OK; | ||
904 | } | ||
905 | else | ||
906 | { | 902 | { |
907 | // What if there is a hidden variable in sczKey? | 903 | LogStringLine(REPORT_STANDARD, "Registry key not found. Key = '%ls'", pSearch->RegistrySearch.sczKey); |
908 | ExitOnFailure(hr, "Failed to open registry key. Key = '%ls'", sczKey); | ||
909 | } | 904 | } |
910 | 905 | else if (pSearch->RegistrySearch.sczValue) | |
911 | if (fExists && pSearch->RegistrySearch.sczValue) | ||
912 | { | 906 | { |
913 | // format value string | 907 | // format value string |
914 | hr = VariableFormatString(pVariables, pSearch->RegistrySearch.sczValue, &sczValue, NULL); | 908 | hr = VariableFormatString(pVariables, pSearch->RegistrySearch.sczValue, &sczValue, NULL); |
@@ -922,8 +916,7 @@ static HRESULT RegistrySearchExists( | |||
922 | fExists = TRUE; | 916 | fExists = TRUE; |
923 | break; | 917 | break; |
924 | case ERROR_FILE_NOT_FOUND: | 918 | case ERROR_FILE_NOT_FOUND: |
925 | // What if there is a hidden variable in sczKey or sczValue? | 919 | LogStringLine(REPORT_STANDARD, "Registry value not found. Key = '%ls', Value = '%ls'", pSearch->RegistrySearch.sczKey, pSearch->RegistrySearch.sczValue); |
926 | LogStringLine(REPORT_STANDARD, "Registry value not found. Key = '%ls', Value = '%ls'", sczKey, sczValue); | ||
927 | fExists = FALSE; | 920 | fExists = FALSE; |
928 | break; | 921 | break; |
929 | default: | 922 | default: |
@@ -938,8 +931,7 @@ static HRESULT RegistrySearchExists( | |||
938 | LExit: | 931 | LExit: |
939 | if (FAILED(hr)) | 932 | if (FAILED(hr)) |
940 | { | 933 | { |
941 | // What if there is a hidden variable in sczKey? | 934 | LogStringLine(REPORT_STANDARD, "RegistrySearchExists failed: ID '%ls', HRESULT 0x%x", pSearch->sczKey, hr); |
942 | LogStringLine(REPORT_STANDARD, "RegistrySearchExists failed: ID '%ls', HRESULT 0x%x", sczKey, hr); | ||
943 | } | 935 | } |
944 | 936 | ||
945 | StrSecureZeroFreeString(sczKey); | 937 | StrSecureZeroFreeString(sczKey); |
@@ -958,6 +950,7 @@ static HRESULT RegistrySearchValue( | |||
958 | LPWSTR sczKey = NULL; | 950 | LPWSTR sczKey = NULL; |
959 | LPWSTR sczValue = NULL; | 951 | LPWSTR sczValue = NULL; |
960 | HKEY hKey = NULL; | 952 | HKEY hKey = NULL; |
953 | BOOL fExists = FALSE; | ||
961 | DWORD dwType = 0; | 954 | DWORD dwType = 0; |
962 | SIZE_T cbData = 0; | 955 | SIZE_T cbData = 0; |
963 | LPBYTE pData = NULL; | 956 | LPBYTE pData = NULL; |
@@ -978,21 +971,20 @@ static HRESULT RegistrySearchValue( | |||
978 | 971 | ||
979 | // open key | 972 | // open key |
980 | hr = RegOpenEx(pSearch->RegistrySearch.hRoot, sczKey, KEY_QUERY_VALUE, pSearch->RegistrySearch.fWin64 ? REG_KEY_64BIT : REG_KEY_32BIT, &hKey); | 973 | hr = RegOpenEx(pSearch->RegistrySearch.hRoot, sczKey, KEY_QUERY_VALUE, pSearch->RegistrySearch.fWin64 ? REG_KEY_64BIT : REG_KEY_32BIT, &hKey); |
981 | if (E_FILENOTFOUND == hr) | 974 | ExitOnPathFailure(hr, fExists, "Failed to open registry key."); |
975 | |||
976 | if (!fExists) | ||
982 | { | 977 | { |
983 | // What if there is a hidden variable in sczKey? | 978 | LogStringLine(REPORT_STANDARD, "Registry key not found. Key = '%ls'", pSearch->RegistrySearch.sczKey); |
984 | LogStringLine(REPORT_STANDARD, "Registry key not found. Key = '%ls'", sczKey); | ||
985 | 979 | ||
986 | ExitFunction1(hr = S_OK); | 980 | ExitFunction(); |
987 | } | 981 | } |
988 | ExitOnFailure(hr, "Failed to open registry key."); | ||
989 | 982 | ||
990 | // get value | 983 | // get value |
991 | hr = RegReadValue(hKey, sczValue, pSearch->RegistrySearch.fExpandEnvironment, &pData, &cbData, &dwType); | 984 | hr = RegReadValue(hKey, sczValue, pSearch->RegistrySearch.fExpandEnvironment, &pData, &cbData, &dwType); |
992 | if (E_FILENOTFOUND == hr) | 985 | if (E_FILENOTFOUND == hr) |
993 | { | 986 | { |
994 | // What if there is a hidden variable in sczKey or sczValue? | 987 | LogStringLine(REPORT_STANDARD, "Registry value not found. Key = '%ls', Value = '%ls'", pSearch->RegistrySearch.sczKey, pSearch->RegistrySearch.sczValue); |
995 | LogStringLine(REPORT_STANDARD, "Registry value not found. Key = '%ls', Value = '%ls'", sczKey, sczValue); | ||
996 | 988 | ||
997 | ExitFunction1(hr = S_OK); | 989 | ExitFunction1(hr = S_OK); |
998 | } | 990 | } |
@@ -1034,8 +1026,7 @@ static HRESULT RegistrySearchValue( | |||
1034 | LExit: | 1026 | LExit: |
1035 | if (FAILED(hr)) | 1027 | if (FAILED(hr)) |
1036 | { | 1028 | { |
1037 | // What if there is a hidden variable in sczKey? | 1029 | LogStringLine(REPORT_STANDARD, "RegistrySearchValue failed: ID '%ls', HRESULT 0x%x", pSearch->sczKey, hr); |
1038 | LogStringLine(REPORT_STANDARD, "RegistrySearchValue failed: ID '%ls', HRESULT 0x%x", sczKey, hr); | ||
1039 | } | 1030 | } |
1040 | 1031 | ||
1041 | StrSecureZeroFreeString(sczKey); | 1032 | StrSecureZeroFreeString(sczKey); |