ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dbghelp.h
Go to the documentation of this file.
00001 /*
00002  * Declarations for DBGHELP
00003  *
00004  * Copyright (C) 2003 Eric Pouech
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00019  */
00020 
00021 #ifndef __WINE_DBGHELP_H
00022 #define __WINE_DBGHELP_H
00023 
00024 /* A set of documentation macros (see also imagehlp.h) */
00025 #ifndef __deref_out
00026 # define __deref_out
00027 #endif
00028 #ifndef __deref_out_opt
00029 # define __deref_out_opt
00030 #endif
00031 #ifndef __deref_opt_out
00032 # define __deref_opt_out
00033 #endif
00034 #ifndef __in
00035 # define __in
00036 #endif
00037 #ifndef __in_opt
00038 # define __in_opt
00039 #endif
00040 #ifndef __in_bcount
00041 # define __in_bcount(x)
00042 #endif
00043 #ifndef __in_bcount_opt
00044 # define __in_bcount_opt(x)
00045 #endif
00046 #ifndef __in_ecount
00047 # define __in_ecount(x)
00048 #endif
00049 #ifndef __inout
00050 # define __inout
00051 #endif
00052 #ifndef __inout_opt
00053 # define __inout_opt
00054 #endif
00055 #ifndef __inout_bcount
00056 # define __inout_bcount(x)
00057 #endif
00058 #ifndef __inout_ecount
00059 # define __inout_ecount(x)
00060 #endif
00061 #ifndef __out
00062 # define __out
00063 #endif
00064 #ifndef __out_opt
00065 # define __out_opt
00066 #endif
00067 #ifndef __out_bcount
00068 # define __out_bcount(x)
00069 #endif
00070 #ifndef __out_bcount_opt
00071 # define __out_bcount_opt(x)
00072 #endif
00073 #ifndef __out_ecount
00074 # define __out_ecount(x)
00075 #endif
00076 #ifndef __out_ecount_opt
00077 # define __out_ecount_opt(x)
00078 #endif
00079 #ifndef __out_xcount
00080 # define __out_xcount(x)
00081 #endif
00082 
00083 
00084 #ifdef __cplusplus
00085 extern "C" {
00086 #endif /* defined(__cplusplus) */
00087 
00088 #ifdef _WIN64
00089 #ifndef _IMAGEHLP64
00090 #define _IMAGEHLP64
00091 #endif
00092 #endif
00093 
00094 #define IMAGEAPI WINAPI
00095 #define DBHLPAPI IMAGEAPI
00096 
00097 typedef struct _LOADED_IMAGE
00098 {
00099     PSTR                        ModuleName;
00100     HANDLE                      hFile;
00101     PUCHAR                      MappedAddress;
00102     PIMAGE_NT_HEADERS           FileHeader;
00103     PIMAGE_SECTION_HEADER       LastRvaSection;
00104     ULONG                       NumberOfSections;
00105     PIMAGE_SECTION_HEADER       Sections;
00106     ULONG                       Characteristics;
00107     BOOLEAN                     fSystemImage;
00108     BOOLEAN                     fDOSImage;
00109     BOOLEAN                     fReadOnly;
00110     UCHAR                       Version;
00111     LIST_ENTRY                  Links;
00112     ULONG                       SizeOfImage;
00113 } LOADED_IMAGE, *PLOADED_IMAGE;
00114 
00115 /*************************
00116  *    IMAGEHLP equiv     *
00117  *************************/
00118 
00119 typedef enum
00120 {
00121     AddrMode1616,
00122     AddrMode1632,
00123     AddrModeReal,
00124     AddrModeFlat
00125 } ADDRESS_MODE;
00126 
00127 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00128 #define ADDRESS ADDRESS64
00129 #define LPADDRESS LPADDRESS64
00130 #else
00131 typedef struct _tagADDRESS
00132 {
00133     DWORD                       Offset;
00134     WORD                        Segment;
00135     ADDRESS_MODE                Mode;
00136 } ADDRESS, *LPADDRESS;
00137 #endif
00138 
00139 typedef struct _tagADDRESS64
00140 {
00141     DWORD64                     Offset;
00142     WORD                        Segment;
00143     ADDRESS_MODE                Mode;
00144 } ADDRESS64, *LPADDRESS64;
00145 
00146 #define SYMF_OMAP_GENERATED   0x00000001
00147 #define SYMF_OMAP_MODIFIED    0x00000002
00148 #define SYMF_USER_GENERATED   0x00000004
00149 #define SYMF_REGISTER         0x00000008
00150 #define SYMF_REGREL           0x00000010
00151 #define SYMF_FRAMEREL         0x00000020
00152 #define SYMF_PARAMETER        0x00000040
00153 #define SYMF_LOCAL            0x00000080
00154 #define SYMF_CONSTANT         0x00000100
00155 #define SYMF_EXPORT           0x00000200
00156 #define SYMF_FORWARDER        0x00000400
00157 #define SYMF_FUNCTION         0x00000800
00158 #define SYMF_VIRTUAL          0x00001000
00159 #define SYMF_THUNK            0x00002000
00160 #define SYMF_TLSREL           0x00004000
00161 
00162 typedef enum 
00163 {
00164     SymNone = 0,
00165     SymCoff,
00166     SymCv,
00167     SymPdb,
00168     SymExport,
00169     SymDeferred,
00170     SymSym,
00171     SymDia,
00172     SymVirtual,
00173     NumSymTypes
00174 } SYM_TYPE;
00175 
00176 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00177 #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
00178 #define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64
00179 #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
00180 #define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64
00181 #else
00182 typedef struct _IMAGEHLP_SYMBOL
00183 {
00184     DWORD                       SizeOfStruct;
00185     DWORD                       Address;
00186     DWORD                       Size;
00187     DWORD                       Flags;
00188     DWORD                       MaxNameLength;
00189     CHAR                        Name[1];
00190 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
00191 
00192 typedef struct _IMAGEHLP_SYMBOLW
00193 {
00194     DWORD                       SizeOfStruct;
00195     DWORD                       Address;
00196     DWORD                       Size;
00197     DWORD                       Flags;
00198     DWORD                       MaxNameLength;
00199     WCHAR                       Name[1];
00200 } IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
00201 #endif
00202 
00203 typedef struct _IMAGEHLP_SYMBOL64
00204 {
00205     DWORD                       SizeOfStruct;
00206     DWORD64                     Address;
00207     DWORD                       Size;
00208     DWORD                       Flags;
00209     DWORD                       MaxNameLength;
00210     CHAR                        Name[1];
00211 } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
00212 
00213 typedef struct _IMAGEHLP_SYMBOLW64
00214 {
00215     DWORD                       SizeOfStruct;
00216     DWORD64                     Address;
00217     DWORD                       Size;
00218     DWORD                       Flags;
00219     DWORD                       MaxNameLength;
00220     WCHAR                       Name[1];
00221 } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
00222 
00223 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00224 #define IMAGEHLP_MODULE IMAGEHLP_MODULE64
00225 #define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
00226 #define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
00227 #define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
00228 #else
00229 typedef struct _IMAGEHLP_MODULE
00230 {
00231     DWORD                       SizeOfStruct;
00232     DWORD                       BaseOfImage;
00233     DWORD                       ImageSize;
00234     DWORD                       TimeDateStamp;
00235     DWORD                       CheckSum;
00236     DWORD                       NumSyms;
00237     SYM_TYPE                    SymType;
00238     CHAR                        ModuleName[32];
00239     CHAR                        ImageName[256];
00240     CHAR                        LoadedImageName[256];
00241 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
00242 
00243 typedef struct _IMAGEHLP_MODULEW
00244 {
00245     DWORD                       SizeOfStruct;
00246     DWORD                       BaseOfImage;
00247     DWORD                       ImageSize;
00248     DWORD                       TimeDateStamp;
00249     DWORD                       CheckSum;
00250     DWORD                       NumSyms;
00251     SYM_TYPE                    SymType;
00252     WCHAR                       ModuleName[32];
00253     WCHAR                       ImageName[256];
00254     WCHAR                       LoadedImageName[256];
00255 } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
00256 #endif
00257 
00258 typedef struct _IMAGEHLP_MODULE64
00259 {
00260     DWORD                       SizeOfStruct;
00261     DWORD64                     BaseOfImage;
00262     DWORD                       ImageSize;
00263     DWORD                       TimeDateStamp;
00264     DWORD                       CheckSum;
00265     DWORD                       NumSyms;
00266     SYM_TYPE                    SymType;
00267     CHAR                        ModuleName[32];
00268     CHAR                        ImageName[256];
00269     CHAR                        LoadedImageName[256];
00270     CHAR                        LoadedPdbName[256];
00271     DWORD                       CVSig;
00272     CHAR                        CVData[MAX_PATH*3];
00273     DWORD                       PdbSig;
00274     GUID                        PdbSig70;
00275     DWORD                       PdbAge;
00276     BOOL                        PdbUnmatched;
00277     BOOL                        DbgUnmatched;
00278     BOOL                        LineNumbers;
00279     BOOL                        GlobalSymbols;
00280     BOOL                        TypeInfo;
00281     BOOL                        SourceIndexed;
00282     BOOL                        Publics;
00283 } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
00284 
00285 typedef struct _IMAGEHLP_MODULEW64
00286 {
00287     DWORD                       SizeOfStruct;
00288     DWORD64                     BaseOfImage;
00289     DWORD                       ImageSize;
00290     DWORD                       TimeDateStamp;
00291     DWORD                       CheckSum;
00292     DWORD                       NumSyms;
00293     SYM_TYPE                    SymType;
00294     WCHAR                       ModuleName[32];
00295     WCHAR                       ImageName[256];
00296     WCHAR                       LoadedImageName[256];
00297     WCHAR                       LoadedPdbName[256];
00298     DWORD                       CVSig;
00299     WCHAR                       CVData[MAX_PATH*3];
00300     DWORD                       PdbSig;
00301     GUID                        PdbSig70;
00302     DWORD                       PdbAge;
00303     BOOL                        PdbUnmatched;
00304     BOOL                        DbgUnmatched;
00305     BOOL                        LineNumbers;
00306     BOOL                        GlobalSymbols;
00307     BOOL                        TypeInfo;
00308     BOOL                        SourceIndexed;
00309     BOOL                        Publics;
00310 } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
00311 
00312 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00313 #define IMAGEHLP_LINE IMAGEHLP_LINE64
00314 #define PIMAGEHLP_LINE PIMAGEHLP_LINE64
00315 #define IMAGEHLP_LINEW IMAGEHLP_LINEW64
00316 #define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
00317 #else
00318 typedef struct _IMAGEHLP_LINE
00319 {
00320     DWORD                       SizeOfStruct;
00321     PVOID                       Key;
00322     DWORD                       LineNumber;
00323     PCHAR                       FileName;
00324     DWORD                       Address;
00325 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
00326 
00327 typedef struct _IMAGEHLP_LINEW
00328 {
00329     DWORD                       SizeOfStruct;
00330     PVOID                       Key;
00331     DWORD                       LineNumber;
00332     PWSTR                       FileName;
00333     DWORD                       Address;
00334 } IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
00335 #endif
00336 
00337 typedef struct _IMAGEHLP_LINE64
00338 {
00339     DWORD                       SizeOfStruct;
00340     PVOID                       Key;
00341     DWORD                       LineNumber;
00342     PCHAR                       FileName;
00343     DWORD64                     Address;
00344 } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
00345 
00346 typedef struct _IMAGEHLP_LINEW64
00347 {
00348     DWORD                       SizeOfStruct;
00349     PVOID                       Key;
00350     DWORD                       LineNumber;
00351     PWSTR                       FileName;
00352     DWORD64                     Address;
00353 } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
00354 
00355 typedef struct _SOURCEFILE
00356 {
00357     DWORD64                     ModBase;
00358     PCHAR                       FileName;
00359 } SOURCEFILE, *PSOURCEFILE;
00360 
00361 typedef struct _SOURCEFILEW
00362 {
00363     DWORD64                     ModBase;
00364     PWSTR                       FileName;
00365 } SOURCEFILEW, *PSOURCEFILEW;
00366 
00367 #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
00368 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
00369 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
00370 #define CBA_SYMBOLS_UNLOADED                    0x00000004
00371 #define CBA_DUPLICATE_SYMBOL                    0x00000005
00372 #define CBA_READ_MEMORY                         0x00000006
00373 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007
00374 #define CBA_SET_OPTIONS                         0x00000008
00375 #define CBA_EVENT                               0x00000010
00376 #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL        0x00000020
00377 #define CBA_DEBUG_INFO                          0x10000000
00378 
00379 typedef struct _IMAGEHLP_CBA_READ_MEMORY
00380 {
00381     DWORD64   addr;
00382     PVOID     buf;
00383     DWORD     bytes;
00384     DWORD    *bytesread;
00385 } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
00386 
00387 enum
00388 {
00389     sevInfo = 0,
00390     sevProblem,
00391     sevAttn,
00392     sevFatal,
00393     sevMax
00394 };
00395 
00396 #define EVENT_SRCSPEW_START 100
00397 #define EVENT_SRCSPEW       100
00398 #define EVENT_SRCSPEW_END   199
00399 
00400 typedef struct _IMAGEHLP_CBA_EVENT
00401 {
00402     DWORD       severity;
00403     DWORD       code;
00404     PCHAR       desc;
00405     PVOID       object;
00406 } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
00407 
00408 typedef struct _IMAGEHLP_CBA_EVENTW
00409 {
00410     DWORD       severity;
00411     DWORD       code;
00412     PCWSTR      desc;
00413     PVOID       object;
00414 } IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW;
00415 
00416 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00417 #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
00418 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
00419 #else
00420 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
00421 {
00422     DWORD                       SizeOfStruct;
00423     DWORD                       BaseOfImage;
00424     DWORD                       CheckSum;
00425     DWORD                       TimeDateStamp;
00426     CHAR                        FileName[MAX_PATH];
00427     BOOLEAN                     Reparse;
00428     HANDLE                      hFile;
00429 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
00430 #endif
00431 
00432 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
00433 {
00434     DWORD                       SizeOfStruct;
00435     DWORD64                     BaseOfImage;
00436     DWORD                       CheckSum;
00437     DWORD                       TimeDateStamp;
00438     CHAR                        FileName[MAX_PATH];
00439     BOOLEAN                     Reparse;
00440     HANDLE                      hFile;
00441     DWORD                       Flags;
00442 } IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
00443 
00444 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
00445 {
00446     DWORD                       SizeOfStruct;
00447     DWORD64                     BaseOfImage;
00448     DWORD                       CheckSum;
00449     DWORD                       TimeDateStamp;
00450     WCHAR                       FileName[MAX_PATH + 1];
00451     BOOLEAN                     Reparse;
00452     HANDLE                      hFile;
00453     DWORD                       Flags;
00454 } IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
00455 
00456 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00457 #define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
00458 #define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
00459 #else
00460 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
00461 {
00462     DWORD                       SizeOfStruct;
00463     DWORD                       NumberOfDups;
00464     PIMAGEHLP_SYMBOL            Symbol;
00465     DWORD                       SelectedSymbol;
00466 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
00467 #endif
00468 
00469 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64
00470 {
00471     DWORD                       SizeOfStruct;
00472     DWORD                       NumberOfDups;
00473     PIMAGEHLP_SYMBOL64          Symbol;
00474     DWORD                       SelectedSymbol;
00475 } IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;
00476 
00477 #define SYMOPT_CASE_INSENSITIVE         0x00000001
00478 #define SYMOPT_UNDNAME                  0x00000002
00479 #define SYMOPT_DEFERRED_LOADS           0x00000004
00480 #define SYMOPT_NO_CPP                   0x00000008
00481 #define SYMOPT_LOAD_LINES               0x00000010
00482 #define SYMOPT_OMAP_FIND_NEAREST        0x00000020
00483 #define SYMOPT_LOAD_ANYTHING            0x00000040
00484 #define SYMOPT_IGNORE_CVREC             0x00000080
00485 #define SYMOPT_NO_UNQUALIFIED_LOADS     0x00000100
00486 #define SYMOPT_FAIL_CRITICAL_ERRORS     0x00000200
00487 #define SYMOPT_EXACT_SYMBOLS            0x00000400
00488 #define SYMOPT_WILD_UNDERSCORE          0x00000800
00489 #define SYMOPT_USE_DEFAULTS             0x00001000
00490 /* latest SDK defines:
00491 #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS   0x00000800
00492 #define SYMOPT_IGNORE_NT_SYMPATH        0x00001000
00493 */
00494 #define SYMOPT_INCLUDE_32BIT_MODULES    0x00002000
00495 #define SYMOPT_PUBLICS_ONLY             0x00004000
00496 #define SYMOPT_NO_PUBLICS               0x00008000
00497 #define SYMOPT_AUTO_PUBLICS             0x00010000
00498 #define SYMOPT_NO_IMAGE_SEARCH          0x00020000
00499 #define SYMOPT_SECURE                   0x00040000
00500 #define SYMOPT_NO_PROMPTS               0x00080000
00501 #define SYMOPT_OVERWRITE                0x00100000
00502 #define SYMOPT_IGNORE_IMAGEDIR          0x00200000
00503 
00504 #define SYMOPT_DEBUG                    0x80000000
00505 
00506 typedef struct _IMAGEHLP_STACK_FRAME
00507 {
00508     ULONG64     InstructionOffset;
00509     ULONG64     ReturnOffset;
00510     ULONG64     FrameOffset;
00511     ULONG64     StackOffset;
00512     ULONG64     BackingStoreOffset;
00513     ULONG64     FuncTableEntry;
00514     ULONG64     Params[4];
00515     ULONG64     Reserved[5];
00516     BOOL        Virtual;
00517     ULONG       Reserved2;
00518 } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
00519 
00520 typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
00521 
00522 #define DBHHEADER_DEBUGDIRS     0x1
00523 typedef struct _DBGHELP_MODLOAD_DATA
00524 {
00525     DWORD               ssize;
00526     DWORD               ssig;
00527     PVOID               data;
00528     DWORD               size;
00529     DWORD               flags;
00530 } MODLOAD_DATA, *PMODLOAD_DATA;
00531 
00532 /*************************
00533  *       MiniDUMP        *
00534  *************************/
00535 
00536 #include <pshpack4.h>
00537 /* DebugHelp */
00538 
00539 #define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */
00540 #define MINIDUMP_VERSION   (42899)
00541 
00542 typedef DWORD   RVA;
00543 typedef ULONG64 RVA64;
00544 
00545 typedef enum _MINIDUMP_TYPE 
00546 {
00547     MiniDumpNormal                              = 0x0000,
00548     MiniDumpWithDataSegs                        = 0x0001,
00549     MiniDumpWithFullMemory                      = 0x0002,
00550     MiniDumpWithHandleData                      = 0x0004,
00551     MiniDumpFilterMemory                        = 0x0008,
00552     MiniDumpScanMemory                          = 0x0010,
00553     MiniDumpWithUnloadedModules                 = 0x0020,
00554     MiniDumpWithIndirectlyReferencedMemory      = 0x0040,
00555     MiniDumpFilterModulePaths                   = 0x0080,
00556     MiniDumpWithProcessThreadData               = 0x0100,
00557     MiniDumpWithPrivateReadWriteMemory          = 0x0200,
00558     MiniDumpWithoutOptionalData                 = 0x0400,
00559     MiniDumpWithFullMemoryInfo                  = 0x0800,
00560     MiniDumpWithThreadInfo                      = 0x1000,
00561     MiniDumpWithCodeSegs                        = 0x2000
00562 } MINIDUMP_TYPE;
00563 
00564 typedef enum _MINIDUMP_CALLBACK_TYPE
00565 {
00566     ModuleCallback,
00567     ThreadCallback,
00568     ThreadExCallback,
00569     IncludeThreadCallback,
00570     IncludeModuleCallback,
00571     MemoryCallback,
00572 } MINIDUMP_CALLBACK_TYPE;
00573 
00574 typedef struct _MINIDUMP_THREAD_CALLBACK
00575 {
00576     ULONG                       ThreadId;
00577     HANDLE                      ThreadHandle;
00578     CONTEXT                     Context;
00579     ULONG                       SizeOfContext;
00580     ULONG64                     StackBase;
00581     ULONG64                     StackEnd;
00582 } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
00583 
00584 typedef struct _MINIDUMP_THREAD_EX_CALLBACK 
00585 {
00586     ULONG                       ThreadId;
00587     HANDLE                      ThreadHandle;
00588     CONTEXT                     Context;
00589     ULONG                       SizeOfContext;
00590     ULONG64                     StackBase;
00591     ULONG64                     StackEnd;
00592     ULONG64                     BackingStoreBase;
00593     ULONG64                     BackingStoreEnd;
00594 } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
00595 
00596 typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
00597 {
00598     ULONG ThreadId;
00599 } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
00600 
00601 typedef enum _THREAD_WRITE_FLAGS 
00602 {
00603     ThreadWriteThread            = 0x0001,
00604     ThreadWriteStack             = 0x0002,
00605     ThreadWriteContext           = 0x0004,
00606     ThreadWriteBackingStore      = 0x0008,
00607     ThreadWriteInstructionWindow = 0x0010,
00608     ThreadWriteThreadData        = 0x0020,
00609     ThreadWriteThreadInfo        = 0x0040
00610 } THREAD_WRITE_FLAGS;
00611 
00612 typedef struct _MINIDUMP_MODULE_CALLBACK 
00613 {
00614     PWCHAR                      FullPath;
00615     ULONG64                     BaseOfImage;
00616     ULONG                       SizeOfImage;
00617     ULONG                       CheckSum;
00618     ULONG                       TimeDateStamp;
00619     VS_FIXEDFILEINFO            VersionInfo;
00620     PVOID                       CvRecord;
00621     ULONG                       SizeOfCvRecord;
00622     PVOID                       MiscRecord;
00623     ULONG                       SizeOfMiscRecord;
00624 } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
00625 
00626 typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK 
00627 {
00628     ULONG64 BaseOfImage;
00629 } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
00630 
00631 typedef enum _MODULE_WRITE_FLAGS 
00632 {
00633     ModuleWriteModule        = 0x0001,
00634     ModuleWriteDataSeg       = 0x0002,
00635     ModuleWriteMiscRecord    = 0x0004,
00636     ModuleWriteCvRecord      = 0x0008,
00637     ModuleReferencedByMemory = 0x0010,
00638     ModuleWriteTlsData       = 0x0020,
00639     ModuleWriteCodeSegs      = 0x0040,
00640 } MODULE_WRITE_FLAGS;
00641 
00642 typedef struct _MINIDUMP_CALLBACK_INPUT 
00643 {
00644     ULONG                       ProcessId;
00645     HANDLE                      ProcessHandle;
00646     ULONG                       CallbackType;
00647     union 
00648     {
00649         MINIDUMP_THREAD_CALLBACK        Thread;
00650         MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;
00651         MINIDUMP_MODULE_CALLBACK        Module;
00652         MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
00653         MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
00654     } DUMMYUNIONNAME;
00655 } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
00656 
00657 typedef struct _MINIDUMP_CALLBACK_OUTPUT
00658 {
00659     union 
00660     {
00661         ULONG                           ModuleWriteFlags;
00662         ULONG                           ThreadWriteFlags;
00663         struct
00664         {
00665             ULONG64                     MemoryBase;
00666             ULONG                       MemorySize;
00667         } DUMMYSTRUCTNAME;
00668     } DUMMYUNIONNAME;
00669 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
00670 
00671 typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
00672 
00673 typedef struct _MINIDUMP_CALLBACK_INFORMATION 
00674 {
00675     MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;
00676     void*                       CallbackParam;
00677 } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
00678 
00679 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR 
00680 {
00681     ULONG                       DataSize;
00682     RVA                         Rva;
00683 } MINIDUMP_LOCATION_DESCRIPTOR;
00684 
00685 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 
00686 {
00687     ULONG64                     DataSize;
00688     RVA64                       Rva;
00689 } MINIDUMP_LOCATION_DESCRIPTOR64;
00690 
00691 typedef struct _MINIDUMP_DIRECTORY 
00692 {
00693     ULONG                       StreamType;
00694     MINIDUMP_LOCATION_DESCRIPTOR Location;
00695 } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
00696 
00697 typedef struct _MINIDUMP_EXCEPTION
00698 {
00699     ULONG                       ExceptionCode;
00700     ULONG                       ExceptionFlags;
00701     ULONG64                     ExceptionRecord;
00702     ULONG64                     ExceptionAddress;
00703     ULONG                       NumberParameters;
00704     ULONG                        __unusedAlignment;
00705     ULONG64                     ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
00706 } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
00707 
00708 typedef struct _MINIDUMP_EXCEPTION_INFORMATION
00709 {
00710     DWORD                       ThreadId;
00711     PEXCEPTION_POINTERS         ExceptionPointers;
00712     BOOL                        ClientPointers;
00713 } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
00714 
00715 typedef struct MINIDUMP_EXCEPTION_STREAM 
00716 {
00717     ULONG                       ThreadId;
00718     ULONG                       __alignment;
00719     MINIDUMP_EXCEPTION          ExceptionRecord;
00720     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
00721 } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
00722 
00723 typedef struct _MINIDUMP_HEADER 
00724 {
00725     DWORD                       Signature;
00726     DWORD                       Version;
00727     DWORD                       NumberOfStreams;
00728     RVA                         StreamDirectoryRva;
00729     DWORD                       CheckSum;
00730     union 
00731     {
00732         DWORD                           Reserved;
00733         DWORD                           TimeDateStamp;
00734     } DUMMYUNIONNAME;
00735     ULONG64                     Flags;
00736 } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
00737 
00738 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR 
00739 {
00740     ULONG64                     StartOfMemoryRange;
00741     MINIDUMP_LOCATION_DESCRIPTOR Memory;
00742 } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
00743 
00744 typedef struct _MINIDUMP_MEMORY_LIST
00745 {
00746     ULONG                       NumberOfMemoryRanges;
00747     MINIDUMP_MEMORY_DESCRIPTOR  MemoryRanges[1]; /* FIXME: 0-sized array not supported */
00748 } MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
00749 
00750 #define MINIDUMP_MISC1_PROCESS_ID       0x00000001
00751 #define MINIDUMP_MISC1_PROCESS_TIMES    0x00000002
00752 
00753 typedef struct _MINIDUMP_MISC_INFO
00754 {
00755     ULONG                       SizeOfInfo;
00756     ULONG                       Flags1;
00757     ULONG                       ProcessId;
00758     ULONG                       ProcessCreateTime;
00759     ULONG                       ProcessUserTime;
00760     ULONG                       ProcessKernelTime;
00761 } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
00762 
00763 typedef struct _MINIDUMP_MODULE
00764 {
00765     ULONG64                     BaseOfImage;
00766     ULONG                       SizeOfImage;
00767     ULONG                       CheckSum;
00768     ULONG                       TimeDateStamp;
00769     RVA                         ModuleNameRva;
00770     VS_FIXEDFILEINFO            VersionInfo;
00771     MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
00772     MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
00773     ULONG64                     Reserved0;
00774     ULONG64                     Reserved1;
00775 } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
00776 
00777 typedef struct _MINIDUMP_MODULE_LIST 
00778 {
00779     ULONG                       NumberOfModules;
00780     MINIDUMP_MODULE             Modules[1]; /* FIXME: 0-sized array not supported */
00781 } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
00782 
00783 typedef struct _MINIDUMP_STRING
00784 {
00785     ULONG                       Length;
00786     WCHAR                       Buffer[1]; /* FIXME: O-sized array not supported */
00787 } MINIDUMP_STRING, *PMINIDUMP_STRING;
00788 
00789 typedef struct _MINIDUMP_SYSTEM_INFO
00790 {
00791     USHORT                      ProcessorArchitecture;
00792     USHORT                      ProcessorLevel;
00793     USHORT                      ProcessorRevision;
00794     union
00795     {
00796         USHORT                          Reserved0;
00797         struct
00798         {
00799             UCHAR                       NumberOfProcessors;
00800             UCHAR                       ProductType;
00801         } DUMMYSTRUCTNAME;
00802     } DUMMYUNIONNAME;
00803 
00804     ULONG                       MajorVersion;
00805     ULONG                       MinorVersion;
00806     ULONG                       BuildNumber;
00807     ULONG                       PlatformId;
00808 
00809     RVA                         CSDVersionRva;
00810     union
00811     {
00812         ULONG                           Reserved1;
00813         struct
00814         {
00815             USHORT                      SuiteMask;
00816             USHORT                      Reserved2;
00817         } DUMMYSTRUCTNAME;
00818     } DUMMYUNIONNAME1;
00819     union _CPU_INFORMATION 
00820     {
00821         struct 
00822         {
00823             ULONG                       VendorId[3];
00824             ULONG                       VersionInformation;
00825             ULONG                       FeatureInformation;
00826             ULONG                       AMDExtendedCpuFeatures;
00827         } X86CpuInfo;
00828         struct 
00829         {
00830             ULONG64                     ProcessorFeatures[2];
00831         } OtherCpuInfo;
00832     } Cpu;
00833 
00834 } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
00835 
00836 typedef struct _MINIDUMP_THREAD
00837 {
00838     ULONG                       ThreadId;
00839     ULONG                       SuspendCount;
00840     ULONG                       PriorityClass;
00841     ULONG                       Priority;
00842     ULONG64                     Teb;
00843     MINIDUMP_MEMORY_DESCRIPTOR  Stack;
00844     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
00845 } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
00846 
00847 typedef struct _MINIDUMP_THREAD_LIST
00848 {
00849     ULONG                       NumberOfThreads;
00850     MINIDUMP_THREAD             Threads[1]; /* FIXME: no support of 0 sized array */
00851 } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
00852 
00853 typedef struct _MINIDUMP_USER_STREAM
00854 {
00855     ULONG                       Type;
00856     ULONG                       BufferSize;
00857     void*                       Buffer;
00858 } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
00859 
00860 typedef struct _MINIDUMP_USER_STREAM_INFORMATION
00861 {
00862     ULONG                       UserStreamCount;
00863     PMINIDUMP_USER_STREAM       UserStreamArray;
00864 } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
00865 
00866 typedef enum _MINIDUMP_STREAM_TYPE
00867 {
00868     UnusedStream                = 0,
00869     ReservedStream0             = 1,
00870     ReservedStream1             = 2,
00871     ThreadListStream            = 3,
00872     ModuleListStream            = 4,
00873     MemoryListStream            = 5,
00874     ExceptionStream             = 6,
00875     SystemInfoStream            = 7,
00876     ThreadExListStream          = 8,
00877     Memory64ListStream          = 9,
00878     CommentStreamA              = 10,
00879     CommentStreamW              = 11,
00880     HandleDataStream            = 12,
00881     FunctionTableStream         = 13,
00882     UnloadedModuleListStream    = 14,
00883     MiscInfoStream              = 15,
00884     MemoryInfoListStream        = 16,
00885     ThreadInfoListStream        = 17,
00886 
00887     LastReservedStream          = 0xffff
00888 } MINIDUMP_STREAM_TYPE;
00889 
00890 BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
00891                               const PMINIDUMP_EXCEPTION_INFORMATION,
00892                               const PMINIDUMP_USER_STREAM_INFORMATION,
00893                               const PMINIDUMP_CALLBACK_INFORMATION);
00894 BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
00895                                    ULONG*);
00896 
00897 #include <poppack.h>
00898 
00899 /*************************
00900  *    MODULE handling    *
00901  *************************/
00902 
00903 /* flags for SymLoadModuleEx */
00904 #define SLMFLAG_VIRTUAL         0x1
00905 #define SLMFLAG_NO_SYMBOLS      0x4
00906 
00907 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
00908 BOOL   WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);
00909 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
00910 BOOL   WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);
00911 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
00912 BOOL    WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
00913 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
00914 BOOL    WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);
00915 BOOL    WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
00916 BOOL    WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);
00917 DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
00918 DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD);
00919 DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
00920                                PMODLOAD_DATA, DWORD);
00921 DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
00922                                 PMODLOAD_DATA, DWORD);
00923 BOOL    WINAPI SymUnloadModule64(HANDLE, DWORD64);
00924 
00925 /*************************
00926  *    Symbol Handling    *
00927  *************************/
00928 
00929 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1
00930 #define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER        /*  0x08 */
00931 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL          /*  0x10 */
00932 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL        /*  0x20 */
00933 #define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER       /*  0x40 */
00934 #define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL           /*  0x80 */
00935 #define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT        /* 0x100 */
00936 #define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION        /* 0x800 */
00937 
00938 #define SYMFLAG_VALUEPRESENT     0x00000001
00939 #define SYMFLAG_REGISTER         0x00000008
00940 #define SYMFLAG_REGREL           0x00000010
00941 #define SYMFLAG_FRAMEREL         0x00000020
00942 #define SYMFLAG_PARAMETER        0x00000040
00943 #define SYMFLAG_LOCAL            0x00000080
00944 #define SYMFLAG_CONSTANT         0x00000100
00945 #define SYMFLAG_EXPORT           0x00000200
00946 #define SYMFLAG_FORWARDER        0x00000400
00947 #define SYMFLAG_FUNCTION         0x00000800
00948 #define SYMFLAG_VIRTUAL          0x00001000
00949 #define SYMFLAG_THUNK            0x00002000
00950 #define SYMFLAG_TLSREL           0x00004000
00951 #define SYMFLAG_SLOT             0x00008000
00952 
00953 #define MAX_SYM_NAME    2000
00954 
00955 typedef struct _SYMBOL_INFO
00956 {
00957     ULONG       SizeOfStruct;
00958     ULONG       TypeIndex;
00959     ULONG64     Reserved[2];
00960     ULONG       info;   /* sdk states info, while MSDN says it's Index... */
00961     ULONG       Size;
00962     ULONG64     ModBase;
00963     ULONG       Flags;
00964     ULONG64     Value;
00965     ULONG64     Address;
00966     ULONG       Register;
00967     ULONG       Scope;
00968     ULONG       Tag;
00969     ULONG       NameLen;
00970     ULONG       MaxNameLen;
00971     CHAR        Name[1];
00972 } SYMBOL_INFO, *PSYMBOL_INFO;
00973 
00974 typedef struct _SYMBOL_INFOW
00975 {
00976     ULONG       SizeOfStruct;
00977     ULONG       TypeIndex;
00978     ULONG64     Reserved[2];
00979     ULONG       Index;
00980     ULONG       Size;
00981     ULONG64     ModBase;
00982     ULONG       Flags;
00983     ULONG64     Value;
00984     ULONG64     Address;
00985     ULONG       Register;
00986     ULONG       Scope;
00987     ULONG       Tag;
00988     ULONG       NameLen;
00989     ULONG       MaxNameLen;
00990     WCHAR       Name[1];
00991 } SYMBOL_INFOW, *PSYMBOL_INFOW;
00992 
00993 typedef struct _SYMBOL_INFO_PACKAGE
00994 {
00995     SYMBOL_INFO si;
00996     CHAR        name[MAX_SYM_NAME+1];
00997 } SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
00998 
00999 typedef struct _SYMBOL_INFO_PACKAGEW
01000 {
01001     SYMBOL_INFOW si;
01002     WCHAR        name[MAX_SYM_NAME+1];
01003 } SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
01004 
01005 typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO 
01006 {
01007     TI_GET_SYMTAG,
01008     TI_GET_SYMNAME,
01009     TI_GET_LENGTH,
01010     TI_GET_TYPE,
01011     TI_GET_TYPEID,
01012     TI_GET_BASETYPE,
01013     TI_GET_ARRAYINDEXTYPEID,
01014     TI_FINDCHILDREN,
01015     TI_GET_DATAKIND,
01016     TI_GET_ADDRESSOFFSET,
01017     TI_GET_OFFSET,
01018     TI_GET_VALUE,
01019     TI_GET_COUNT,
01020     TI_GET_CHILDRENCOUNT,
01021     TI_GET_BITPOSITION,
01022     TI_GET_VIRTUALBASECLASS,
01023     TI_GET_VIRTUALTABLESHAPEID,
01024     TI_GET_VIRTUALBASEPOINTEROFFSET,
01025     TI_GET_CLASSPARENTID,
01026     TI_GET_NESTED,
01027     TI_GET_SYMINDEX,
01028     TI_GET_LEXICALPARENT,
01029     TI_GET_ADDRESS,
01030     TI_GET_THISADJUST,
01031     TI_GET_UDTKIND,
01032     TI_IS_EQUIV_TO,
01033     TI_GET_CALLING_CONVENTION,
01034 } IMAGEHLP_SYMBOL_TYPE_INFO;
01035 
01036 #define IMAGEHLP_GET_TYPE_INFO_UNCACHED            0x00000001
01037 #define IMAGEHLP_GET_TYPE_INFO_CHILDREN            0x00000002
01038 typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
01039 {
01040     ULONG       SizeOfStruct;
01041     ULONG       Flags;
01042     ULONG       NumIds;
01043     PULONG      TypeIds;
01044     ULONG64     TagFilter;
01045     ULONG       NumReqs;
01046     IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
01047     PULONG_PTR  ReqOffsets;
01048     PULONG      ReqSizes;
01049     ULONG_PTR   ReqStride;
01050     ULONG_PTR   BufferSize;
01051     PVOID       Buffer;
01052     ULONG       EntriesMatched;
01053     ULONG       EntriesFilled;
01054     ULONG64     TagsFound;
01055     ULONG64     AllReqsValid;
01056     ULONG       NumReqsValid;
01057     PULONG64    ReqsValid;
01058 } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
01059 
01060 typedef struct _TI_FINDCHILDREN_PARAMS 
01061 {
01062     ULONG Count;
01063     ULONG Start;
01064     ULONG ChildId[1];
01065 } TI_FINDCHILDREN_PARAMS;
01066 
01067 #define UNDNAME_COMPLETE                 (0x0000)
01068 #define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)
01069 #define UNDNAME_NO_MS_KEYWORDS           (0x0002)
01070 #define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)
01071 #define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)
01072 #define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)
01073 #define UNDNAME_NO_MS_THISTYPE           (0x0020)
01074 #define UNDNAME_NO_CV_THISTYPE           (0x0040)
01075 #define UNDNAME_NO_THISTYPE              (0x0060)
01076 #define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)
01077 #define UNDNAME_NO_THROW_SIGNATURES      (0x0100)
01078 #define UNDNAME_NO_MEMBER_TYPE           (0x0200)
01079 #define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)
01080 #define UNDNAME_32_BIT_DECODE            (0x0800)
01081 #define UNDNAME_NAME_ONLY                (0x1000)
01082 #define UNDNAME_NO_ARGUMENTS             (0x2000)
01083 #define UNDNAME_NO_SPECIAL_SYMS          (0x4000)
01084 
01085 #define SYMSEARCH_MASKOBJS              0x01
01086 #define SYMSEARCH_RECURSE               0x02
01087 #define SYMSEARCH_GLOBALSONLY           0x04
01088 
01089 BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
01090 BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS);
01091 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
01092 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
01093 BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
01094 BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
01095 BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
01096 BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);
01097 BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO);
01098 BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW);
01099 BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO);
01100 BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW);
01101 BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
01102 BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64);
01103 BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO);
01104 BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW);
01105 BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64);
01106 BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64);
01107 BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);
01108 BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64);
01109 BOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID);
01110 BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
01111                            PVOID);
01112 BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,
01113                             PVOID);
01114 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
01115 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
01116 BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID);
01117 BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID);
01118 BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
01119 BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
01120 typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
01121 BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
01122 BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
01123 BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD);
01124 BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL);
01125 BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL);
01126 BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL);
01127 BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
01128 BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD);
01129 DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
01130 DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD);
01131 BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
01132 BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
01133 BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
01134 BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
01135 BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD);
01136 BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD);
01137 BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD);
01138 BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD);
01139 
01140 /*************************
01141  *      Source Files     *
01142  *************************/
01143 typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
01144 typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
01145 
01146 BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK,
01147                                PVOID);
01148 BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID);
01149 BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
01150 BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);
01151 BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);
01152 BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64);
01153 BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);
01154 BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64);
01155 BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64);
01156 BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64);
01157 ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG);
01158 BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD);
01159 BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD);
01160 BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*);
01161 BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*);
01162 BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD);
01163 BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD);
01164 BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD);
01165 BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD);
01166 
01167 typedef struct _SRCCODEINFO
01168 {
01169     DWORD       SizeOfStruct;
01170     PVOID       Key;
01171     DWORD64     ModBase;
01172     CHAR        Obj[MAX_PATH+1];
01173     CHAR        FileName[MAX_PATH+1];
01174     DWORD       LineNumber;
01175     DWORD64     Address;
01176 } SRCCODEINFO, *PSRCCODEINFO;
01177 
01178 typedef struct _SRCCODEINFOW
01179 {
01180     DWORD       SizeOfStruct;
01181     PVOID       Key;
01182     DWORD64     ModBase;
01183     WCHAR       Obj[MAX_PATH+1];
01184     WCHAR       FileName[MAX_PATH+1];
01185     DWORD       LineNumber;
01186     DWORD64     Address;
01187 } SRCCODEINFOW, *PSRCCODEINFOW;
01188 
01189 typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
01190 typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
01191 BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);
01192 BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID);
01193 BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID);
01194 BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID);
01195 
01196 /*************************
01197  * File & image handling *
01198  *************************/
01199 BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL);
01200 BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL);
01201 BOOL WINAPI SymCleanup(HANDLE);
01202 
01203 HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR);
01204 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
01205 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
01206 HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
01207 HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
01208 HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
01209 HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
01210 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID);
01211 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID);
01212 BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
01213                            PSTR, PFINDFILEINPATHCALLBACK, PVOID);
01214 BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
01215                               PSTR, PFINDFILEINPATHCALLBACK, PVOID);
01216 BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
01217                               PWSTR, PFINDFILEINPATHCALLBACKW, PVOID);
01218 HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR);
01219 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
01220 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
01221 HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
01222 HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
01223 HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
01224 HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
01225 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
01226 PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
01227                                          PIMAGE_SECTION_HEADER *);
01228 PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
01229 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
01230 PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
01231 BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
01232 BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD);
01233 BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR);
01234 BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR);
01235 DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
01236 BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
01237 BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR);
01238 BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR);
01239 typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID);
01240 typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
01241 BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID);
01242 BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID);
01243 BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*);
01244 BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*);
01245 PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);
01246 PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR);
01247 PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);
01248 PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);
01249 #define hdBase  0
01250 #define hdSym   1
01251 #define hdSrc   2
01252 #define hdMax   3
01253 
01254 /*************************
01255  *   Context management  *
01256  *************************/
01257 BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
01258 
01259 
01260 /*************************
01261  *    Stack management   *
01262  *************************/
01263 
01264 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01265 #define KDHELP KDHELP64
01266 #define PKDHELP PKDHELP64
01267 #else
01268 typedef struct _KDHELP
01269 {
01270     DWORD       Thread;
01271     DWORD       ThCallbackStack;
01272     DWORD       NextCallback;
01273     DWORD       FramePointer;
01274     DWORD       KiCallUserMode;
01275     DWORD       KeUserCallbackDispatcher;
01276     DWORD       SystemRangeStart;
01277 } KDHELP, *PKDHELP;
01278 #endif
01279 
01280 typedef struct _KDHELP64
01281 {
01282     DWORD64     Thread;
01283     DWORD       ThCallbackStack;
01284     DWORD       ThCallbackBStore;
01285     DWORD       NextCallback;
01286     DWORD       FramePointer;
01287     DWORD64     KiCallUserMode;
01288     DWORD64     KeUserCallbackDispatcher;
01289     DWORD64     SystemRangeStart;
01290     DWORD64     Reserved[8];
01291 } KDHELP64, *PKDHELP64;
01292 
01293 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01294 #define STACKFRAME STACKFRAME64
01295 #define LPSTACKFRAME LPSTACKFRAME64
01296 #else
01297 typedef struct _STACKFRAME
01298 {
01299     ADDRESS     AddrPC;
01300     ADDRESS     AddrReturn;
01301     ADDRESS     AddrFrame;
01302     ADDRESS     AddrStack;
01303     PVOID       FuncTableEntry;
01304     DWORD       Params[4];
01305     BOOL        Far;
01306     BOOL        Virtual;
01307     DWORD       Reserved[3];
01308     KDHELP      KdHelp;
01309     ADDRESS     AddrBStore;
01310 } STACKFRAME, *LPSTACKFRAME;
01311 #endif
01312 
01313 typedef struct _STACKFRAME64
01314 {
01315     ADDRESS64   AddrPC;
01316     ADDRESS64   AddrReturn;
01317     ADDRESS64   AddrFrame;
01318     ADDRESS64   AddrStack;
01319     ADDRESS64   AddrBStore;
01320     PVOID       FuncTableEntry;
01321     DWORD64     Params[4];
01322     BOOL        Far;
01323     BOOL        Virtual;
01324     DWORD64     Reserved[3];
01325     KDHELP64    KdHelp;
01326 } STACKFRAME64, *LPSTACKFRAME64;
01327 
01328 typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)
01329     (HANDLE, DWORD64, PVOID, DWORD, PDWORD);
01330 typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
01331 typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
01332 typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
01333 BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,
01334                         PREAD_PROCESS_MEMORY_ROUTINE64,
01335                         PFUNCTION_TABLE_ACCESS_ROUTINE64,
01336                         PGET_MODULE_BASE_ROUTINE64,
01337                         PTRANSLATE_ADDRESS_ROUTINE64);
01338 
01339 PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
01340 
01341 typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);
01342 
01343 BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);
01344 
01345 /*************************
01346  * Version, global stuff *
01347  *************************/
01348 
01349 #define API_VERSION_NUMBER 9
01350 
01351 typedef struct API_VERSION
01352 {
01353     USHORT  MajorVersion;
01354     USHORT  MinorVersion;
01355     USHORT  Revision;
01356     USHORT  Reserved;
01357 } API_VERSION, *LPAPI_VERSION;
01358 
01359 LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
01360 LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
01361 
01362 typedef struct _IMAGE_DEBUG_INFORMATION
01363 {
01364     LIST_ENTRY                  List;
01365     DWORD                       ReservedSize;
01366     PVOID                       ReservedMappedBase;
01367     USHORT                      ReservedMachine;
01368     USHORT                      ReservedCharacteristics;
01369     DWORD                       ReservedCheckSum;
01370     DWORD                       ImageBase;
01371     DWORD                       SizeOfImage;
01372     DWORD                       ReservedNumberOfSections;
01373     PIMAGE_SECTION_HEADER       ReservedSections;
01374     DWORD                       ReservedExportedNamesSize;
01375     PSTR                        ReservedExportedNames;
01376     DWORD                       ReservedNumberOfFunctionTableEntries;
01377     PIMAGE_FUNCTION_ENTRY       ReservedFunctionTableEntries;
01378     DWORD                       ReservedLowestFunctionStartingAddress;
01379     DWORD                       ReservedHighestFunctionEndingAddress;
01380     DWORD                       ReservedNumberOfFpoTableEntries;
01381     PFPO_DATA                   ReservedFpoTableEntries;
01382     DWORD                       SizeOfCoffSymbols;
01383     PIMAGE_COFF_SYMBOLS_HEADER  CoffSymbols;
01384     DWORD                       ReservedSizeOfCodeViewSymbols;
01385     PVOID                       ReservedCodeViewSymbols;
01386     PSTR                        ImageFilePath;
01387     PSTR                        ImageFileName;
01388     PSTR                        ReservedDebugFilePath;
01389     DWORD                       ReservedTimeDateStamp;
01390     BOOL                        ReservedRomImage;
01391     PIMAGE_DEBUG_DIRECTORY      ReservedDebugDirectory;
01392     DWORD                       ReservedNumberOfDebugDirectories;
01393     DWORD                       ReservedOriginalFunctionTableBaseAddress;
01394     DWORD                       Reserved[ 2 ];
01395 } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
01396 
01397 
01398 PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);
01399 
01400 BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
01401 
01402 DWORD   WINAPI  SymGetOptions(void);
01403 DWORD   WINAPI  SymSetOptions(DWORD);
01404 
01405 BOOL WINAPI SymSetParentWindow(HWND);
01406 
01407 /*************************
01408  * Version, global stuff *
01409  *************************/
01410 
01411 typedef BOOL     (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
01412 typedef BOOL     (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
01413 typedef BOOL     (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR);
01414 typedef BOOL     (WINAPI* PSYMBOLSERVEROPENPROC)(void);
01415 typedef BOOL     (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);
01416 typedef BOOL     (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
01417 typedef BOOL     (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);
01418 typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);
01419 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR);
01420 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR);
01421 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);
01422 
01423 #define SSRVOPT_CALLBACK            0x0001
01424 #define SSRVOPT_DWORD               0x0002
01425 #define SSRVOPT_DWORDPTR            0x0004
01426 #define SSRVOPT_GUIDPTR             0x0008
01427 #define SSRVOPT_OLDGUIDPTR          0x0010
01428 #define SSRVOPT_UNATTENDED          0x0020
01429 #define SSRVOPT_NOCOPY              0x0040
01430 #define SSRVOPT_PARENTWIN           0x0080
01431 #define SSRVOPT_PARAMTYPE           0x0100
01432 #define SSRVOPT_SECURE              0x0200
01433 #define SSRVOPT_TRACE               0x0400
01434 #define SSRVOPT_SETCONTEXT          0x0800
01435 #define SSRVOPT_PROXY               0x1000
01436 #define SSRVOPT_DOWNSTREAM_STORE    0x2000
01437 #define SSRVOPT_RESET               ((ULONG_PTR)-1)
01438 
01439 #define SSRVACTION_TRACE        1
01440 #define SSRVACTION_QUERYCANCEL  2
01441 #define SSRVACTION_EVENT        3
01442 
01443 /* 32-bit functions */
01444 
01445 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01446 
01447 #define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
01448 #define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
01449 #define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
01450 #define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
01451 #define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
01452 #define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
01453 #define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
01454 #define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
01455 #define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACKW64
01456 #define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
01457 
01458 #define EnumerateLoadedModules EnumerateLoadedModules64
01459 #define StackWalk StackWalk64
01460 #define SymEnumerateModules SymEnumerateModules64
01461 #define SymEnumerateSymbols SymEnumerateSymbols64
01462 #define SymEnumerateSymbolsW SymEnumerateSymbolsW64
01463 #define SymFunctionTableAccess SymFunctionTableAccess64
01464 #define SymGetLineFromAddr SymGetLineFromAddr64
01465 #define SymGetLineFromAddrW SymGetLineFromAddrW64
01466 #define SymGetLineFromName SymGetLineFromName64
01467 #define SymGetLineNext SymGetLineNext64
01468 #define SymGetLineNextW SymGetLineNextW64
01469 #define SymGetLinePrev SymGetLinePrev64
01470 #define SymGetLinePrevW SymGetLinePrevW64
01471 #define SymGetModuleBase SymGetModuleBase64
01472 #define SymGetModuleInfo SymGetModuleInfo64
01473 #define SymGetModuleInfoW SymGetModuleInfoW64
01474 #define SymGetSymFromAddr SymGetSymFromAddr64
01475 #define SymGetSymFromName SymGetSymFromName64
01476 #define SymGetSymNext SymGetSymNext64
01477 #define SymGetSymNextW SymGetSymNextW64
01478 #define SymGetSymPrev SymGetSymPrev64
01479 #define SymGetSymPrevW SymGetSymPrevW64
01480 #define SymLoadModule SymLoadModule64
01481 #define SymRegisterCallback SymRegisterCallback64
01482 #define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
01483 #define SymUnDName SymUnDName64
01484 #define SymUnloadModule SymUnloadModule64
01485 
01486 #else
01487 
01488 typedef BOOL  (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
01489 typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
01490 typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
01491 typedef BOOL  (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);
01492 typedef BOOL  (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
01493 typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
01494 typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
01495 typedef BOOL  (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
01496 typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);
01497 typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
01498 
01499 BOOL    WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
01500 BOOL    WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
01501 BOOL    WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
01502 BOOL    WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
01503 BOOL    WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID);
01504 PVOID   WINAPI SymFunctionTableAccess(HANDLE, DWORD);
01505 BOOL    WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
01506 BOOL    WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW);
01507 BOOL    WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE);
01508 BOOL    WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
01509 BOOL    WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW);
01510 BOOL    WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
01511 BOOL    WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW);
01512 DWORD   WINAPI SymGetModuleBase(HANDLE, DWORD);
01513 BOOL    WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
01514 BOOL    WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
01515 BOOL    WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
01516 BOOL    WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL);
01517 BOOL    WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
01518 BOOL    WINAPI SymGetSymNextW(HANDLE, PIMAGEHLP_SYMBOLW);
01519 BOOL    WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
01520 BOOL    WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW);
01521 DWORD   WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);
01522 BOOL    WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
01523 BOOL    WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);
01524 BOOL    WINAPI SymRefreshModuleList(HANDLE);
01525 BOOL    WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
01526 BOOL    WINAPI SymUnloadModule(HANDLE, DWORD);
01527 
01528 #endif
01529 
01530 #ifdef __cplusplus
01531 } /* extern "C" */
01532 #endif /* defined(__cplusplus) */
01533 
01534 #endif  /* __WINE_DBGHELP_H */

Generated on Fri May 25 2012 04:29:52 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.