csutil/win32/DbgHelpAPI.h
00001 /* 00002 DbgHelp API stuff. 00003 Unfortunately, dbghelp.h isn't included in MinGW. So all that's needed goes here. 00004 */ 00005 00006 #ifndef __CSUTIL_DEBGHELPAPI_H__ 00007 #define __CSUTIL_DEBGHELPAPI_H__ 00008 00009 enum ADDRESS_MODE 00010 { 00011 AddrMode1616, 00012 AddrMode1632, 00013 AddrModeReal, 00014 AddrModeFlat 00015 }; 00016 00017 struct ADDRESS64 00018 { 00019 uint64 Offset; 00020 WORD Segment; 00021 ADDRESS_MODE Mode; 00022 }; 00023 typedef ADDRESS64* LPADDRESS64; 00024 00025 struct KDHELP64 00026 { 00027 uint64 Thread; 00028 DWORD ThCallbackStack; 00029 DWORD ThCallbackBStore; 00030 DWORD NextCallback; 00031 DWORD FramePointer; 00032 uint64 KiCallUserMode; 00033 uint64 KeUserCallbackDispatcher; 00034 uint64 SystemRangeStart; 00035 uint64 Reserved[8]; 00036 }; 00037 typedef KDHELP64* PKDHELP64; 00038 00039 struct STACKFRAME64 00040 { 00041 ADDRESS64 AddrPC; 00042 ADDRESS64 AddrReturn; 00043 ADDRESS64 AddrFrame; 00044 ADDRESS64 AddrStack; 00045 ADDRESS64 AddrBStore; 00046 PVOID FuncTableEntry; 00047 uint64 Params[4]; 00048 BOOL Far; 00049 BOOL Virtual; 00050 uint64 Reserved[3]; 00051 KDHELP64 KdHelp; 00052 }; 00053 typedef STACKFRAME64* LPSTACKFRAME64; 00054 00055 typedef BOOL (WINAPI* PREAD_PROCESS_MEMORY_ROUTINE64) (HANDLE hProcess, 00056 uint64 qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead); 00057 typedef PVOID (WINAPI* PFUNCTION_TABLE_ACCESS_ROUTINE64) (HANDLE hProcess, 00058 uint64 AddrBase); 00059 typedef uint64 (WINAPI* PGET_MODULE_BASE_ROUTINE64) (HANDLE hProcess, 00060 uint64 Address); 00061 typedef uint64 (WINAPI* PTRANSLATE_ADDRESS_ROUTINE64) (HANDLE hProcess, 00062 HANDLE hThread, LPADDRESS64 lpaddr); 00063 00064 struct SYMBOL_INFO 00065 { 00066 ULONG SizeOfStruct; 00067 ULONG TypeIndex; 00068 uint64 Reserved[2]; 00069 ULONG Reserved2; 00070 ULONG Size; 00071 uint64 ModBase; 00072 ULONG Flags; 00073 uint64 Value; 00074 uint64 Address; 00075 ULONG Register; 00076 ULONG Scope; 00077 ULONG Tag; 00078 ULONG NameLen; 00079 ULONG MaxNameLen; 00080 CHAR Name[1]; 00081 }; 00082 typedef SYMBOL_INFO* PSYMBOL_INFO; 00083 00084 struct SYMBOL_INFOW 00085 { 00086 ULONG SizeOfStruct; 00087 ULONG TypeIndex; 00088 uint64 Reserved[2]; 00089 ULONG Reserved2; 00090 ULONG Size; 00091 uint64 ModBase; 00092 ULONG Flags; 00093 uint64 Value; 00094 uint64 Address; 00095 ULONG Register; 00096 ULONG Scope; 00097 ULONG Tag; 00098 ULONG NameLen; 00099 ULONG MaxNameLen; 00100 WCHAR Name[1]; 00101 }; 00102 typedef SYMBOL_INFOW* PSYMBOL_INFOW; 00103 00104 #define SYMFLAG_PARAMETER 0x00000040 00105 00106 #define SYMOPT_UNDNAME 0x00000002 00107 #define SYMOPT_DEFERRED_LOADS 0x00000004 00108 #define SYMOPT_LOAD_LINES 0x00000010 00109 #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 00110 00111 enum SYM_TYPE 00112 { 00113 SymNone = 0, 00114 SymCoff, 00115 SymCv, 00116 SymPdb, 00117 SymExport, 00118 SymDeferred, 00119 SymSym, 00120 SymDia, 00121 SymVirtual, 00122 NumSymTypes 00123 }; 00124 00125 struct IMAGEHLP_MODULE64 00126 { 00127 DWORD SizeOfStruct; 00128 uint64 BaseOfImage; 00129 DWORD ImageSize; 00130 DWORD TimeDateStamp; 00131 DWORD CheckSum; 00132 DWORD NumSyms; 00133 SYM_TYPE SymType; 00134 CHAR ModuleName[32]; 00135 CHAR ImageName[256]; 00136 CHAR LoadedImageName[256]; 00137 /* 00138 The following fields are only supported on newer versions of dbghelp.dll, 00139 but the versions shipped with W2k resp. WXP lack them. 00140 */ 00141 CHAR LoadedPdbName[256]; 00142 DWORD CVSig; 00143 CHAR CVData[MAX_PATH*3]; 00144 DWORD PdbSig; 00145 GUID PdbSig70; 00146 DWORD PdbAge; 00147 BOOL PdbUnmatched; 00148 BOOL DbgUnmatched; 00149 BOOL LineNumbers; 00150 BOOL GlobalSymbols; 00151 BOOL TypeInfo; 00152 }; 00153 typedef IMAGEHLP_MODULE64* PIMAGEHLP_MODULE64; 00154 00155 struct IMAGEHLP_MODULEW64 00156 { 00157 DWORD SizeOfStruct; 00158 uint64 BaseOfImage; 00159 DWORD ImageSize; 00160 DWORD TimeDateStamp; 00161 DWORD CheckSum; 00162 DWORD NumSyms; 00163 SYM_TYPE SymType; 00164 WCHAR ModuleName[32]; 00165 WCHAR ImageName[256]; 00166 WCHAR LoadedImageName[256]; 00167 WCHAR LoadedPdbName[256]; 00168 DWORD CVSig; 00169 WCHAR CVData[MAX_PATH*3]; 00170 DWORD PdbSig; 00171 GUID PdbSig70; 00172 DWORD PdbAge; 00173 BOOL PdbUnmatched; 00174 BOOL DbgUnmatched; 00175 BOOL LineNumbers; 00176 BOOL GlobalSymbols; 00177 BOOL TypeInfo; 00178 }; 00179 typedef IMAGEHLP_MODULEW64* PIMAGEHLP_MODULEW64; 00180 00181 struct IMAGEHLP_LINE64 00182 { 00183 DWORD SizeOfStruct; 00184 PVOID Key; 00185 DWORD LineNumber; 00186 PCHAR FileName; 00187 uint64 Address; 00188 }; 00189 typedef IMAGEHLP_LINE64* PIMAGEHLP_LINE64; 00190 00191 struct IMAGEHLP_LINEW64 00192 { 00193 DWORD SizeOfStruct; 00194 PVOID Key; 00195 DWORD LineNumber; 00196 PWCHAR FileName; 00197 uint64 Address; 00198 }; 00199 typedef IMAGEHLP_LINEW64* PIMAGEHLP_LINEW64; 00200 00201 typedef BOOL (CALLBACK* PSYM_ENUMERATESYMBOLS_CALLBACK) (PSYMBOL_INFO pSymInfo, 00202 ULONG SymbolSize, PVOID UserContext); 00203 typedef BOOL (CALLBACK* PSYM_ENUMERATESYMBOLS_CALLBACKW) (PSYMBOL_INFOW pSymInfo, 00204 ULONG SymbolSize, PVOID UserContext); 00205 typedef BOOL (CALLBACK* PSYM_ENUMMODULES_CALLBACK64) (PSTR ModuleName, 00206 uint64 BaseOfDll, PVOID UserContext); 00207 typedef BOOL (CALLBACK* PSYM_ENUMMODULES_CALLBACKW64) (PWSTR ModuleName, 00208 uint64 BaseOfDll, PVOID UserContext); 00209 00210 struct IMAGEHLP_STACK_FRAME 00211 { 00212 uint64 InstructionOffset; 00213 uint64 ReturnOffset; 00214 uint64 FrameOffset; 00215 uint64 StackOffset; 00216 uint64 BackingStoreOffset; 00217 uint64 FuncTableEntry; 00218 uint64 Params[4]; 00219 uint64 Reserved[5]; 00220 BOOL Virtual; 00221 ULONG Reserved2; 00222 }; 00223 typedef IMAGEHLP_STACK_FRAME* PIMAGEHLP_STACK_FRAME; 00224 typedef void* PIMAGEHLP_CONTEXT; 00225 00226 struct MINIDUMP_EXCEPTION_INFORMATION 00227 { 00228 DWORD ThreadId; 00229 PEXCEPTION_POINTERS ExceptionPointers; 00230 BOOL ClientPointers; 00231 }; 00232 typedef MINIDUMP_EXCEPTION_INFORMATION* PMINIDUMP_EXCEPTION_INFORMATION; 00233 00234 struct MINIDUMP_USER_STREAM 00235 { 00236 ULONG32 Type; 00237 ULONG BufferSize; 00238 PVOID Buffer; 00239 }; 00240 typedef MINIDUMP_USER_STREAM* PMINIDUMP_USER_STREAM; 00241 00242 struct MINIDUMP_USER_STREAM_INFORMATION 00243 { 00244 ULONG UserStreamCount; 00245 PMINIDUMP_USER_STREAM UserStreamArray; 00246 }; 00247 typedef MINIDUMP_USER_STREAM_INFORMATION* PMINIDUMP_USER_STREAM_INFORMATION; 00248 00249 enum MINIDUMP_CALLBACK_TYPE 00250 { 00251 ModuleCallback, 00252 ThreadCallback, 00253 ThreadExCallback, 00254 IncludeThreadCallback, 00255 IncludeModuleCallback 00256 }; 00257 00258 struct MINIDUMP_THREAD_CALLBACK 00259 { 00260 ULONG ThreadId; 00261 HANDLE ThreadHandle; 00262 CONTEXT Context; 00263 ULONG SizeOfContext; 00264 ULONG64 StackBase; 00265 ULONG64 StackEnd; 00266 }; 00267 typedef MINIDUMP_THREAD_CALLBACK* PMINIDUMP_THREAD_CALLBACK; 00268 00269 struct MINIDUMP_THREAD_EX_CALLBACK 00270 { 00271 ULONG ThreadId; 00272 HANDLE ThreadHandle; 00273 CONTEXT Context; 00274 ULONG SizeOfContext; 00275 ULONG64 StackBase; 00276 ULONG64 StackEnd; 00277 ULONG64 BackingStoreBase; 00278 ULONG64 BackingStoreEnd; 00279 }; 00280 typedef MINIDUMP_THREAD_EX_CALLBACK* PMINIDUMP_THREAD_EX_CALLBACK; 00281 00282 #include <winver.h> 00283 #include "sanity.inc" 00284 00285 struct MINIDUMP_MODULE_CALLBACK 00286 { 00287 PWCHAR FullPath; 00288 ULONG64 BaseOfImage; 00289 ULONG SizeOfImage; 00290 ULONG CheckSum; 00291 ULONG TimeDateStamp; 00292 VS_FIXEDFILEINFO VersionInfo; 00293 PVOID CvRecord; 00294 ULONG SizeOfCvRecord; 00295 PVOID MiscRecord; 00296 ULONG SizeOfMiscRecord; 00297 }; 00298 typedef MINIDUMP_MODULE_CALLBACK* PMINIDUMP_MODULE_CALLBACK; 00299 00300 struct MINIDUMP_INCLUDE_THREAD_CALLBACK 00301 { 00302 ULONG ThreadId; 00303 }; 00304 typedef MINIDUMP_INCLUDE_THREAD_CALLBACK* PMINIDUMP_INCLUDE_THREAD_CALLBACK; 00305 00306 struct MINIDUMP_INCLUDE_MODULE_CALLBACK 00307 { 00308 ULONG64 BaseOfImage; 00309 }; 00310 typedef MINIDUMP_INCLUDE_MODULE_CALLBACK* PMINIDUMP_INCLUDE_MODULE_CALLBACK; 00311 00312 00313 struct MINIDUMP_CALLBACK_INPUT 00314 { 00315 ULONG ProcessId; 00316 HANDLE ProcessHandle; 00317 ULONG CallbackType; 00318 union 00319 { 00320 MINIDUMP_THREAD_CALLBACK Thread; 00321 MINIDUMP_THREAD_EX_CALLBACK ThreadEx; 00322 MINIDUMP_MODULE_CALLBACK Module; 00323 MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; 00324 MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; 00325 }; 00326 }; 00327 typedef MINIDUMP_CALLBACK_INPUT* PMINIDUMP_CALLBACK_INPUT; 00328 00329 enum MODULE_WRITE_FLAGS 00330 { 00331 ModuleWriteModule = 0x0001, 00332 ModuleWriteDataSeg = 0x0002, 00333 ModuleWriteMiscRecord = 0x0004, 00334 ModuleWriteCvRecord = 0x0008, 00335 ModuleReferencedByMemory = 0x0010 00336 }; 00337 00338 enum THREAD_WRITE_FLAGS 00339 { 00340 ThreadWriteThread = 0x0001, 00341 ThreadWriteStack = 0x0002, 00342 ThreadWriteContext = 0x0004, 00343 ThreadWriteBackingStore = 0x0008, 00344 ThreadWriteInstructionWindow = 0x0010, 00345 ThreadWriteThreadData = 0x0020 00346 }; 00347 00348 struct MINIDUMP_CALLBACK_OUTPUT 00349 { 00350 union 00351 { 00352 ULONG ModuleWriteFlags; 00353 ULONG ThreadWriteFlags; 00354 }; 00355 }; 00356 typedef MINIDUMP_CALLBACK_OUTPUT* PMINIDUMP_CALLBACK_OUTPUT; 00357 00358 00359 typedef BOOL (CALLBACK* MINIDUMP_CALLBACK_ROUTINE) (PVOID CallbackParam, 00360 const PMINIDUMP_CALLBACK_INPUT CallbackInput, 00361 PMINIDUMP_CALLBACK_OUTPUT CallbackOutput); 00362 00363 struct MINIDUMP_CALLBACK_INFORMATION 00364 { 00365 MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; 00366 PVOID CallbackParam; 00367 }; 00368 typedef MINIDUMP_CALLBACK_INFORMATION* PMINIDUMP_CALLBACK_INFORMATION; 00369 00370 enum MINIDUMP_TYPE 00371 { 00372 MiniDumpNormal = 0x0000, 00373 MiniDumpWithDataSegs = 0x0001, 00374 MiniDumpWithFullMemory = 0x0002, 00375 MiniDumpWithHandleData = 0x0004, 00376 MiniDumpFilterMemory = 0x0008, 00377 MiniDumpScanMemory = 0x0010, 00378 MiniDumpWithUnloadedModules = 0x0020, 00379 MiniDumpWithIndirectlyReferencedMemory = 0x0040, 00380 MiniDumpFilterModulePaths = 0x0080, 00381 MiniDumpWithProcessThreadData = 0x0100, 00382 MiniDumpWithPrivateReadWriteMemory = 0x0200 00383 }; 00384 00385 enum MINIDUMP_STREAM_TYPE 00386 { 00387 UnusedStream = 0, 00388 ReservedStream0 = 1, 00389 ReservedStream1 = 2, 00390 ThreadListStream = 3, 00391 ModuleListStream = 4, 00392 MemoryListStream = 5, 00393 ExceptionStream = 6, 00394 SystemInfoStream = 7, 00395 ThreadExListStream = 8, 00396 Memory64ListStream = 9, 00397 CommentStreamA = 10, 00398 CommentStreamW = 11, 00399 HandleDataStream = 12, 00400 FunctionTableStream = 13, 00401 UnloadedModuleListStream = 14, 00402 MiscInfoStream = 15, 00403 LastReservedStream = 0xffff 00404 }; 00405 00406 struct MINIDUMP_LOCATION_DESCRIPTOR 00407 { 00408 uint32 DataSize; 00409 uint32 Rva; 00410 }; 00411 00412 struct MINIDUMP_MEMORY_DESCRIPTOR 00413 { 00414 uint64 StartOfMemoryRange; 00415 MINIDUMP_LOCATION_DESCRIPTOR Memory; 00416 }; 00417 typedef MINIDUMP_MEMORY_DESCRIPTOR* PMINIDUMP_MEMORY_DESCRIPTOR; 00418 00419 struct MINIDUMP_MEMORY_LIST 00420 { 00421 ULONG32 NumberOfMemoryRanges; 00422 /*MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[];*/ 00423 }; 00424 typedef MINIDUMP_MEMORY_LIST* PMINIDUMP_MEMORY_LIST; 00425 00426 struct MINIDUMP_HEADER 00427 { 00428 ULONG32 Signature; 00429 ULONG32 Version; 00430 ULONG32 NumberOfStreams; 00431 uint32 StreamDirectoryRva; 00432 ULONG32 CheckSum; 00433 union 00434 { 00435 ULONG32 Reserved; 00436 ULONG32 TimeDateStamp; 00437 }; 00438 uint64 Flags; 00439 }; 00440 typedef MINIDUMP_HEADER* PMINIDUMP_HEADER; 00441 00442 struct MINIDUMP_DIRECTORY 00443 { 00444 ULONG32 StreamType; 00445 MINIDUMP_LOCATION_DESCRIPTOR Location; 00446 }; 00447 typedef MINIDUMP_DIRECTORY* PMINIDUMP_DIRECTORY; 00448 00449 #define CS_API_NAME DbgHelp 00450 #define CS_API_FUNCTIONS "csutil/win32/DbgHelpAPI.fun" 00451 00452 #include "APIdeclare.inc" 00453 00454 #endif //__CSUTIL_DEBGHELPAPI_H__
Generated for Crystal Space by doxygen 1.4.7