aboutsummaryrefslogtreecommitdiff
path: root/src/engine/variable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/variable.cpp')
-rw-r--r--src/engine/variable.cpp33
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
1641extern "C" typedef NTSTATUS (NTAPI *RTL_GET_VERSION)(_Out_ PRTL_OSVERSIONINFOEXW lpVersionInformation);
1642
1643static HRESULT InitializeVariableVersionNT( 1641static 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
1714LExit: 1698LExit:
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 {