| 1419 | } |
| 1420 | |
| 1421 | void StackWalker::OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName) |
| 1422 | { |
| 1423 | CHAR buffer[STACKWALK_MAX_NAMELEN]; |
| 1424 | size_t maxLen = STACKWALK_MAX_NAMELEN; |
| 1425 | #if _MSC_VER >= 1400 |
| 1426 | maxLen = _TRUNCATE; |
| 1427 | #endif |
| 1428 | _snprintf_s(buffer, maxLen, "SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n", |
| 1429 | szSearchPath, symOptions, szUserName); |
| 1430 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; |
| 1431 | OnOutput(buffer); |
| 1432 | // Also display the OS-version |
| 1433 | #if _MSC_VER <= 1200 |
| 1434 | OSVERSIONINFOA ver; |
| 1435 | ZeroMemory(&ver, sizeof(OSVERSIONINFOA)); |
| 1436 | ver.dwOSVersionInfoSize = sizeof(ver); |
| 1437 | if (GetVersionExA(&ver) != FALSE) |
| 1438 | { |
| 1439 | _snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s)\n", ver.dwMajorVersion, |
| 1440 | ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion); |
| 1441 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; |
| 1442 | OnOutput(buffer); |
| 1443 | } |
| 1444 | #else |
| 1445 | OSVERSIONINFOEXA ver; |
| 1446 | ZeroMemory(&ver, sizeof(OSVERSIONINFOEXA)); |
| 1447 | ver.dwOSVersionInfoSize = sizeof(ver); |
| 1448 | #if _MSC_VER >= 1900 |
| 1449 | #pragma warning(push) |
| 1450 | #pragma warning(disable : 4996) |
| 1451 | #endif |
| 1452 | if (GetVersionExA((OSVERSIONINFOA*)&ver) != FALSE) |
| 1453 | { |
| 1454 | _snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s) 0x%x-0x%x\n", ver.dwMajorVersion, |
| 1455 | ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion, ver.wSuiteMask, |
| 1456 | ver.wProductType); |
| 1457 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; |
| 1458 | OnOutput(buffer); |
| 1459 | } |
| 1460 | #if _MSC_VER >= 1900 |
| 1461 | #pragma warning(pop) |
| 1462 | #endif |
| 1463 | #endif |
| 1464 | } |
| 1465 | |
| 1466 | void StackWalker::OnOutput(LPCSTR buffer) |
| 1467 | { |