CrystalSpace

Public API Reference

Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

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