diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-02-07 18:54:54 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-02-07 18:59:06 -0600 |
| commit | 096784ea5114cb5bf99151cc047d69951035d152 (patch) | |
| tree | 28adaf67c91518395ea72bfe89f835ef89f121b1 /src/engine/variable.cpp | |
| parent | 63cf6f589a35466aa73ff3ec021b5052be733409 (diff) | |
| download | wix-096784ea5114cb5bf99151cc047d69951035d152.tar.gz wix-096784ea5114cb5bf99151cc047d69951035d152.tar.bz2 wix-096784ea5114cb5bf99151cc047d69951035d152.zip | |
Require Vista (Server 2008) SP2 or newer.
#6318
Diffstat (limited to 'src/engine/variable.cpp')
| -rw-r--r-- | src/engine/variable.cpp | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/src/engine/variable.cpp b/src/engine/variable.cpp index 51dbdff4..fed23151 100644 --- a/src/engine/variable.cpp +++ b/src/engine/variable.cpp | |||
| @@ -1638,33 +1638,17 @@ LExit: | |||
| 1638 | return hr; | 1638 | return hr; |
| 1639 | } | 1639 | } |
| 1640 | 1640 | ||
| 1641 | extern "C" typedef NTSTATUS (NTAPI *RTL_GET_VERSION)(_Out_ PRTL_OSVERSIONINFOEXW lpVersionInformation); | ||
| 1642 | |||
| 1643 | static HRESULT InitializeVariableVersionNT( | 1641 | static HRESULT InitializeVariableVersionNT( |
| 1644 | __in DWORD_PTR dwpData, | 1642 | __in DWORD_PTR dwpData, |
| 1645 | __inout BURN_VARIANT* pValue | 1643 | __inout BURN_VARIANT* pValue |
| 1646 | ) | 1644 | ) |
| 1647 | { | 1645 | { |
| 1648 | HRESULT hr = S_OK; | 1646 | HRESULT hr = S_OK; |
| 1649 | HMODULE ntdll = NULL; | ||
| 1650 | RTL_GET_VERSION rtlGetVersion = NULL; | ||
| 1651 | RTL_OSVERSIONINFOEXW ovix = { }; | 1647 | RTL_OSVERSIONINFOEXW ovix = { }; |
| 1652 | BURN_VARIANT value = { }; | 1648 | BURN_VARIANT value = { }; |
| 1653 | VERUTIL_VERSION* pVersion = NULL; | 1649 | VERUTIL_VERSION* pVersion = NULL; |
| 1654 | 1650 | ||
| 1655 | if (!::GetModuleHandleExW(0, L"ntdll", &ntdll)) | 1651 | hr = OsRtlGetVersion(&ovix); |
| 1656 | { | ||
| 1657 | ExitWithLastError(hr, "Failed to locate NTDLL."); | ||
| 1658 | } | ||
| 1659 | |||
| 1660 | rtlGetVersion = reinterpret_cast<RTL_GET_VERSION>(::GetProcAddress(ntdll, "RtlGetVersion")); | ||
| 1661 | if (NULL == rtlGetVersion) | ||
| 1662 | { | ||
| 1663 | ExitWithLastError(hr, "Failed to locate RtlGetVersion."); | ||
| 1664 | } | ||
| 1665 | |||
| 1666 | ovix.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW); | ||
| 1667 | hr = static_cast<HRESULT>(rtlGetVersion(&ovix)); | ||
| 1668 | ExitOnFailure(hr, "Failed to get OS info."); | 1652 | ExitOnFailure(hr, "Failed to get OS info."); |
| 1669 | 1653 | ||
| 1670 | switch ((OS_INFO_VARIABLE)dwpData) | 1654 | switch ((OS_INFO_VARIABLE)dwpData) |
| @@ -1712,11 +1696,6 @@ static HRESULT InitializeVariableVersionNT( | |||
| 1712 | ExitOnFailure(hr, "Failed to set variant value."); | 1696 | ExitOnFailure(hr, "Failed to set variant value."); |
| 1713 | 1697 | ||
| 1714 | LExit: | 1698 | LExit: |
| 1715 | if (NULL != ntdll) | ||
| 1716 | { | ||
| 1717 | FreeLibrary(ntdll); | ||
| 1718 | } | ||
| 1719 | |||
| 1720 | ReleaseVerutilVersion(pVersion); | 1699 | ReleaseVerutilVersion(pVersion); |
| 1721 | 1700 | ||
| 1722 | return hr; | 1701 | return hr; |
| @@ -1728,15 +1707,11 @@ static HRESULT InitializeVariableOsInfo( | |||
| 1728 | ) | 1707 | ) |
| 1729 | { | 1708 | { |
| 1730 | HRESULT hr = S_OK; | 1709 | HRESULT hr = S_OK; |
| 1731 | OSVERSIONINFOEXW ovix = { }; | 1710 | RTL_OSVERSIONINFOEXW ovix = { }; |
| 1732 | BURN_VARIANT value = { }; | 1711 | BURN_VARIANT value = { }; |
| 1733 | 1712 | ||
| 1734 | ovix.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); | 1713 | hr = OsRtlGetVersion(&ovix); |
| 1735 | #pragma warning(suppress: 4996) | 1714 | ExitOnFailure(hr, "Failed to get OS info."); |
| 1736 | if (!::GetVersionExW((LPOSVERSIONINFOW)&ovix)) | ||
| 1737 | { | ||
| 1738 | ExitWithLastError(hr, "Failed to get OS info."); | ||
| 1739 | } | ||
| 1740 | 1715 | ||
| 1741 | switch ((OS_INFO_VARIABLE)dwpData) | 1716 | switch ((OS_INFO_VARIABLE)dwpData) |
| 1742 | { | 1717 | { |
