00001
00002
00003
00004
00005 #ifndef _DBGHELP_
00006 #define _DBGHELP_
00007
00008 #if _MSC_VER > 1020
00009 #pragma once
00010 #endif
00011
00012 #ifdef _WIN64
00013 #ifndef _IMAGEHLP64
00014 #define _IMAGEHLP64
00015 #endif
00016 #endif
00017
00018 #ifdef __cplusplus
00019 extern "C" {
00020 #endif
00021
00022 #ifdef _IMAGEHLP_SOURCE_
00023 #define IMAGEAPI __stdcall
00024 #define DBHLP_DEPRECIATED
00025 #else
00026 #define IMAGEAPI DECLSPEC_IMPORT __stdcall
00027 #if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
00028 #define DBHLP_DEPRECIATED __declspec(deprecated)
00029 #else
00030 #define DBHLP_DEPRECIATED
00031 #endif
00032 #endif
00033
00034 #define DBHLPAPI IMAGEAPI
00035
00036 #define IMAGE_SEPARATION (64*1024)
00037
00038 typedef struct _LOADED_IMAGE {
00039 PSTR ModuleName;
00040 HANDLE hFile;
00041 PUCHAR MappedAddress;
00042 #ifdef _IMAGEHLP64
00043 PIMAGE_NT_HEADERS64 FileHeader;
00044 #else
00045 PIMAGE_NT_HEADERS32 FileHeader;
00046 #endif
00047 PIMAGE_SECTION_HEADER LastRvaSection;
00048 ULONG NumberOfSections;
00049 PIMAGE_SECTION_HEADER Sections;
00050 ULONG Characteristics;
00051 BOOLEAN fSystemImage;
00052 BOOLEAN fDOSImage;
00053 LIST_ENTRY Links;
00054 ULONG SizeOfImage;
00055 } LOADED_IMAGE, *PLOADED_IMAGE;
00056
00057 #define MAX_SYM_NAME 2000
00058
00059 HANDLE
00060 IMAGEAPI
00061 FindDebugInfoFile (
00062 PSTR FileName,
00063 PSTR SymbolPath,
00064 PSTR DebugFilePath
00065 );
00066
00067 typedef BOOL
00068 (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(
00069 HANDLE FileHandle,
00070 PSTR FileName,
00071 PVOID CallerData
00072 );
00073
00074 HANDLE
00075 IMAGEAPI
00076 FindDebugInfoFileEx (
00077 PSTR FileName,
00078 PSTR SymbolPath,
00079 PSTR DebugFilePath,
00080 PFIND_DEBUG_FILE_CALLBACK Callback,
00081 PVOID CallerData
00082 );
00083
00084 typedef BOOL
00085 (CALLBACK *PFINDFILEINPATHCALLBACK)(
00086 PSTR filename,
00087 PVOID context
00088 );
00089
00090 BOOL
00091 IMAGEAPI
00092 SymFindFileInPath(
00093 HANDLE hprocess,
00094 LPSTR SearchPath,
00095 LPSTR FileName,
00096 PVOID id,
00097 DWORD two,
00098 DWORD three,
00099 DWORD flags,
00100 LPSTR FoundFile,
00101 PFINDFILEINPATHCALLBACK callback,
00102 PVOID context
00103 );
00104
00105 HANDLE
00106 IMAGEAPI
00107 FindExecutableImage(
00108 PSTR FileName,
00109 PSTR SymbolPath,
00110 PSTR ImageFilePath
00111 );
00112
00113 typedef BOOL
00114 (CALLBACK *PFIND_EXE_FILE_CALLBACK)(
00115 HANDLE FileHandle,
00116 PSTR FileName,
00117 PVOID CallerData
00118 );
00119
00120 HANDLE
00121 IMAGEAPI
00122 FindExecutableImageEx(
00123 PSTR FileName,
00124 PSTR SymbolPath,
00125 PSTR ImageFilePath,
00126 PFIND_EXE_FILE_CALLBACK Callback,
00127 PVOID CallerData
00128 );
00129
00130 PIMAGE_NT_HEADERS
00131 IMAGEAPI
00132 ImageNtHeader (
00133 IN PVOID Base
00134 );
00135
00136 PVOID
00137 IMAGEAPI
00138 ImageDirectoryEntryToDataEx (
00139 IN PVOID Base,
00140 IN BOOLEAN MappedAsImage,
00141 IN USHORT DirectoryEntry,
00142 OUT PULONG Size,
00143 OUT PIMAGE_SECTION_HEADER *FoundHeader OPTIONAL
00144 );
00145
00146 PVOID
00147 IMAGEAPI
00148 ImageDirectoryEntryToData (
00149 IN PVOID Base,
00150 IN BOOLEAN MappedAsImage,
00151 IN USHORT DirectoryEntry,
00152 OUT PULONG Size
00153 );
00154
00155 PIMAGE_SECTION_HEADER
00156 IMAGEAPI
00157 ImageRvaToSection(
00158 IN PIMAGE_NT_HEADERS NtHeaders,
00159 IN PVOID Base,
00160 IN ULONG Rva
00161 );
00162
00163 PVOID
00164 IMAGEAPI
00165 ImageRvaToVa(
00166 IN PIMAGE_NT_HEADERS NtHeaders,
00167 IN PVOID Base,
00168 IN ULONG Rva,
00169 IN OUT PIMAGE_SECTION_HEADER *LastRvaSection
00170 );
00171
00172 typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR, LPCSTR, PVOID, DWORD, DWORD, LPSTR);
00173 typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
00174 typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
00175 typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
00176 typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action, ULONG64 data, ULONG64 context);
00177 typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)();
00178 typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR);
00179
00180 #define SSRVOPT_CALLBACK 0x001
00181 #define SSRVOPT_DWORD 0x002
00182 #define SSRVOPT_DWORDPTR 0x004
00183 #define SSRVOPT_GUIDPTR 0x008
00184 #define SSRVOPT_OLDGUIDPTR 0x010
00185 #define SSRVOPT_UNATTENDED 0x020
00186 #define SSRVOPT_NOCOPY 0x040
00187 #define SSRVOPT_PARENTWIN 0x080
00188 #define SSRVOPT_PARAMTYPE 0x100
00189 #define SSRVOPT_SECURE 0x200
00190 #define SSRVOPT_TRACE 0x400
00191 #define SSRVOPT_RESET ((ULONG_PTR)-1)
00192
00193 #define SSRVACTION_TRACE 1
00194
00195 #ifndef _WIN64
00196
00197 typedef struct _IMAGE_DEBUG_INFORMATION {
00198 LIST_ENTRY List;
00199 DWORD ReservedSize;
00200 PVOID ReservedMappedBase;
00201 USHORT ReservedMachine;
00202 USHORT ReservedCharacteristics;
00203 DWORD ReservedCheckSum;
00204 DWORD ImageBase;
00205 DWORD SizeOfImage;
00206
00207 DWORD ReservedNumberOfSections;
00208 PIMAGE_SECTION_HEADER ReservedSections;
00209
00210 DWORD ReservedExportedNamesSize;
00211 PSTR ReservedExportedNames;
00212
00213 DWORD ReservedNumberOfFunctionTableEntries;
00214 PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
00215 DWORD ReservedLowestFunctionStartingAddress;
00216 DWORD ReservedHighestFunctionEndingAddress;
00217
00218 DWORD ReservedNumberOfFpoTableEntries;
00219 PFPO_DATA ReservedFpoTableEntries;
00220
00221 DWORD SizeOfCoffSymbols;
00222 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
00223
00224 DWORD ReservedSizeOfCodeViewSymbols;
00225 PVOID ReservedCodeViewSymbols;
00226
00227 PSTR ImageFilePath;
00228 PSTR ImageFileName;
00229 PSTR ReservedDebugFilePath;
00230
00231 DWORD ReservedTimeDateStamp;
00232
00233 BOOL ReservedRomImage;
00234 PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
00235 DWORD ReservedNumberOfDebugDirectories;
00236
00237 DWORD ReservedOriginalFunctionTableBaseAddress;
00238
00239 DWORD Reserved[ 2 ];
00240
00241 } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
00242
00243 PIMAGE_DEBUG_INFORMATION
00244 IMAGEAPI
00245 MapDebugInformation(
00246 HANDLE FileHandle,
00247 PSTR FileName,
00248 PSTR SymbolPath,
00249 DWORD ImageBase
00250 );
00251
00252 BOOL
00253 IMAGEAPI
00254 UnmapDebugInformation(
00255 PIMAGE_DEBUG_INFORMATION DebugInfo
00256 );
00257
00258 #endif
00259
00260 BOOL
00261 IMAGEAPI
00262 SearchTreeForFile(
00263 PSTR RootPath,
00264 PSTR InputPathName,
00265 PSTR OutputPathBuffer
00266 );
00267
00268 typedef BOOL
00269 (CALLBACK *PENUMDIRTREE_CALLBACK)(
00270 LPCSTR FilePath,
00271 PVOID CallerData
00272 );
00273
00274 BOOL
00275 IMAGEAPI
00276 EnumDirTree(
00277 HANDLE hProcess,
00278 PSTR RootPath,
00279 PSTR InputPathName,
00280 PSTR OutputPathBuffer,
00281 PENUMDIRTREE_CALLBACK Callback,
00282 PVOID CallbackData
00283 );
00284
00285 BOOL
00286 IMAGEAPI
00287 MakeSureDirectoryPathExists(
00288 PCSTR DirPath
00289 );
00290
00291 #define UNDNAME_COMPLETE (0x0000)
00292 #define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
00293 #define UNDNAME_NO_MS_KEYWORDS (0x0002)
00294 #define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
00295 #define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
00296 #define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
00297 #define UNDNAME_NO_MS_THISTYPE (0x0020)
00298 #define UNDNAME_NO_CV_THISTYPE (0x0040)
00299 #define UNDNAME_NO_THISTYPE (0x0060)
00300 #define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
00301 #define UNDNAME_NO_THROW_SIGNATURES (0x0100)
00302 #define UNDNAME_NO_MEMBER_TYPE (0x0200)
00303 #define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
00304 #define UNDNAME_32_BIT_DECODE (0x0800)
00305 #define UNDNAME_NAME_ONLY (0x1000)
00306
00307 #define UNDNAME_NO_ARGUMENTS (0x2000)
00308 #define UNDNAME_NO_SPECIAL_SYMS (0x4000)
00309
00310 DWORD
00311 IMAGEAPI
00312 WINAPI
00313 UnDecorateSymbolName(
00314 PCSTR DecoratedName,
00315 PSTR UnDecoratedName,
00316 DWORD UndecoratedLength,
00317 DWORD Flags
00318 );
00319
00320 #define DBHHEADER_DEBUGDIRS 0x1
00321
00322 typedef struct _MODLOAD_DATA {
00323 DWORD ssize;
00324 DWORD ssig;
00325 PVOID data;
00326 DWORD size;
00327 DWORD flags;
00328 } MODLOAD_DATA, *PMODLOAD_DATA;
00329
00330 typedef enum {
00331 AddrMode1616,
00332 AddrMode1632,
00333 AddrModeReal,
00334 AddrModeFlat
00335 } ADDRESS_MODE;
00336
00337 typedef struct _tagADDRESS64 {
00338 DWORD64 Offset;
00339 WORD Segment;
00340 ADDRESS_MODE Mode;
00341 } ADDRESS64, *LPADDRESS64;
00342
00343 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00344 #define ADDRESS ADDRESS64
00345 #define LPADDRESS LPADDRESS64
00346 #else
00347 typedef struct _tagADDRESS {
00348 DWORD Offset;
00349 WORD Segment;
00350 ADDRESS_MODE Mode;
00351 } ADDRESS, *LPADDRESS;
00352
00353 __inline
00354 void
00355 Address32To64(
00356 LPADDRESS a32,
00357 LPADDRESS64 a64
00358 )
00359 {
00360 a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
00361 a64->Segment = a32->Segment;
00362 a64->Mode = a32->Mode;
00363 }
00364
00365 __inline
00366 void
00367 Address64To32(
00368 LPADDRESS64 a64,
00369 LPADDRESS a32
00370 )
00371 {
00372 a32->Offset = (ULONG)a64->Offset;
00373 a32->Segment = a64->Segment;
00374 a32->Mode = a64->Mode;
00375 }
00376 #endif
00377
00378 typedef struct _KDHELP64 {
00379
00380
00381
00382
00383
00384 DWORD64 Thread;
00385
00386
00387
00388
00389
00390 DWORD ThCallbackStack;
00391
00392
00393
00394
00395
00396 DWORD ThCallbackBStore;
00397
00398
00399
00400
00401
00402 DWORD NextCallback;
00403
00404
00405 DWORD FramePointer;
00406
00407
00408
00409
00410 DWORD64 KiCallUserMode;
00411
00412
00413
00414
00415 DWORD64 KeUserCallbackDispatcher;
00416
00417
00418
00419
00420 DWORD64 SystemRangeStart;
00421
00422 DWORD64 Reserved[8];
00423
00424 } KDHELP64, *PKDHELP64;
00425
00426 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00427 #define KDHELP KDHELP64
00428 #define PKDHELP PKDHELP64
00429 #else
00430 typedef struct _KDHELP {
00431
00432
00433
00434
00435
00436 DWORD Thread;
00437
00438
00439
00440
00441
00442 DWORD ThCallbackStack;
00443
00444
00445
00446
00447
00448 DWORD NextCallback;
00449
00450
00451 DWORD FramePointer;
00452
00453
00454
00455
00456 DWORD KiCallUserMode;
00457
00458
00459
00460
00461 DWORD KeUserCallbackDispatcher;
00462
00463
00464
00465
00466 DWORD SystemRangeStart;
00467
00468
00469
00470
00471
00472 DWORD ThCallbackBStore;
00473
00474 DWORD Reserved[8];
00475
00476 } KDHELP, *PKDHELP;
00477
00478 __inline
00479 void
00480 KdHelp32To64(
00481 PKDHELP p32,
00482 PKDHELP64 p64
00483 )
00484 {
00485 p64->Thread = p32->Thread;
00486 p64->ThCallbackStack = p32->ThCallbackStack;
00487 p64->NextCallback = p32->NextCallback;
00488 p64->FramePointer = p32->FramePointer;
00489 p64->KiCallUserMode = p32->KiCallUserMode;
00490 p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
00491 p64->SystemRangeStart = p32->SystemRangeStart;
00492 }
00493 #endif
00494
00495 typedef struct _tagSTACKFRAME64 {
00496 ADDRESS64 AddrPC;
00497 ADDRESS64 AddrReturn;
00498 ADDRESS64 AddrFrame;
00499 ADDRESS64 AddrStack;
00500 ADDRESS64 AddrBStore;
00501 PVOID FuncTableEntry;
00502 DWORD64 Params[4];
00503 BOOL Far;
00504 BOOL Virtual;
00505 DWORD64 Reserved[3];
00506 KDHELP64 KdHelp;
00507 } STACKFRAME64, *LPSTACKFRAME64;
00508
00509 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00510 #define STACKFRAME STACKFRAME64
00511 #define LPSTACKFRAME LPSTACKFRAME64
00512 #else
00513 typedef struct _tagSTACKFRAME {
00514 ADDRESS AddrPC;
00515 ADDRESS AddrReturn;
00516 ADDRESS AddrFrame;
00517 ADDRESS AddrStack;
00518 PVOID FuncTableEntry;
00519 DWORD Params[4];
00520 BOOL Far;
00521 BOOL Virtual;
00522 DWORD Reserved[3];
00523 KDHELP KdHelp;
00524 ADDRESS AddrBStore;
00525 } STACKFRAME, *LPSTACKFRAME;
00526 #endif
00527
00528 typedef
00529 BOOL
00530 (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)(
00531 HANDLE hProcess,
00532 DWORD64 qwBaseAddress,
00533 PVOID lpBuffer,
00534 DWORD nSize,
00535 LPDWORD lpNumberOfBytesRead
00536 );
00537
00538 typedef
00539 PVOID
00540 (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
00541 HANDLE hProcess,
00542 DWORD64 AddrBase
00543 );
00544
00545 typedef
00546 DWORD64
00547 (__stdcall *PGET_MODULE_BASE_ROUTINE64)(
00548 HANDLE hProcess,
00549 DWORD64 Address
00550 );
00551
00552 typedef
00553 DWORD64
00554 (__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)(
00555 HANDLE hProcess,
00556 HANDLE hThread,
00557 LPADDRESS64 lpaddr
00558 );
00559
00560 BOOL
00561 IMAGEAPI
00562 StackWalk64(
00563 DWORD MachineType,
00564 HANDLE hProcess,
00565 HANDLE hThread,
00566 LPSTACKFRAME64 StackFrame,
00567 PVOID ContextRecord,
00568 PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
00569 PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
00570 PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
00571 PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress
00572 );
00573
00574 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00575
00576 #define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
00577 #define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
00578 #define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
00579 #define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
00580
00581 #define StackWalk StackWalk64
00582
00583 #else
00584
00585 typedef
00586 BOOL
00587 (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)(
00588 HANDLE hProcess,
00589 DWORD lpBaseAddress,
00590 PVOID lpBuffer,
00591 DWORD nSize,
00592 PDWORD lpNumberOfBytesRead
00593 );
00594
00595 typedef
00596 PVOID
00597 (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)(
00598 HANDLE hProcess,
00599 DWORD AddrBase
00600 );
00601
00602 typedef
00603 DWORD
00604 (__stdcall *PGET_MODULE_BASE_ROUTINE)(
00605 HANDLE hProcess,
00606 DWORD Address
00607 );
00608
00609 typedef
00610 DWORD
00611 (__stdcall *PTRANSLATE_ADDRESS_ROUTINE)(
00612 HANDLE hProcess,
00613 HANDLE hThread,
00614 LPADDRESS lpaddr
00615 );
00616
00617 BOOL
00618 IMAGEAPI
00619 StackWalk(
00620 DWORD MachineType,
00621 HANDLE hProcess,
00622 HANDLE hThread,
00623 LPSTACKFRAME StackFrame,
00624 PVOID ContextRecord,
00625 PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
00626 PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
00627 PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
00628 PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
00629 );
00630
00631 #endif
00632
00633 #define API_VERSION_NUMBER 9
00634
00635 typedef struct API_VERSION {
00636 USHORT MajorVersion;
00637 USHORT MinorVersion;
00638 USHORT Revision;
00639 USHORT Reserved;
00640 } API_VERSION, *LPAPI_VERSION;
00641
00642 LPAPI_VERSION
00643 IMAGEAPI
00644 ImagehlpApiVersion(
00645 VOID
00646 );
00647
00648 LPAPI_VERSION
00649 IMAGEAPI
00650 ImagehlpApiVersionEx(
00651 LPAPI_VERSION AppVersion
00652 );
00653
00654 DWORD
00655 IMAGEAPI
00656 GetTimestampForLoadedLibrary(
00657 HMODULE Module
00658 );
00659
00660 typedef BOOL
00661 (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(
00662 PSTR ModuleName,
00663 DWORD64 BaseOfDll,
00664 PVOID UserContext
00665 );
00666
00667 typedef BOOL
00668 (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(
00669 PSTR SymbolName,
00670 DWORD64 SymbolAddress,
00671 ULONG SymbolSize,
00672 PVOID UserContext
00673 );
00674
00675 typedef BOOL
00676 (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(
00677 PWSTR SymbolName,
00678 DWORD64 SymbolAddress,
00679 ULONG SymbolSize,
00680 PVOID UserContext
00681 );
00682
00683 typedef BOOL
00684 (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(
00685 PSTR ModuleName,
00686 DWORD64 ModuleBase,
00687 ULONG ModuleSize,
00688 PVOID UserContext
00689 );
00690
00691 typedef BOOL
00692 (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(
00693 HANDLE hProcess,
00694 ULONG ActionCode,
00695 ULONG64 CallbackData,
00696 ULONG64 UserContext
00697 );
00698
00699 typedef
00700 PVOID
00701 (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
00702 HANDLE hProcess,
00703 DWORD AddrBase,
00704 PVOID UserContext
00705 );
00706
00707 typedef
00708 PVOID
00709 (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(
00710 HANDLE hProcess,
00711 ULONG64 AddrBase,
00712 ULONG64 UserContext
00713 );
00714
00715 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00716
00717 #define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
00718 #define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
00719 #define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
00720 #define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
00721 #define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
00722 #define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
00723
00724 #else
00725
00726 typedef BOOL
00727 (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
00728 PSTR ModuleName,
00729 ULONG BaseOfDll,
00730 PVOID UserContext
00731 );
00732
00733 typedef BOOL
00734 (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
00735 PSTR SymbolName,
00736 ULONG SymbolAddress,
00737 ULONG SymbolSize,
00738 PVOID UserContext
00739 );
00740
00741 typedef BOOL
00742 (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(
00743 PWSTR SymbolName,
00744 ULONG SymbolAddress,
00745 ULONG SymbolSize,
00746 PVOID UserContext
00747 );
00748
00749 typedef BOOL
00750 (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
00751 PSTR ModuleName,
00752 ULONG ModuleBase,
00753 ULONG ModuleSize,
00754 PVOID UserContext
00755 );
00756
00757 typedef BOOL
00758 (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
00759 HANDLE hProcess,
00760 ULONG ActionCode,
00761 PVOID CallbackData,
00762 PVOID UserContext
00763 );
00764
00765 #endif
00766
00767 #define SYMFLAG_VALUEPRESENT 0x00000001
00768 #define SYMFLAG_REGISTER 0x00000008
00769 #define SYMFLAG_REGREL 0x00000010
00770 #define SYMFLAG_FRAMEREL 0x00000020
00771 #define SYMFLAG_PARAMETER 0x00000040
00772 #define SYMFLAG_LOCAL 0x00000080
00773 #define SYMFLAG_CONSTANT 0x00000100
00774 #define SYMFLAG_EXPORT 0x00000200
00775 #define SYMFLAG_FORWARDER 0x00000400
00776 #define SYMFLAG_FUNCTION 0x00000800
00777 #define SYMFLAG_VIRTUAL 0x00001000
00778 #define SYMFLAG_THUNK 0x00002000
00779 #define SYMFLAG_TLSREL 0x00004000
00780
00781 typedef enum {
00782 SymNone = 0,
00783 SymCoff,
00784 SymCv,
00785 SymPdb,
00786 SymExport,
00787 SymDeferred,
00788 SymSym,
00789 SymDia,
00790 SymVirtual,
00791 NumSymTypes
00792 } SYM_TYPE;
00793
00794 typedef struct _IMAGEHLP_SYMBOL64 {
00795 DWORD SizeOfStruct;
00796 DWORD64 Address;
00797 DWORD Size;
00798 DWORD Flags;
00799 DWORD MaxNameLength;
00800 CHAR Name[1];
00801 } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
00802
00803 typedef struct _IMAGEHLP_SYMBOL64_PACKAGE {
00804 IMAGEHLP_SYMBOL64 sym;
00805 CHAR name[MAX_SYM_NAME + 1];
00806 } IMAGEHLP_SYMBOL64_PACKAGE, *PIMAGEHLP_SYMBOL64_PACKAGE;
00807
00808 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00809
00810 #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
00811 #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
00812 #define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
00813 #define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
00814
00815 #else
00816
00817 typedef struct _IMAGEHLP_SYMBOL {
00818 DWORD SizeOfStruct;
00819 DWORD Address;
00820 DWORD Size;
00821 DWORD Flags;
00822 DWORD MaxNameLength;
00823 CHAR Name[1];
00824 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
00825
00826 typedef struct _IMAGEHLP_SYMBOL_PACKAGE {
00827 IMAGEHLP_SYMBOL sym;
00828 CHAR name[MAX_SYM_NAME + 1];
00829 } IMAGEHLP_SYMBOL_PACKAGE, *PIMAGEHLP_SYMBOL_PACKAGE;
00830
00831 #endif
00832
00833 typedef struct _IMAGEHLP_MODULE64 {
00834 DWORD SizeOfStruct;
00835 DWORD64 BaseOfImage;
00836 DWORD ImageSize;
00837 DWORD TimeDateStamp;
00838 DWORD CheckSum;
00839 DWORD NumSyms;
00840 SYM_TYPE SymType;
00841 CHAR ModuleName[32];
00842 CHAR ImageName[256];
00843 CHAR LoadedImageName[256];
00844 } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
00845
00846 typedef struct _IMAGEHLP_MODULE64W {
00847 DWORD SizeOfStruct;
00848 DWORD64 BaseOfImage;
00849 DWORD ImageSize;
00850 DWORD TimeDateStamp;
00851 DWORD CheckSum;
00852 DWORD NumSyms;
00853 SYM_TYPE SymType;
00854 WCHAR ModuleName[32];
00855 WCHAR ImageName[256];
00856 WCHAR LoadedImageName[256];
00857 } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
00858
00859 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00860 #define IMAGEHLP_MODULE IMAGEHLP_MODULE64
00861 #define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
00862 #define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
00863 #define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
00864 #else
00865 typedef struct _IMAGEHLP_MODULE {
00866 DWORD SizeOfStruct;
00867 DWORD BaseOfImage;
00868 DWORD ImageSize;
00869 DWORD TimeDateStamp;
00870 DWORD CheckSum;
00871 DWORD NumSyms;
00872 SYM_TYPE SymType;
00873 CHAR ModuleName[32];
00874 CHAR ImageName[256];
00875 CHAR LoadedImageName[256];
00876 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
00877
00878 typedef struct _IMAGEHLP_MODULEW {
00879 DWORD SizeOfStruct;
00880 DWORD BaseOfImage;
00881 DWORD ImageSize;
00882 DWORD TimeDateStamp;
00883 DWORD CheckSum;
00884 DWORD NumSyms;
00885 SYM_TYPE SymType;
00886 WCHAR ModuleName[32];
00887 WCHAR ImageName[256];
00888 WCHAR LoadedImageName[256];
00889 } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
00890 #endif
00891
00892 typedef struct _IMAGEHLP_LINE64 {
00893 DWORD SizeOfStruct;
00894 PVOID Key;
00895 DWORD LineNumber;
00896 PCHAR FileName;
00897 DWORD64 Address;
00898 } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
00899
00900 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00901 #define IMAGEHLP_LINE IMAGEHLP_LINE64
00902 #define PIMAGEHLP_LINE PIMAGEHLP_LINE64
00903 #else
00904 typedef struct _IMAGEHLP_LINE {
00905 DWORD SizeOfStruct;
00906 PVOID Key;
00907 DWORD LineNumber;
00908 PCHAR FileName;
00909 DWORD Address;
00910 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
00911 #endif
00912
00913 typedef struct _SOURCEFILE {
00914 DWORD64 ModBase;
00915 PCHAR FileName;
00916 } SOURCEFILE, *PSOURCEFILE;
00917
00918 #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
00919 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
00920 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
00921 #define CBA_SYMBOLS_UNLOADED 0x00000004
00922 #define CBA_DUPLICATE_SYMBOL 0x00000005
00923 #define CBA_READ_MEMORY 0x00000006
00924 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
00925 #define CBA_SET_OPTIONS 0x00000008
00926 #define CBA_EVENT 0x00000010
00927 #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
00928 #define CBA_DEBUG_INFO 0x10000000
00929
00930 typedef struct _IMAGEHLP_CBA_READ_MEMORY {
00931 DWORD64 addr;
00932 PVOID buf;
00933 DWORD bytes;
00934 DWORD *bytesread;
00935 } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
00936
00937 enum {
00938 sevInfo = 0,
00939 sevProblem,
00940 sevAttn,
00941 sevFatal,
00942 sevMax
00943 };
00944
00945 typedef struct _IMAGEHLP_CBA_EVENT {
00946 DWORD severity;
00947 DWORD code;
00948 PCHAR desc;
00949 PVOID object;
00950 } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
00951
00952 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 {
00953 DWORD SizeOfStruct;
00954 DWORD64 BaseOfImage;
00955 DWORD CheckSum;
00956 DWORD TimeDateStamp;
00957 CHAR FileName[MAX_PATH];
00958 BOOLEAN Reparse;
00959 HANDLE hFile;
00960 DWORD Flags;
00961 } IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
00962
00963 #define DSLFLAG_MISMATCHED_PDB 0x1
00964 #define DSLFLAG_MISMATCHED_DBG 0x2
00965
00966 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00967 #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
00968 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
00969 #else
00970 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
00971 DWORD SizeOfStruct;
00972 DWORD BaseOfImage;
00973 DWORD CheckSum;
00974 DWORD TimeDateStamp;
00975 CHAR FileName[MAX_PATH];
00976 BOOLEAN Reparse;
00977 HANDLE hFile;
00978 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
00979 #endif
00980
00981 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 {
00982 DWORD SizeOfStruct;
00983 DWORD NumberOfDups;
00984 PIMAGEHLP_SYMBOL64 Symbol;
00985 DWORD SelectedSymbol;
00986 } IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;
00987
00988 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
00989 #define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
00990 #define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
00991 #else
00992 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
00993 DWORD SizeOfStruct;
00994 DWORD NumberOfDups;
00995 PIMAGEHLP_SYMBOL Symbol;
00996 DWORD SelectedSymbol;
00997 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
00998 #endif
00999
01000 BOOL
01001 SymSetParentWindow(
01002 HWND hwnd
01003 );
01004
01005 #define SYMOPT_CASE_INSENSITIVE 0x00000001
01006 #define SYMOPT_UNDNAME 0x00000002
01007 #define SYMOPT_DEFERRED_LOADS 0x00000004
01008 #define SYMOPT_NO_CPP 0x00000008
01009 #define SYMOPT_LOAD_LINES 0x00000010
01010 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020
01011 #define SYMOPT_LOAD_ANYTHING 0x00000040
01012 #define SYMOPT_IGNORE_CVREC 0x00000080
01013 #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
01014 #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
01015 #define SYMOPT_EXACT_SYMBOLS 0x00000400
01016 #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
01017 #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
01018 #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
01019 #define SYMOPT_PUBLICS_ONLY 0x00004000
01020 #define SYMOPT_NO_PUBLICS 0x00008000
01021 #define SYMOPT_AUTO_PUBLICS 0x00010000
01022 #define SYMOPT_NO_IMAGE_SEARCH 0x00020000
01023 #define SYMOPT_SECURE 0x00040000
01024
01025 #define SYMOPT_DEBUG 0x80000000
01026
01027 DWORD
01028 IMAGEAPI
01029 SymSetOptions(
01030 IN DWORD SymOptions
01031 );
01032
01033 DWORD
01034 IMAGEAPI
01035 SymGetOptions(
01036 VOID
01037 );
01038
01039 BOOL
01040 IMAGEAPI
01041 SymCleanup(
01042 IN HANDLE hProcess
01043 );
01044
01045 BOOL
01046 IMAGEAPI
01047 SymMatchString(
01048 IN LPSTR string,
01049 IN LPSTR expression,
01050 IN BOOL fCase
01051 );
01052
01053 typedef BOOL
01054 (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(
01055 PSOURCEFILE pSourceFile,
01056 PVOID UserContext
01057 );
01058
01059 BOOL
01060 IMAGEAPI
01061 SymEnumSourceFiles(
01062 IN HANDLE hProcess,
01063 IN ULONG64 ModBase,
01064 IN LPSTR Mask,
01065 IN PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
01066 IN PVOID UserContext
01067 );
01068
01069 BOOL
01070 IMAGEAPI
01071 SymEnumerateModules64(
01072 IN HANDLE hProcess,
01073 IN PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,
01074 IN PVOID UserContext
01075 );
01076
01077 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01078 #define SymEnumerateModules SymEnumerateModules64
01079 #else
01080 BOOL
01081 IMAGEAPI
01082 SymEnumerateModules(
01083 IN HANDLE hProcess,
01084 IN PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
01085 IN PVOID UserContext
01086 );
01087 #endif
01088
01089 BOOL
01090 IMAGEAPI
01091 SymEnumerateSymbols64(
01092 IN HANDLE hProcess,
01093 IN DWORD64 BaseOfDll,
01094 IN PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,
01095 IN PVOID UserContext
01096 );
01097
01098 BOOL
01099 IMAGEAPI
01100 SymEnumerateSymbolsW64(
01101 IN HANDLE hProcess,
01102 IN DWORD64 BaseOfDll,
01103 IN PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,
01104 IN PVOID UserContext
01105 );
01106
01107 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01108 #define SymEnumerateSymbols SymEnumerateSymbols64
01109 #define SymEnumerateSymbolsW SymEnumerateSymbolsW64
01110 #else
01111 BOOL
01112 IMAGEAPI
01113 SymEnumerateSymbols(
01114 IN HANDLE hProcess,
01115 IN DWORD BaseOfDll,
01116 IN PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,
01117 IN PVOID UserContext
01118 );
01119
01120 BOOL
01121 IMAGEAPI
01122 SymEnumerateSymbolsW(
01123 IN HANDLE hProcess,
01124 IN DWORD BaseOfDll,
01125 IN PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,
01126 IN PVOID UserContext
01127 );
01128 #endif
01129
01130 BOOL
01131 IMAGEAPI
01132 EnumerateLoadedModules64(
01133 IN HANDLE hProcess,
01134 IN PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,
01135 IN PVOID UserContext
01136 );
01137
01138 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01139 #define EnumerateLoadedModules EnumerateLoadedModules64
01140 #else
01141 BOOL
01142 IMAGEAPI
01143 EnumerateLoadedModules(
01144 IN HANDLE hProcess,
01145 IN PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
01146 IN PVOID UserContext
01147 );
01148 #endif
01149
01150 PVOID
01151 IMAGEAPI
01152 SymFunctionTableAccess64(
01153 HANDLE hProcess,
01154 DWORD64 AddrBase
01155 );
01156
01157 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01158 #define SymFunctionTableAccess SymFunctionTableAccess64
01159 #else
01160 PVOID
01161 IMAGEAPI
01162 SymFunctionTableAccess(
01163 HANDLE hProcess,
01164 DWORD AddrBase
01165 );
01166 #endif
01167
01168 BOOL
01169 IMAGEAPI
01170 SymGetModuleInfo64(
01171 IN HANDLE hProcess,
01172 IN DWORD64 qwAddr,
01173 OUT PIMAGEHLP_MODULE64 ModuleInfo
01174 );
01175
01176 BOOL
01177 IMAGEAPI
01178 SymGetModuleInfoW64(
01179 IN HANDLE hProcess,
01180 IN DWORD64 qwAddr,
01181 OUT PIMAGEHLP_MODULEW64 ModuleInfo
01182 );
01183
01184 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01185 #define SymGetModuleInfo SymGetModuleInfo64
01186 #define SymGetModuleInfoW SymGetModuleInfoW64
01187 #else
01188 BOOL
01189 IMAGEAPI
01190 SymGetModuleInfo(
01191 IN HANDLE hProcess,
01192 IN DWORD dwAddr,
01193 OUT PIMAGEHLP_MODULE ModuleInfo
01194 );
01195
01196 BOOL
01197 IMAGEAPI
01198 SymGetModuleInfoW(
01199 IN HANDLE hProcess,
01200 IN DWORD dwAddr,
01201 OUT PIMAGEHLP_MODULEW ModuleInfo
01202 );
01203 #endif
01204
01205 DWORD64
01206 IMAGEAPI
01207 SymGetModuleBase64(
01208 IN HANDLE hProcess,
01209 IN DWORD64 qwAddr
01210 );
01211
01212 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01213 #define SymGetModuleBase SymGetModuleBase64
01214 #else
01215 DWORD
01216 IMAGEAPI
01217 SymGetModuleBase(
01218 IN HANDLE hProcess,
01219 IN DWORD dwAddr
01220 );
01221 #endif
01222
01223 BOOL
01224 IMAGEAPI
01225 SymGetSymNext64(
01226 IN HANDLE hProcess,
01227 IN OUT PIMAGEHLP_SYMBOL64 Symbol
01228 );
01229
01230 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01231 #define SymGetSymNext SymGetSymNext64
01232 #else
01233 BOOL
01234 IMAGEAPI
01235 SymGetSymNext(
01236 IN HANDLE hProcess,
01237 IN OUT PIMAGEHLP_SYMBOL Symbol
01238 );
01239 #endif
01240
01241 BOOL
01242 IMAGEAPI
01243 SymGetSymPrev64(
01244 IN HANDLE hProcess,
01245 IN OUT PIMAGEHLP_SYMBOL64 Symbol
01246 );
01247
01248 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01249 #define SymGetSymPrev SymGetSymPrev64
01250 #else
01251 BOOL
01252 IMAGEAPI
01253 SymGetSymPrev(
01254 IN HANDLE hProcess,
01255 IN OUT PIMAGEHLP_SYMBOL Symbol
01256 );
01257 #endif
01258
01259 BOOL
01260 IMAGEAPI
01261 SymGetLineFromAddr64(
01262 IN HANDLE hProcess,
01263 IN DWORD64 qwAddr,
01264 OUT PDWORD pdwDisplacement,
01265 OUT PIMAGEHLP_LINE64 Line64
01266 );
01267
01268 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01269 #define SymGetLineFromAddr SymGetLineFromAddr64
01270 #else
01271 BOOL
01272 IMAGEAPI
01273 SymGetLineFromAddr(
01274 IN HANDLE hProcess,
01275 IN DWORD dwAddr,
01276 OUT PDWORD pdwDisplacement,
01277 OUT PIMAGEHLP_LINE Line
01278 );
01279 #endif
01280
01281 BOOL
01282 IMAGEAPI
01283 SymGetLineFromName64(
01284 IN HANDLE hProcess,
01285 IN PSTR ModuleName,
01286 IN PSTR FileName,
01287 IN DWORD dwLineNumber,
01288 OUT PLONG plDisplacement,
01289 IN OUT PIMAGEHLP_LINE64 Line
01290 );
01291
01292 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01293 #define SymGetLineFromName SymGetLineFromName64
01294 #else
01295 BOOL
01296 IMAGEAPI
01297 SymGetLineFromName(
01298 IN HANDLE hProcess,
01299 IN PSTR ModuleName,
01300 IN PSTR FileName,
01301 IN DWORD dwLineNumber,
01302 OUT PLONG plDisplacement,
01303 IN OUT PIMAGEHLP_LINE Line
01304 );
01305 #endif
01306
01307 BOOL
01308 IMAGEAPI
01309 SymGetLineNext64(
01310 IN HANDLE hProcess,
01311 IN OUT PIMAGEHLP_LINE64 Line
01312 );
01313
01314 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01315 #define SymGetLineNext SymGetLineNext64
01316 #else
01317 BOOL
01318 IMAGEAPI
01319 SymGetLineNext(
01320 IN HANDLE hProcess,
01321 IN OUT PIMAGEHLP_LINE Line
01322 );
01323 #endif
01324
01325 BOOL
01326 IMAGEAPI
01327 SymGetLinePrev64(
01328 IN HANDLE hProcess,
01329 IN OUT PIMAGEHLP_LINE64 Line
01330 );
01331
01332 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01333 #define SymGetLinePrev SymGetLinePrev64
01334 #else
01335 BOOL
01336 IMAGEAPI
01337 SymGetLinePrev(
01338 IN HANDLE hProcess,
01339 IN OUT PIMAGEHLP_LINE Line
01340 );
01341 #endif
01342
01343 BOOL
01344 IMAGEAPI
01345 SymMatchFileName(
01346 IN PSTR FileName,
01347 IN PSTR Match,
01348 OUT PSTR *FileNameStop,
01349 OUT PSTR *MatchStop
01350 );
01351
01352 BOOL
01353 IMAGEAPI
01354 SymInitialize(
01355 IN HANDLE hProcess,
01356 IN PSTR UserSearchPath,
01357 IN BOOL fInvadeProcess
01358 );
01359
01360 BOOL
01361 IMAGEAPI
01362 SymGetSearchPath(
01363 IN HANDLE hProcess,
01364 OUT PSTR SearchPath,
01365 IN DWORD SearchPathLength
01366 );
01367
01368 BOOL
01369 IMAGEAPI
01370 SymSetSearchPath(
01371 IN HANDLE hProcess,
01372 IN PSTR SearchPath
01373 );
01374
01375 DWORD64
01376 IMAGEAPI
01377 SymLoadModule64(
01378 IN HANDLE hProcess,
01379 IN HANDLE hFile,
01380 IN PSTR ImageName,
01381 IN PSTR ModuleName,
01382 IN DWORD64 BaseOfDll,
01383 IN DWORD SizeOfDll
01384 );
01385
01386 #define SLMFLAG_VIRTUAL 0x1
01387
01388 DWORD64
01389 IMAGEAPI
01390 SymLoadModuleEx(
01391 IN HANDLE hProcess,
01392 IN HANDLE hFile,
01393 IN PSTR ImageName,
01394 IN PSTR ModuleName,
01395 IN DWORD64 BaseOfDll,
01396 IN DWORD DllSize,
01397 IN PMODLOAD_DATA Data,
01398 IN DWORD Flags
01399 );
01400
01401 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01402 #define SymLoadModule SymLoadModule64
01403 #else
01404 DWORD
01405 IMAGEAPI
01406 SymLoadModule(
01407 IN HANDLE hProcess,
01408 IN HANDLE hFile,
01409 IN PSTR ImageName,
01410 IN PSTR ModuleName,
01411 IN DWORD BaseOfDll,
01412 IN DWORD SizeOfDll
01413 );
01414 #endif
01415
01416 BOOL
01417 IMAGEAPI
01418 SymUnloadModule64(
01419 IN HANDLE hProcess,
01420 IN DWORD64 BaseOfDll
01421 );
01422
01423 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01424 #define SymUnloadModule SymUnloadModule64
01425 #else
01426 BOOL
01427 IMAGEAPI
01428 SymUnloadModule(
01429 IN HANDLE hProcess,
01430 IN DWORD BaseOfDll
01431 );
01432 #endif
01433
01434 BOOL
01435 IMAGEAPI
01436 SymUnDName64(
01437 IN PIMAGEHLP_SYMBOL64 sym,
01438 OUT PSTR UnDecName,
01439 IN DWORD UnDecNameLength
01440 );
01441
01442 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01443 #define SymUnDName SymUnDName64
01444 #else
01445 BOOL
01446 IMAGEAPI
01447 SymUnDName(
01448 IN PIMAGEHLP_SYMBOL sym,
01449 OUT PSTR UnDecName,
01450 IN DWORD UnDecNameLength
01451 );
01452 #endif
01453
01454 BOOL
01455 IMAGEAPI
01456 SymRegisterCallback64(
01457 IN HANDLE hProcess,
01458 IN PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,
01459 IN ULONG64 UserContext
01460 );
01461
01462 BOOL
01463 IMAGEAPI
01464 SymRegisterFunctionEntryCallback64(
01465 IN HANDLE hProcess,
01466 IN PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,
01467 IN ULONG64 UserContext
01468 );
01469
01470 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01471 #define SymRegisterCallback SymRegisterCallback64
01472 #define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
01473 #else
01474 BOOL
01475 IMAGEAPI
01476 SymRegisterCallback(
01477 IN HANDLE hProcess,
01478 IN PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
01479 IN PVOID UserContext
01480 );
01481
01482 BOOL
01483 IMAGEAPI
01484 SymRegisterFunctionEntryCallback(
01485 IN HANDLE hProcess,
01486 IN PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,
01487 IN PVOID UserContext
01488 );
01489 #endif
01490
01491 typedef struct _IMAGEHLP_SYMBOL_SRC {
01492 DWORD sizeofstruct;
01493 DWORD type;
01494 char file[MAX_PATH];
01495 } IMAGEHLP_SYMBOL_SRC, *PIMAGEHLP_SYMBOL_SRC;
01496
01497 typedef struct _MODULE_TYPE_INFO {
01498 USHORT dataLength;
01499 USHORT leaf;
01500 BYTE data[1];
01501 } MODULE_TYPE_INFO, *PMODULE_TYPE_INFO;
01502
01503 typedef struct _SYMBOL_INFO {
01504 ULONG SizeOfStruct;
01505 ULONG TypeIndex;
01506 ULONG64 Reserved[2];
01507 ULONG info;
01508 ULONG Size;
01509 ULONG64 ModBase;
01510 ULONG Flags;
01511 ULONG64 Value;
01512 ULONG64 Address;
01513 ULONG Register;
01514 ULONG Scope;
01515 ULONG Tag;
01516 ULONG NameLen;
01517 ULONG MaxNameLen;
01518 CHAR Name[1];
01519 } SYMBOL_INFO, *PSYMBOL_INFO;
01520
01521 typedef struct _SYMBOL_INFO_PACKAGE {
01522 SYMBOL_INFO si;
01523 CHAR name[MAX_SYM_NAME + 1];
01524 } SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
01525
01526 typedef struct _IMAGEHLP_STACK_FRAME
01527 {
01528 ULONG64 InstructionOffset;
01529 ULONG64 ReturnOffset;
01530 ULONG64 FrameOffset;
01531 ULONG64 StackOffset;
01532 ULONG64 BackingStoreOffset;
01533 ULONG64 FuncTableEntry;
01534 ULONG64 Params[4];
01535 ULONG64 Reserved[5];
01536 BOOL Virtual;
01537 ULONG Reserved2;
01538 } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
01539
01540 typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
01541
01542 BOOL
01543 IMAGEAPI
01544 SymSetContext(
01545 HANDLE hProcess,
01546 PIMAGEHLP_STACK_FRAME StackFrame,
01547 PIMAGEHLP_CONTEXT Context
01548 );
01549
01550 BOOL
01551 IMAGEAPI
01552 SymFromAddr(
01553 IN HANDLE hProcess,
01554 IN DWORD64 Address,
01555 OUT PDWORD64 Displacement,
01556 IN OUT PSYMBOL_INFO Symbol
01557 );
01558
01559 BOOL
01560 IMAGEAPI
01561 SymFromName(
01562 IN HANDLE hProcess,
01563 IN LPSTR Name,
01564 OUT PSYMBOL_INFO Symbol
01565 );
01566
01567 typedef BOOL
01568 (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(
01569 PSYMBOL_INFO pSymInfo,
01570 ULONG SymbolSize,
01571 PVOID UserContext
01572 );
01573
01574 BOOL
01575 IMAGEAPI
01576 SymEnumSymbols(
01577 IN HANDLE hProcess,
01578 IN ULONG64 BaseOfDll,
01579 IN PCSTR Mask,
01580 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
01581 IN PVOID UserContext
01582 );
01583
01584 BOOL
01585 IMAGEAPI
01586 SymEnumSymbolsForAddr(
01587 IN HANDLE hProcess,
01588 IN DWORD64 Address,
01589 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
01590 IN PVOID UserContext
01591 );
01592
01593 typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
01594 TI_GET_SYMTAG,
01595 TI_GET_SYMNAME,
01596 TI_GET_LENGTH,
01597 TI_GET_TYPE,
01598 TI_GET_TYPEID,
01599 TI_GET_BASETYPE,
01600 TI_GET_ARRAYINDEXTYPEID,
01601 TI_FINDCHILDREN,
01602 TI_GET_DATAKIND,
01603 TI_GET_ADDRESSOFFSET,
01604 TI_GET_OFFSET,
01605 TI_GET_VALUE,
01606 TI_GET_COUNT,
01607 TI_GET_CHILDRENCOUNT,
01608 TI_GET_BITPOSITION,
01609 TI_GET_VIRTUALBASECLASS,
01610 TI_GET_VIRTUALTABLESHAPEID,
01611 TI_GET_VIRTUALBASEPOINTEROFFSET,
01612 TI_GET_CLASSPARENTID,
01613 TI_GET_NESTED,
01614 TI_GET_SYMINDEX,
01615 TI_GET_LEXICALPARENT,
01616 TI_GET_ADDRESS,
01617 TI_GET_THISADJUST,
01618 TI_GET_UDTKIND,
01619 TI_IS_EQUIV_TO,
01620 TI_GET_CALLING_CONVENTION,
01621 } IMAGEHLP_SYMBOL_TYPE_INFO;
01622
01623 typedef struct _TI_FINDCHILDREN_PARAMS {
01624 ULONG Count;
01625 ULONG Start;
01626 ULONG ChildId[1];
01627 } TI_FINDCHILDREN_PARAMS;
01628
01629 BOOL
01630 IMAGEAPI
01631 SymGetTypeInfo(
01632 IN HANDLE hProcess,
01633 IN DWORD64 ModBase,
01634 IN ULONG TypeId,
01635 IN IMAGEHLP_SYMBOL_TYPE_INFO GetType,
01636 OUT PVOID pInfo
01637 );
01638
01639 BOOL
01640 IMAGEAPI
01641 SymEnumTypes(
01642 IN HANDLE hProcess,
01643 IN ULONG64 BaseOfDll,
01644 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
01645 IN PVOID UserContext
01646 );
01647
01648 BOOL
01649 IMAGEAPI
01650 SymGetTypeFromName(
01651 IN HANDLE hProcess,
01652 IN ULONG64 BaseOfDll,
01653 IN LPSTR Name,
01654 OUT PSYMBOL_INFO Symbol
01655 );
01656
01657 BOOL
01658 IMAGEAPI
01659 SymAddSymbol(
01660 IN HANDLE hProcess,
01661 IN ULONG64 BaseOfDll,
01662 IN PCSTR Name,
01663 IN DWORD64 Address,
01664 IN DWORD Size,
01665 IN DWORD Flags
01666 );
01667
01668 BOOL
01669 IMAGEAPI
01670 SymDeleteSymbol(
01671 IN HANDLE hProcess,
01672 IN ULONG64 BaseOfDll,
01673 IN PCSTR Name,
01674 IN DWORD64 Address,
01675 IN DWORD Flags
01676 );
01677
01678 typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(
01679 DWORD DataType,
01680 PVOID* Data,
01681 LPDWORD DataLength,
01682 PVOID UserData
01683 );
01684
01685 BOOL
01686 WINAPI
01687 DbgHelpCreateUserDump(
01688 IN LPSTR FileName,
01689 IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,
01690 IN PVOID UserData
01691 );
01692
01693 BOOL
01694 WINAPI
01695 DbgHelpCreateUserDumpW(
01696 IN LPWSTR FileName,
01697 IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,
01698 IN PVOID UserData
01699 );
01700
01701 BOOL
01702 IMAGEAPI
01703 SymGetSymFromAddr64(
01704 IN HANDLE hProcess,
01705 IN DWORD64 qwAddr,
01706 OUT PDWORD64 pdwDisplacement,
01707 OUT PIMAGEHLP_SYMBOL64 Symbol
01708 );
01709
01710 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01711 #define SymGetSymFromAddr SymGetSymFromAddr64
01712 #else
01713 BOOL
01714 IMAGEAPI
01715 SymGetSymFromAddr(
01716 IN HANDLE hProcess,
01717 IN DWORD dwAddr,
01718 OUT PDWORD pdwDisplacement,
01719 OUT PIMAGEHLP_SYMBOL Symbol
01720 );
01721 #endif
01722
01723 BOOL
01724 IMAGEAPI
01725 SymGetSymFromName64(
01726 IN HANDLE hProcess,
01727 IN PSTR Name,
01728 OUT PIMAGEHLP_SYMBOL64 Symbol
01729 );
01730
01731 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
01732 #define SymGetSymFromName SymGetSymFromName64
01733 #else
01734 BOOL
01735 IMAGEAPI
01736 SymGetSymFromName(
01737 IN HANDLE hProcess,
01738 IN PSTR Name,
01739 OUT PIMAGEHLP_SYMBOL Symbol
01740 );
01741 #endif
01742
01743 DBHLP_DEPRECIATED
01744 BOOL
01745 IMAGEAPI
01746 FindFileInPath(
01747 HANDLE hprocess,
01748 LPSTR SearchPath,
01749 LPSTR FileName,
01750 PVOID id,
01751 DWORD two,
01752 DWORD three,
01753 DWORD flags,
01754 LPSTR FilePath
01755 );
01756
01757 DBHLP_DEPRECIATED
01758 BOOL
01759 IMAGEAPI
01760 FindFileInSearchPath(
01761 HANDLE hprocess,
01762 LPSTR SearchPath,
01763 LPSTR FileName,
01764 DWORD one,
01765 DWORD two,
01766 DWORD three,
01767 LPSTR FilePath
01768 );
01769
01770 DBHLP_DEPRECIATED
01771 BOOL
01772 IMAGEAPI
01773 SymEnumSym(
01774 IN HANDLE hProcess,
01775 IN ULONG64 BaseOfDll,
01776 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
01777 IN PVOID UserContext
01778 );
01779
01780 #define SYMF_OMAP_GENERATED 0x00000001
01781 #define SYMF_OMAP_MODIFIED 0x00000002
01782 #define SYMF_REGISTER 0x00000008
01783 #define SYMF_REGREL 0x00000010
01784 #define SYMF_FRAMEREL 0x00000020
01785 #define SYMF_PARAMETER 0x00000040
01786 #define SYMF_LOCAL 0x00000080
01787 #define SYMF_CONSTANT 0x00000100
01788 #define SYMF_EXPORT 0x00000200
01789 #define SYMF_FORWARDER 0x00000400
01790 #define SYMF_FUNCTION 0x00000800
01791 #define SYMF_VIRTUAL 0x00001000
01792 #define SYMF_THUNK 0x00002000
01793 #define SYMF_TLSREL 0x00004000
01794
01795 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
01796 #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
01797 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
01798 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
01799 #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
01800 #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
01801 #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
01802 #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
01803 #define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
01804 #define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
01805 #define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
01806
01807 #include <pshpack4.h>
01808
01809 #pragma warning(disable:4200)
01810
01811 #define MINIDUMP_SIGNATURE ('PMDM')
01812 #define MINIDUMP_VERSION (42899)
01813 typedef DWORD RVA;
01814 typedef ULONG64 RVA64;
01815
01816 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
01817 ULONG32 DataSize;
01818 RVA Rva;
01819 } MINIDUMP_LOCATION_DESCRIPTOR;
01820
01821 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
01822 ULONG64 DataSize;
01823 RVA64 Rva;
01824 } MINIDUMP_LOCATION_DESCRIPTOR64;
01825
01826 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
01827 ULONG64 StartOfMemoryRange;
01828 MINIDUMP_LOCATION_DESCRIPTOR Memory;
01829 } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
01830
01831 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
01832 ULONG64 StartOfMemoryRange;
01833 ULONG64 DataSize;
01834 } MINIDUMP_MEMORY_DESCRIPTOR64, *PMINIDUMP_MEMORY_DESCRIPTOR64;
01835
01836 typedef struct _MINIDUMP_HEADER {
01837 ULONG32 Signature;
01838 ULONG32 Version;
01839 ULONG32 NumberOfStreams;
01840 RVA StreamDirectoryRva;
01841 ULONG32 CheckSum;
01842 union {
01843 ULONG32 Reserved;
01844 ULONG32 TimeDateStamp;
01845 };
01846 ULONG64 Flags;
01847 } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
01848
01849 typedef struct _MINIDUMP_DIRECTORY {
01850 ULONG32 StreamType;
01851 MINIDUMP_LOCATION_DESCRIPTOR Location;
01852 } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
01853
01854 typedef struct _MINIDUMP_STRING {
01855 ULONG32 Length;
01856 WCHAR Buffer [0];
01857 } MINIDUMP_STRING, *PMINIDUMP_STRING;
01858
01859 typedef enum _MINIDUMP_STREAM_TYPE {
01860
01861 UnusedStream = 0,
01862 ReservedStream0 = 1,
01863 ReservedStream1 = 2,
01864 ThreadListStream = 3,
01865 ModuleListStream = 4,
01866 MemoryListStream = 5,
01867 ExceptionStream = 6,
01868 SystemInfoStream = 7,
01869 ThreadExListStream = 8,
01870 Memory64ListStream = 9,
01871 CommentStreamA = 10,
01872 CommentStreamW = 11,
01873 HandleDataStream = 12,
01874 FunctionTableStream = 13,
01875 UnloadedModuleListStream = 14,
01876 MiscInfoStream = 15,
01877
01878 LastReservedStream = 0xffff
01879
01880 } MINIDUMP_STREAM_TYPE;
01881
01882 #if defined(_MSC_VER)
01883 #if _MSC_VER >= 800
01884 #if _MSC_VER >= 1200
01885 #pragma warning(push)
01886 #endif
01887 #pragma warning(disable:4201)
01888 #endif
01889 #endif
01890
01891 typedef struct _MINIDUMP_SYSTEM_INFO {
01892
01893
01894
01895
01896
01897
01898 USHORT ProcessorArchitecture;
01899 USHORT ProcessorLevel;
01900 USHORT ProcessorRevision;
01901
01902 union {
01903 USHORT Reserved0;
01904 struct {
01905 UCHAR NumberOfProcessors;
01906 UCHAR ProductType;
01907 };
01908 };
01909
01910
01911
01912
01913
01914
01915
01916 ULONG32 MajorVersion;
01917 ULONG32 MinorVersion;
01918 ULONG32 BuildNumber;
01919 ULONG32 PlatformId;
01920
01921
01922
01923
01924
01925 RVA CSDVersionRva;
01926
01927 union {
01928 ULONG32 Reserved1;
01929 struct {
01930 USHORT SuiteMask;
01931 USHORT Reserved2;
01932 };
01933 };
01934
01935
01936
01937
01938
01939
01940
01941
01942
01943
01944
01945
01946 union _CPU_INFORMATION {
01947
01948
01949
01950
01951
01952 struct {
01953
01954
01955
01956
01957
01958
01959 ULONG32 VendorId [ 3 ];
01960
01961
01962
01963
01964
01965 ULONG32 VersionInformation;
01966
01967
01968
01969
01970
01971 ULONG32 FeatureInformation;
01972
01973
01974
01975
01976
01977
01978
01979 ULONG32 AMDExtendedCpuFeatures;
01980
01981 } X86CpuInfo;
01982
01983
01984
01985
01986
01987 struct {
01988
01989 ULONG64 ProcessorFeatures [ 2 ];
01990
01991 } OtherCpuInfo;
01992
01993 } Cpu;
01994
01995 } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
01996
01997 typedef union _CPU_INFORMATION CPU_INFORMATION, *PCPU_INFORMATION;
01998
01999 #if defined(_MSC_VER)
02000 #if _MSC_VER >= 800
02001 #if _MSC_VER >= 1200
02002 #pragma warning(pop)
02003 #else
02004 #pragma warning(disable:4201)
02005 #endif
02006 #endif
02007 #endif
02008
02009 C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4);
02010
02011 typedef struct _MINIDUMP_THREAD {
02012 ULONG32 ThreadId;
02013 ULONG32 SuspendCount;
02014 ULONG32 PriorityClass;
02015 ULONG32 Priority;
02016 ULONG64 Teb;
02017 MINIDUMP_MEMORY_DESCRIPTOR Stack;
02018 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
02019 } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
02020
02021 typedef struct _MINIDUMP_THREAD_LIST {
02022 ULONG32 NumberOfThreads;
02023 MINIDUMP_THREAD Threads [0];
02024 } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
02025
02026 typedef struct _MINIDUMP_THREAD_EX {
02027 ULONG32 ThreadId;
02028 ULONG32 SuspendCount;
02029 ULONG32 PriorityClass;
02030 ULONG32 Priority;
02031 ULONG64 Teb;
02032 MINIDUMP_MEMORY_DESCRIPTOR Stack;
02033 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
02034 MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
02035 } MINIDUMP_THREAD_EX, *PMINIDUMP_THREAD_EX;
02036
02037 typedef struct _MINIDUMP_THREAD_EX_LIST {
02038 ULONG32 NumberOfThreads;
02039 MINIDUMP_THREAD_EX Threads [0];
02040 } MINIDUMP_THREAD_EX_LIST, *PMINIDUMP_THREAD_EX_LIST;
02041
02042 typedef struct _MINIDUMP_EXCEPTION {
02043 ULONG32 ExceptionCode;
02044 ULONG32 ExceptionFlags;
02045 ULONG64 ExceptionRecord;
02046 ULONG64 ExceptionAddress;
02047 ULONG32 NumberParameters;
02048 ULONG32 __unusedAlignment;
02049 ULONG64 ExceptionInformation [ EXCEPTION_MAXIMUM_PARAMETERS ];
02050 } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
02051
02052 typedef struct MINIDUMP_EXCEPTION_STREAM {
02053 ULONG32 ThreadId;
02054 ULONG32 __alignment;
02055 MINIDUMP_EXCEPTION ExceptionRecord;
02056 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
02057 } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
02058
02059 typedef struct _MINIDUMP_MODULE {
02060 ULONG64 BaseOfImage;
02061 ULONG32 SizeOfImage;
02062 ULONG32 CheckSum;
02063 ULONG32 TimeDateStamp;
02064 RVA ModuleNameRva;
02065 VS_FIXEDFILEINFO VersionInfo;
02066 MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
02067 MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
02068 ULONG64 Reserved0;
02069 ULONG64 Reserved1;
02070 } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
02071
02072 typedef struct _MINIDUMP_MODULE_LIST {
02073 ULONG32 NumberOfModules;
02074 MINIDUMP_MODULE Modules [ 0 ];
02075 } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
02076
02077 typedef struct _MINIDUMP_MEMORY_LIST {
02078 ULONG32 NumberOfMemoryRanges;
02079 MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges [0];
02080 } MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
02081
02082 typedef struct _MINIDUMP_MEMORY64_LIST {
02083 ULONG64 NumberOfMemoryRanges;
02084 RVA64 BaseRva;
02085 MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges [0];
02086 } MINIDUMP_MEMORY64_LIST, *PMINIDUMP_MEMORY64_LIST;
02087
02088 typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
02089 DWORD ThreadId;
02090 PEXCEPTION_POINTERS ExceptionPointers;
02091 BOOL ClientPointers;
02092 } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
02093
02094 typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
02095 ULONG64 Handle;
02096 RVA TypeNameRva;
02097 RVA ObjectNameRva;
02098 ULONG32 Attributes;
02099 ULONG32 GrantedAccess;
02100 ULONG32 HandleCount;
02101 ULONG32 PointerCount;
02102 } MINIDUMP_HANDLE_DESCRIPTOR, *PMINIDUMP_HANDLE_DESCRIPTOR;
02103
02104 typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
02105 ULONG32 SizeOfHeader;
02106 ULONG32 SizeOfDescriptor;
02107 ULONG32 NumberOfDescriptors;
02108 ULONG32 Reserved;
02109 } MINIDUMP_HANDLE_DATA_STREAM, *PMINIDUMP_HANDLE_DATA_STREAM;
02110
02111 typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
02112 ULONG64 MinimumAddress;
02113 ULONG64 MaximumAddress;
02114 ULONG64 BaseAddress;
02115 ULONG32 EntryCount;
02116 ULONG32 SizeOfAlignPad;
02117 } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR, *PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
02118
02119 typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
02120 ULONG32 SizeOfHeader;
02121 ULONG32 SizeOfDescriptor;
02122 ULONG32 SizeOfNativeDescriptor;
02123 ULONG32 SizeOfFunctionEntry;
02124 ULONG32 NumberOfDescriptors;
02125 ULONG32 SizeOfAlignPad;
02126 } MINIDUMP_FUNCTION_TABLE_STREAM, *PMINIDUMP_FUNCTION_TABLE_STREAM;
02127
02128 typedef struct _MINIDUMP_UNLOADED_MODULE {
02129 ULONG64 BaseOfImage;
02130 ULONG32 SizeOfImage;
02131 ULONG32 CheckSum;
02132 ULONG32 TimeDateStamp;
02133 RVA ModuleNameRva;
02134 } MINIDUMP_UNLOADED_MODULE, *PMINIDUMP_UNLOADED_MODULE;
02135
02136 typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
02137 ULONG32 SizeOfHeader;
02138 ULONG32 SizeOfEntry;
02139 ULONG32 NumberOfEntries;
02140 } MINIDUMP_UNLOADED_MODULE_LIST, *PMINIDUMP_UNLOADED_MODULE_LIST;
02141
02142 #define MINIDUMP_MISC1_PROCESS_ID 0x00000001
02143 #define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
02144
02145 typedef struct _MINIDUMP_MISC_INFO {
02146 ULONG32 SizeOfInfo;
02147 ULONG32 Flags1;
02148 ULONG32 ProcessId;
02149 ULONG32 ProcessCreateTime;
02150 ULONG32 ProcessUserTime;
02151 ULONG32 ProcessKernelTime;
02152 } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
02153
02154 typedef struct _MINIDUMP_USER_RECORD {
02155 ULONG32 Type;
02156 MINIDUMP_LOCATION_DESCRIPTOR Memory;
02157 } MINIDUMP_USER_RECORD, *PMINIDUMP_USER_RECORD;
02158
02159 typedef struct _MINIDUMP_USER_STREAM {
02160 ULONG32 Type;
02161 ULONG BufferSize;
02162 PVOID Buffer;
02163
02164 } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
02165
02166 typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
02167 ULONG UserStreamCount;
02168 PMINIDUMP_USER_STREAM UserStreamArray;
02169 } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
02170
02171 typedef enum _MINIDUMP_CALLBACK_TYPE {
02172 ModuleCallback,
02173 ThreadCallback,
02174 ThreadExCallback,
02175 IncludeThreadCallback,
02176 IncludeModuleCallback,
02177 } MINIDUMP_CALLBACK_TYPE;
02178
02179 typedef struct _MINIDUMP_THREAD_CALLBACK {
02180 ULONG ThreadId;
02181 HANDLE ThreadHandle;
02182 CONTEXT Context;
02183 ULONG SizeOfContext;
02184 ULONG64 StackBase;
02185 ULONG64 StackEnd;
02186 } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
02187
02188 typedef struct _MINIDUMP_THREAD_EX_CALLBACK {
02189 ULONG ThreadId;
02190 HANDLE ThreadHandle;
02191 CONTEXT Context;
02192 ULONG SizeOfContext;
02193 ULONG64 StackBase;
02194 ULONG64 StackEnd;
02195 ULONG64 BackingStoreBase;
02196 ULONG64 BackingStoreEnd;
02197 } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
02198
02199 typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
02200 ULONG ThreadId;
02201 } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
02202
02203 typedef enum _THREAD_WRITE_FLAGS {
02204 ThreadWriteThread = 0x0001,
02205 ThreadWriteStack = 0x0002,
02206 ThreadWriteContext = 0x0004,
02207 ThreadWriteBackingStore = 0x0008,
02208 ThreadWriteInstructionWindow = 0x0010,
02209 ThreadWriteThreadData = 0x0020,
02210 } THREAD_WRITE_FLAGS;
02211
02212 typedef struct _MINIDUMP_MODULE_CALLBACK {
02213 PWCHAR FullPath;
02214 ULONG64 BaseOfImage;
02215 ULONG SizeOfImage;
02216 ULONG CheckSum;
02217 ULONG TimeDateStamp;
02218 VS_FIXEDFILEINFO VersionInfo;
02219 PVOID CvRecord;
02220 ULONG SizeOfCvRecord;
02221 PVOID MiscRecord;
02222 ULONG SizeOfMiscRecord;
02223 } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
02224
02225 typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
02226 ULONG64 BaseOfImage;
02227 } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
02228
02229 typedef enum _MODULE_WRITE_FLAGS {
02230 ModuleWriteModule = 0x0001,
02231 ModuleWriteDataSeg = 0x0002,
02232 ModuleWriteMiscRecord = 0x0004,
02233 ModuleWriteCvRecord = 0x0008,
02234 ModuleReferencedByMemory = 0x0010
02235 } MODULE_WRITE_FLAGS;
02236
02237 typedef struct _MINIDUMP_CALLBACK_INPUT {
02238 ULONG ProcessId;
02239 HANDLE ProcessHandle;
02240 ULONG CallbackType;
02241 union {
02242 MINIDUMP_THREAD_CALLBACK Thread;
02243 MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
02244 MINIDUMP_MODULE_CALLBACK Module;
02245 MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
02246 MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
02247 };
02248 } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
02249
02250 typedef struct _MINIDUMP_CALLBACK_OUTPUT {
02251 union {
02252 ULONG ModuleWriteFlags;
02253 ULONG ThreadWriteFlags;
02254 };
02255 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
02256
02257
02258
02259 typedef enum _MINIDUMP_TYPE {
02260 MiniDumpNormal = 0x0000,
02261 MiniDumpWithDataSegs = 0x0001,
02262 MiniDumpWithFullMemory = 0x0002,
02263 MiniDumpWithHandleData = 0x0004,
02264 MiniDumpFilterMemory = 0x0008,
02265 MiniDumpScanMemory = 0x0010,
02266 MiniDumpWithUnloadedModules = 0x0020,
02267 MiniDumpWithIndirectlyReferencedMemory = 0x0040,
02268 MiniDumpFilterModulePaths = 0x0080,
02269 MiniDumpWithProcessThreadData = 0x0100,
02270 MiniDumpWithPrivateReadWriteMemory = 0x0200,
02271 } MINIDUMP_TYPE;
02272
02273 typedef
02274 BOOL
02275 (WINAPI * MINIDUMP_CALLBACK_ROUTINE) (
02276 IN PVOID CallbackParam,
02277 IN CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,
02278 IN OUT PMINIDUMP_CALLBACK_OUTPUT CallbackOutput
02279 );
02280
02281 typedef struct _MINIDUMP_CALLBACK_INFORMATION {
02282 MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
02283 PVOID CallbackParam;
02284 } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
02285
02286 #define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
02287
02288 BOOL
02289 WINAPI
02290 MiniDumpWriteDump(
02291 IN HANDLE hProcess,
02292 IN DWORD ProcessId,
02293 IN HANDLE hFile,
02294 IN MINIDUMP_TYPE DumpType,
02295 IN CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, OPTIONAL
02296 IN CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, OPTIONAL
02297 IN CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam OPTIONAL
02298 );
02299
02300 BOOL
02301 WINAPI
02302 MiniDumpReadDumpStream(
02303 IN PVOID BaseOfDump,
02304 IN ULONG StreamNumber,
02305 OUT PMINIDUMP_DIRECTORY * Dir, OPTIONAL
02306 OUT PVOID * StreamPointer, OPTIONAL
02307 OUT ULONG * StreamSize OPTIONAL
02308 );
02309
02310 #include <poppack.h>
02311
02312 #ifdef __cplusplus
02313 }
02314 #endif
02315
02316 #endif