summaryrefslogtreecommitdiff
path: root/osframework/source/SexyAppFramework/SEHCatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'osframework/source/SexyAppFramework/SEHCatcher.h')
-rw-r--r--osframework/source/SexyAppFramework/SEHCatcher.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/osframework/source/SexyAppFramework/SEHCatcher.h b/osframework/source/SexyAppFramework/SEHCatcher.h
new file mode 100644
index 0000000..111e9da
--- /dev/null
+++ b/osframework/source/SexyAppFramework/SEHCatcher.h
@@ -0,0 +1,97 @@
+#ifndef __SEHCATHER_H__
+#define __SEHCATHER_H__
+
+#include "Common.h"
+#include "HTTPTransfer.h"
+#include <imagehlp.h>
+
+namespace Sexy
+{
+
+class SexyAppBase;
+
+typedef BOOL (__stdcall * SYMINITIALIZEPROC)(HANDLE, LPSTR, BOOL);
+
+typedef DWORD (__stdcall *SYMSETOPTIONSPROC)(DWORD);
+
+typedef BOOL (__stdcall *SYMCLEANUPPROC)(HANDLE);
+
+typedef LPCSTR (__stdcall *UNDECORATESYMBOLNAMEPROC)(LPCSTR, LPSTR, DWORD, DWORD);
+
+typedef BOOL (__stdcall * STACKWALKPROC)
+ ( DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID,
+ PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE,
+ PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
+
+typedef LPVOID (__stdcall *SYMFUNCTIONTABLEACCESSPROC)(HANDLE, DWORD);
+
+typedef DWORD (__stdcall *SYMGETMODULEBASEPROC)(HANDLE, DWORD);
+
+typedef BOOL (__stdcall *SYMGETSYMFROMADDRPROC)(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
+
+class SEHCatcher
+{
+public:
+ static SexyAppBase* mApp;
+ static HFONT mDialogFont;
+ static HFONT mBoldFont;
+ static HWND mYesButtonWindow;
+ static HWND mNoButtonWindow;
+ static HWND mDebugButtonWindow;
+ static HWND mEditWindow;
+ static bool mHasDemoFile;
+ static bool mDebugError;
+ static std::string mErrorTitle;
+ static std::string mErrorText;
+ static std::string mUserText;
+ static std::string mUploadFileName;
+ static std::wstring mCrashMessage;
+ static std::string mSubmitHost;
+ static std::wstring mSubmitErrorMessage;
+ static std::wstring mSubmitMessage;
+ static HMODULE mImageHelpLib;
+ static SYMINITIALIZEPROC mSymInitialize;
+ static SYMSETOPTIONSPROC mSymSetOptions;
+ static UNDECORATESYMBOLNAMEPROC mUnDecorateSymbolName;
+ static SYMCLEANUPPROC mSymCleanup;
+ static STACKWALKPROC mStackWalk;
+ static SYMFUNCTIONTABLEACCESSPROC mSymFunctionTableAccess;
+ static SYMGETMODULEBASEPROC mSymGetModuleBase;
+ static SYMGETSYMFROMADDRPROC mSymGetSymFromAddr;
+ static HTTPTransfer mSubmitReportTransfer;
+ static bool mExiting;
+ static bool mShowUI;
+ static bool mAllowSubmit;
+
+protected:
+ static LPTOP_LEVEL_EXCEPTION_FILTER mPreviousFilter;
+
+public:
+ static void SubmitReportThread(void *theArg);
+
+ static LRESULT CALLBACK SEHWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ static LRESULT CALLBACK SubmitInfoWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ static long __stdcall UnhandledExceptionFilter(LPEXCEPTION_POINTERS lpExceptPtr);
+ static void DoHandleDebugEvent(LPEXCEPTION_POINTERS lpEP);
+ static bool GetLogicalAddress(void* addr, char* szModule, DWORD len, DWORD& section, DWORD& offset);
+ static std::string GetFilename(const std::string& thePath);
+ static void WriteToFile(const std::string& theErrorText);
+ static void ShowSubmitInfoDialog();
+ static void ShowErrorDialog(const std::string& theErrorTitle, const std::string& theErrorText);
+ static bool LoadImageHelp();
+ static void UnloadImageHelp();
+ static std::string IntelWalk(PCONTEXT theContext, int theSkipCount);
+ static std::string ImageHelpWalk(PCONTEXT theContext, int theSkipCount);
+ static std::string GetSysInfo();
+ static void GetSymbolsFromMapFile(std::string &theDebugDump);
+
+public:
+ SEHCatcher();
+ ~SEHCatcher();
+};
+
+extern SEHCatcher gSEHCatcher;
+
+}
+
+#endif \ No newline at end of file