diff options
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 | { |