| 1498 | } |
| 1499 | |
| 1500 | void StackWalker::OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName) |
| 1501 | { |
| 1502 | CHAR buffer[STACKWALK_MAX_NAMELEN]; |
| 1503 | size_t maxLen = STACKWALK_MAX_NAMELEN; |
| 1504 | #if _MSC_VER >= 1400 |
| 1505 | maxLen = _TRUNCATE; |
| 1506 | #endif |
| 1507 | _snprintf_s(buffer, maxLen, "SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n", |
| 1508 | szSearchPath, symOptions, szUserName); |
| 1509 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; |
| 1510 | OnOutput(buffer); |
| 1511 | // Also display the OS-version |
| 1512 | #if _MSC_VER <= 1200 |
| 1513 | OSVERSIONINFOA ver; |
| 1514 | ZeroMemory(&ver, sizeof(OSVERSIONINFOA)); |
| 1515 | ver.dwOSVersionInfoSize = sizeof(ver); |
| 1516 | if (GetVersionExA(&ver) != FALSE) |
| 1517 | { |
| 1518 | _snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s)\n", ver.dwMajorVersion, |
| 1519 | ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion); |
| 1520 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; |
| 1521 | OnOutput(buffer); |
| 1522 | } |
| 1523 | #else |
| 1524 | OSVERSIONINFOEXA ver; |
| 1525 | ZeroMemory(&ver, sizeof(OSVERSIONINFOEXA)); |
| 1526 | ver.dwOSVersionInfoSize = sizeof(ver); |
| 1527 | #if _MSC_VER >= 1900 |
| 1528 | #pragma warning(push) |
| 1529 | #pragma warning(disable : 4996) |
| 1530 | #endif |
| 1531 | if (GetVersionExA((OSVERSIONINFOA*)&ver) != FALSE) |
| 1532 | { |
| 1533 | _snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s) 0x%x-0x%x\n", ver.dwMajorVersion, |
| 1534 | ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion, ver.wSuiteMask, |
| 1535 | ver.wProductType); |
| 1536 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; |
| 1537 | OnOutput(buffer); |
| 1538 | } |
| 1539 | #if _MSC_VER >= 1900 |
| 1540 | #pragma warning(pop) |
| 1541 | #endif |
| 1542 | #endif |
| 1543 | } |
| 1544 | |
| 1545 | void StackWalker::OnOutput(LPCSTR buffer) |
| 1546 | { |