336 static LONG WINAPI WheatyUnhandledExceptionFilter(
337 PEXCEPTION_POINTERS pExceptionInfo);
339 LONG UnhandledExceptionFilterImpl(PEXCEPTION_POINTERS pExceptionInfo)
noexcept;
341 static void __cdecl WheatyCrtHandler(
wchar_t const* expression,
wchar_t const* function,
wchar_t const* file,
unsigned int line, uintptr_t pReserved);
343 void printTracesForAllThreads(
bool bWriteVariables);
346 void GenerateExceptionReport(PEXCEPTION_POINTERS pExceptionInfo);
347 void PrintSystemInfo();
348 BOOL _GetWindowsVersion(TCHAR* szVersion, DWORD cntMax);
349 static BOOL _GetWindowsVersionFromWMI(TCHAR* szVersion, DWORD cntMax)
noexcept;
350 static BOOL _GetProcessorName(TCHAR* sProcessorName, DWORD maxcount);
353 static LPCTSTR GetExceptionString(DWORD dwCode);
354 static BOOL GetLogicalAddress(PVOID addr, PTSTR szModule, DWORD len,
355 DWORD& section, DWORD_PTR& offset);
357 void WriteStackDetails(PCONTEXT pContext,
bool bWriteVariables, HANDLE pThreadHandle);
359 static BOOL GetSymbolFromAddress(HANDLE hProcess, DWORD64 Address, ULONG InlineContext, PDWORD64 Displacement, PSYMBOL_INFO Symbol);
360 static BOOL GetSymbolLineFromAddress(HANDLE hProcess, DWORD64 qwAddr, ULONG InlineContext, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line64);
369 static BOOL CALLBACK EnumerateSymbolsCallback(PSYMBOL_INFO, ULONG, PVOID);
373 void DumpTypeIndex(DWORD64, DWORD, DWORD_PTR,
bool &,
char const*,
char const*,
bool,
bool);
375 static void FormatOutputValue(
char * pszCurrBuffer,
BasicType basicType, DWORD64 length, PVOID pAddress,
size_t bufferSize,
size_t countOverride = 0);
377 BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase)
const;
378 static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address);
380 int Log(
const TCHAR * format, ...);
382 bool StoreSymbol(DWORD type , DWORD_PTR offset);
389 static constexpr SIZE_T m_tempPathBufferChars = 0x8000;
399 typedef NTSTATUS(NTAPI* pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation);
403 void PopSymbolDetail();
404 void PrintSymbolDetail();
WheatyExceptionReport * report