| OLD | NEW |
| (Empty) |
| 1 // Copyright 2003-2009 Google Inc. | |
| 2 // | |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
| 4 // you may not use this file except in compliance with the License. | |
| 5 // You may obtain a copy of the License at | |
| 6 // | |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | |
| 8 // | |
| 9 // Unless required by applicable law or agreed to in writing, software | |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 12 // See the License for the specific language governing permissions and | |
| 13 // limitations under the License. | |
| 14 // ======================================================================== | |
| 15 // | |
| 16 // dynamic loading of dbghelp dll functions | |
| 17 // | |
| 18 | |
| 19 #ifndef OMAHA_COMMON_DYNAMIC_LINK_DBGHELP_H_ | |
| 20 #define OMAHA_COMMON_DYNAMIC_LINK_DBGHELP_H_ | |
| 21 | |
| 22 #include <dbghelp.h> | |
| 23 | |
| 24 namespace omaha { | |
| 25 | |
| 26 class Dbghelp { | |
| 27 public: | |
| 28 static BOOL (CALLBACK *SymInitialize)(HANDLE, PCSTR, BOOL); | |
| 29 static BOOL (CALLBACK *SymCleanup)(HANDLE); | |
| 30 static BOOL (CALLBACK *SymEnumSymbols)(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATES
YMBOLS_CALLBACK, PVOID); | |
| 31 static DWORD (CALLBACK *SymSetOptions)(DWORD); | |
| 32 static BOOL (CALLBACK *SymSetContext)(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP
_CONTEXT); | |
| 33 static BOOL (CALLBACK *SymGetLineFromAddr)(HANDLE, DWORD, PDWORD, PIMAGEHLP_LI
NE); | |
| 34 static BOOL (CALLBACK *SymGetLineFromAddr64)(HANDLE, DWORD64, PDWORD, PIMAGEHL
P_LINE64); | |
| 35 static BOOL (CALLBACK *SymFromAddr)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO); | |
| 36 static BOOL (CALLBACK *StackWalk64)(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVO
ID, PREAD_PROCESS_MEMORY_ROUTINE64, | |
| 37 PFUNCTION_TABLE_ACCESS_ROUTINE64, PGET_MODULE_BASE_ROUTINE64, PTRANSLATE_A
DDRESS_ROUTINE64); | |
| 38 static BOOL (CALLBACK *StackWalk)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID,
PREAD_PROCESS_MEMORY_ROUTINE, | |
| 39 PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRE
SS_ROUTINE); | |
| 40 static PVOID (CALLBACK *SymFunctionTableAccess64)(HANDLE, DWORD64); | |
| 41 static PVOID (CALLBACK *SymFunctionTableAccess)(HANDLE, DWORD); | |
| 42 static DWORD64 (CALLBACK *SymGetModuleBase64)(HANDLE, DWORD64); | |
| 43 static DWORD64 (CALLBACK *SymGetModuleBase)(HANDLE, DWORD); | |
| 44 static BOOL (CALLBACK *SymGetTypeInfo)(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL
_TYPE_INFO, PVOID); | |
| 45 static BOOL (CALLBACK *MiniDumpWriteDump)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE
, PMINIDUMP_EXCEPTION_INFORMATION, | |
| 46 PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION); | |
| 47 | |
| 48 static HRESULT Load(); | |
| 49 static void Unload(); | |
| 50 static bool Loaded() { return (loaded_state_ == LOAD_SUCCEEDED && library_ !=
NULL); } | |
| 51 | |
| 52 private: | |
| 53 // If we tried to load and failed, do not try again. | |
| 54 static enum LoadedState {NOT_LOADED, LOAD_FAILED, LOAD_SUCCEEDED}; | |
| 55 | |
| 56 static LoadedState loaded_state_; | |
| 57 static HINSTANCE library_; | |
| 58 | |
| 59 static void Clear(); | |
| 60 | |
| 61 // wrapper around GetProcAddress() | |
| 62 template <typename T> | |
| 63 static bool GPA(const char * function_name, T& function_pointer); | |
| 64 | |
| 65 DISALLOW_EVIL_CONSTRUCTORS(Dbghelp); | |
| 66 }; | |
| 67 | |
| 68 } // namespace omaha | |
| 69 | |
| 70 #endif // OMAHA_COMMON_DYNAMIC_LINK_DBGHELP_H_ | |
| OLD | NEW |