summaryrefslogtreecommitdiff
path: root/src/libs/dutil/WixToolset.DUtil/regutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/regutil.cpp')
-rw-r--r--src/libs/dutil/WixToolset.DUtil/regutil.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/regutil.cpp b/src/libs/dutil/WixToolset.DUtil/regutil.cpp
index 78507ade..64224d42 100644
--- a/src/libs/dutil/WixToolset.DUtil/regutil.cpp
+++ b/src/libs/dutil/WixToolset.DUtil/regutil.cpp
@@ -590,6 +590,7 @@ DAPI_(HRESULT) RegReadVersion(
590 { 590 {
591 ExitFunction1(hr = E_FILENOTFOUND); 591 ExitFunction1(hr = E_FILENOTFOUND);
592 } 592 }
593
593 if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) 594 if (REG_SZ == dwType || REG_EXPAND_SZ == dwType)
594 { 595 {
595 hr = RegReadString(hk, wzName, &sczVersion); 596 hr = RegReadString(hk, wzName, &sczVersion);
@@ -614,6 +615,58 @@ LExit:
614 return hr; 615 return hr;
615} 616}
616 617
618
619DAPI_(HRESULT) RegReadWixVersion(
620 __in HKEY hk,
621 __in_z_opt LPCWSTR wzName,
622 __out VERUTIL_VERSION** ppVersion
623 )
624{
625 HRESULT hr = S_OK;
626 DWORD er = ERROR_SUCCESS;
627 DWORD dwType = 0;
628 DWORD cb = 0;
629 DWORD64 dw64Version = 0;
630 LPWSTR sczVersion = NULL;
631 VERUTIL_VERSION* pVersion = NULL;
632
633 cb = sizeof(DWORD64);
634 er = vpfnRegQueryValueExW(hk, wzName, NULL, &dwType, reinterpret_cast<LPBYTE>(&dw64Version), &cb);
635 if (E_FILENOTFOUND == HRESULT_FROM_WIN32(er))
636 {
637 ExitFunction1(hr = E_FILENOTFOUND);
638 }
639
640 if (REG_SZ == dwType || REG_EXPAND_SZ == dwType)
641 {
642 hr = RegReadString(hk, wzName, &sczVersion);
643 RegExitOnFailure(hr, "Failed to read registry version as string.");
644
645 hr = VerParseVersion(sczVersion, 0, FALSE, &pVersion);
646 RegExitOnFailure(hr, "Failed to convert registry string to version.");
647 }
648 else if (REG_QWORD == dwType)
649 {
650 hr = VerVersionFromQword(dw64Version, &pVersion);
651 RegExitOnFailure(hr, "Failed to convert registry string to version.");
652 }
653 else // unexpected data type
654 {
655 hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATATYPE);
656 RegExitOnRootFailure(hr, "Error reading version registry value due to unexpected data type: %u", dwType);
657 }
658
659 *ppVersion = pVersion;
660 pVersion = NULL;
661
662LExit:
663 ReleaseVerutilVersion(pVersion);
664 ReleaseStr(sczVersion);
665
666 return hr;
667}
668
669
617DAPI_(HRESULT) RegReadNone( 670DAPI_(HRESULT) RegReadNone(
618 __in HKEY hk, 671 __in HKEY hk,
619 __in_z_opt LPCWSTR wzName 672 __in_z_opt LPCWSTR wzName