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