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 |