Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 244 | chris | 1 | #ifndef __SEHCATHER_H__ |
| 2 | #define __SEHCATHER_H__ |
||
| 3 | |||
| 4 | #include "Common.h" |
||
| 5 | #include "HTTPTransfer.h" |
||
| 6 | #include <imagehlp.h> |
||
| 7 | |||
| 8 | namespace Sexy |
||
| 9 | { |
||
| 10 | |||
| 11 | class SexyAppBase; |
||
| 12 | |||
| 13 | typedef BOOL (__stdcall * SYMINITIALIZEPROC)(HANDLE, LPSTR, BOOL); |
||
| 14 | |||
| 15 | typedef DWORD (__stdcall *SYMSETOPTIONSPROC)(DWORD); |
||
| 16 | |||
| 17 | typedef BOOL (__stdcall *SYMCLEANUPPROC)(HANDLE); |
||
| 18 | |||
| 19 | typedef LPCSTR (__stdcall *UNDECORATESYMBOLNAMEPROC)(LPCSTR, LPSTR, DWORD, DWORD); |
||
| 20 | |||
| 21 | typedef BOOL (__stdcall * STACKWALKPROC) |
||
| 22 | ( DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, |
||
| 23 | PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE, |
||
| 24 | PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); |
||
| 25 | |||
| 26 | typedef LPVOID (__stdcall *SYMFUNCTIONTABLEACCESSPROC)(HANDLE, DWORD); |
||
| 27 | |||
| 28 | typedef DWORD (__stdcall *SYMGETMODULEBASEPROC)(HANDLE, DWORD); |
||
| 29 | |||
| 30 | typedef BOOL (__stdcall *SYMGETSYMFROMADDRPROC)(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL); |
||
| 31 | |||
| 32 | class SEHCatcher |
||
| 33 | { |
||
| 34 | public: |
||
| 35 | static SexyAppBase* mApp; |
||
| 36 | static HFONT mDialogFont; |
||
| 37 | static HFONT mBoldFont; |
||
| 38 | static HWND mYesButtonWindow; |
||
| 39 | static HWND mNoButtonWindow; |
||
| 40 | static HWND mDebugButtonWindow; |
||
| 41 | static HWND mEditWindow; |
||
| 42 | static bool mHasDemoFile; |
||
| 43 | static bool mDebugError; |
||
| 44 | static std::string mErrorTitle; |
||
| 45 | static std::string mErrorText; |
||
| 46 | static std::string mUserText; |
||
| 47 | static std::string mUploadFileName; |
||
| 48 | static std::wstring mCrashMessage; |
||
| 49 | static std::string mSubmitHost; |
||
| 50 | static std::wstring mSubmitErrorMessage; |
||
| 51 | static std::wstring mSubmitMessage; |
||
| 52 | static HMODULE mImageHelpLib; |
||
| 53 | static SYMINITIALIZEPROC mSymInitialize; |
||
| 54 | static SYMSETOPTIONSPROC mSymSetOptions; |
||
| 55 | static UNDECORATESYMBOLNAMEPROC mUnDecorateSymbolName; |
||
| 56 | static SYMCLEANUPPROC mSymCleanup; |
||
| 57 | static STACKWALKPROC mStackWalk; |
||
| 58 | static SYMFUNCTIONTABLEACCESSPROC mSymFunctionTableAccess; |
||
| 59 | static SYMGETMODULEBASEPROC mSymGetModuleBase; |
||
| 60 | static SYMGETSYMFROMADDRPROC mSymGetSymFromAddr; |
||
| 61 | static HTTPTransfer mSubmitReportTransfer; |
||
| 62 | static bool mExiting; |
||
| 63 | static bool mShowUI; |
||
| 64 | static bool mAllowSubmit; |
||
| 65 | |||
| 66 | protected: |
||
| 67 | static LPTOP_LEVEL_EXCEPTION_FILTER mPreviousFilter; |
||
| 68 | |||
| 69 | public: |
||
| 70 | static void SubmitReportThread(void *theArg); |
||
| 71 | |||
| 72 | static LRESULT CALLBACK SEHWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
||
| 73 | static LRESULT CALLBACK SubmitInfoWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
||
| 74 | static long __stdcall UnhandledExceptionFilter(LPEXCEPTION_POINTERS lpExceptPtr); |
||
| 75 | static void DoHandleDebugEvent(LPEXCEPTION_POINTERS lpEP); |
||
| 76 | static bool GetLogicalAddress(void* addr, char* szModule, DWORD len, DWORD& section, DWORD& offset); |
||
| 77 | static std::string GetFilename(const std::string& thePath); |
||
| 78 | static void WriteToFile(const std::string& theErrorText); |
||
| 79 | static void ShowSubmitInfoDialog(); |
||
| 80 | static void ShowErrorDialog(const std::string& theErrorTitle, const std::string& theErrorText); |
||
| 81 | static bool LoadImageHelp(); |
||
| 82 | static void UnloadImageHelp(); |
||
| 83 | static std::string IntelWalk(PCONTEXT theContext, int theSkipCount); |
||
| 84 | static std::string ImageHelpWalk(PCONTEXT theContext, int theSkipCount); |
||
| 85 | static std::string GetSysInfo(); |
||
| 86 | static void GetSymbolsFromMapFile(std::string &theDebugDump); |
||
| 87 | |||
| 88 | public: |
||
| 89 | SEHCatcher(); |
||
| 90 | ~SEHCatcher(); |
||
| 91 | }; |
||
| 92 | |||
| 93 | extern SEHCatcher gSEHCatcher; |
||
| 94 | |||
| 95 | } |
||
| 96 | |||
| 97 | #endif |