Skip to content

Commit c78a6ec

Browse files
matlo607Matthieu Longo
authored andcommitted
[Windows 8.1 and latter] warning C4996: GetVersionExA was declared deprecated
1 parent 51e8a5e commit c78a6ec

1 file changed

Lines changed: 38 additions & 23 deletions

File tree

Main/StackWalker/StackWalker.cpp

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,41 +1423,56 @@ void StackWalker::OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUser
14231423
#if _MSC_VER >= 1400
14241424
maxLen = _TRUNCATE;
14251425
#endif
1426-
_snprintf_s(buffer, maxLen, "SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n",
1427-
szSearchPath, symOptions, szUserName);
1428-
buffer[STACKWALK_MAX_NAMELEN - 1] = 0;
1426+
_snprintf_s(buffer, sizeof(buffer), maxLen,
1427+
"SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n", szSearchPath,
1428+
symOptions, szUserName);
1429+
buffer[_countof(buffer) - 1] = '\0';
14291430
OnOutput(buffer);
1431+
14301432
// Also display the OS-version
1433+
#if _WIN32_WINNT > 0x0600 // _WIN32_WINNT_VISTA
1434+
// Get a handle on RtlGetVersion
1435+
HMODULE h_NtDll = GetModuleHandleW(L"ntdll.dll");
1436+
typedef LONG(WINAPI * tRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
1437+
tRtlGetVersion f_RtlGetVersion = (tRtlGetVersion)GetProcAddress(h_NtDll, "RtlGetVersion");
1438+
if (f_RtlGetVersion)
1439+
{
1440+
RTL_OSVERSIONINFOEXW osInfo;
1441+
osInfo.dwOSVersionInfoSize = sizeof(osInfo);
1442+
f_RtlGetVersion(&osInfo);
1443+
CHAR servicePack[128] = {'\0'};
1444+
if (wcslen(osInfo.szCSDVersion) > 0)
1445+
{
1446+
_snprintf_s(servicePack, sizeof(servicePack), _countof(servicePack), "(%s) ",
1447+
osInfo.szCSDVersion);
1448+
}
1449+
_snprintf_s(buffer, sizeof(buffer), maxLen, "OS-Version: %d.%d.%d %s0x%x-0x%x\n",
1450+
osInfo.dwMajorVersion, osInfo.dwMinorVersion, osInfo.dwBuildNumber, servicePack,
1451+
osInfo.wSuiteMask, osInfo.wProductType);
1452+
buffer[_countof(buffer) - 1] = '\0';
1453+
OnOutput(buffer);
1454+
}
1455+
#else
14311456
#if _MSC_VER <= 1200
14321457
OSVERSIONINFOA ver;
1433-
ZeroMemory(&ver, sizeof(OSVERSIONINFOA));
1458+
#else
1459+
OSVERSIONINFOEXA ver;
1460+
#endif
1461+
ZeroMemory(&ver, sizeof(ver));
14341462
ver.dwOSVersionInfoSize = sizeof(ver);
14351463
if (GetVersionExA(&ver) != FALSE)
14361464
{
1437-
_snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s)\n", ver.dwMajorVersion,
1465+
#if _MSC_VER <= 1200
1466+
_snprintf_s(buffer, sizeof(buffer), maxLen, "OS-Version: %d.%d.%d (%s)\n", ver.dwMajorVersion,
14381467
ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion);
1439-
buffer[STACKWALK_MAX_NAMELEN - 1] = 0;
1440-
OnOutput(buffer);
1441-
}
14421468
#else
1443-
OSVERSIONINFOEXA ver;
1444-
ZeroMemory(&ver, sizeof(OSVERSIONINFOEXA));
1445-
ver.dwOSVersionInfoSize = sizeof(ver);
1446-
#if _MSC_VER >= 1900
1447-
#pragma warning(push)
1448-
#pragma warning(disable : 4996)
1469+
_snprintf_s(buffer, sizeof(buffer), maxLen, "OS-Version: %d.%d.%d (%s) 0x%x-0x%x\n",
1470+
ver.dwMajorVersion, ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion,
1471+
ver.wSuiteMask, ver.wProductType);
14491472
#endif
1450-
if (GetVersionExA((OSVERSIONINFOA*)&ver) != FALSE)
1451-
{
1452-
_snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s) 0x%x-0x%x\n", ver.dwMajorVersion,
1453-
ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion, ver.wSuiteMask,
1454-
ver.wProductType);
1455-
buffer[STACKWALK_MAX_NAMELEN - 1] = 0;
1473+
buffer[_countof(buffer) - 1] = '\0';
14561474
OnOutput(buffer);
14571475
}
1458-
#if _MSC_VER >= 1900
1459-
#pragma warning(pop)
1460-
#endif
14611476
#endif
14621477
}
14631478

0 commit comments

Comments
 (0)