{ This file is part of the Free Pascal run time library. Copyright (c) 1999-2005 by Marco van de Voort member of the Free Pascal development team. See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Notes - some callback types had Pxxx naming in the original header. Since that is a-typical, I can't predict how Borland did handle that. If you have problems, add a bugreport. - some anonymous unions were not representable in FPC. As a first approx I added a dummy nested record union. } unit imagehlp; Interface Uses Windows; {$packrecords 8} {$ifdef win64} {$define imagehlp64} {$endif} Const IMAGE_SEPARATION = 64*1024; DBHHEADER_DEBUGDIRS = $1; API_VERSION_NUMBER = 9; SLMFLAG_VIRTUAL = $1; MINIDUMP_SIGNATURE = 'PMDM'; // dword value? MINIDUMP_VERSION = 42899; External_Library = 'imagehlp.dll'; MAX_SYM_NAME = 2000; BIND_NO_BOUND_IMPORTS = $00000001; BIND_NO_UPDATE = $00000002; BIND_ALL_IMAGES = $00000004; BIND_CACHE_IMPORT_DLLS = $00000008; // Cache dll's across // calls to BindImageEx // (same as NT 3.1->NT 4.0) BIND_REPORT_64BIT_VA = $00000010; CHECKSUM_SUCCESS = 0; CHECKSUM_OPEN_FAILURE = 1; CHECKSUM_MAP_FAILURE = 2; CHECKSUM_MAPVIEW_FAILURE = 3; CHECKSUM_UNICODE_FAILURE = 4; SPLITSYM_REMOVE_PRIVATE = $00000001; // Remove CV types/symbols and Fixup debug // Used for creating .dbg files that ship // as part of the product. SPLITSYM_EXTRACT_ALL = $00000002; // Extract all debug info from image. // Normally, FPO is left/* IN */ the image // to allow stack traces through the code. // Using this switch is similar to linking // with -debug:none except the .dbg file // exists... SPLITSYM_SYMBOLPATH_IS_SRC = $00000004; // The SymbolFilePath contains an alternate // path to locate the pdb. CERT_PE_IMAGE_DIGEST_DEBUG_INFO = $01; CERT_PE_IMAGE_DIGEST_RESOURCES = $02; CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = $04; CERT_PE_IMAGE_DIGEST_NON_PE_INFO = $08; // include data outside the PE image CERT_SECTION_TYPE_ANY = $FF; // Any Certificate type SSRVOPT_CALLBACK = $0001; SSRVOPT_DWORD = $0002; SSRVOPT_DWORDPTR = $0004; SSRVOPT_GUIDPTR = $0008; SSRVOPT_OLDGUIDPTR = $0010; SSRVOPT_UNATTENDED = $0020; SSRVOPT_NOCOPY = $0040; SSRVOPT_PARENTWIN = $0080; SSRVOPT_PARAMTYPE = $0100; SSRVOPT_SECURE = $0200; SSRVOPT_TRACE = $0400; SSRVOPT_SETCONTEXT = $0800; SSRVOPT_PROXY = $1000; SSRVOPT_DOWNSTREAM_STORE = $2000; SSRVOPT_RESET = ULONG_PTR(-1); SSRVACTION_TRACE = 1; SSRVACTION_QUERYCANCEL = 2; SSRVACTION_EVENT = 3; UNDNAME_COMPLETE = $0000; // Enable full undecoration UNDNAME_NO_LEADING_UNDERSCORES = $0001; // Remove leading underscores from MS extended keywords UNDNAME_NO_MS_KEYWORDS = $0002; // Disable expansion of MS extended keywords UNDNAME_NO_FUNCTION_RETURNS = $0004; // Disable expansion of return type for primary declaration UNDNAME_NO_ALLOCATION_MODEL = $0008; // Disable expansion of the declaration model UNDNAME_NO_ALLOCATION_LANGUAGE = $0010; // Disable expansion of the declaration language specifier UNDNAME_NO_MS_THISTYPE = $0020; // NYI Disable expansion of MS keywords on the 'this' type for primary declaration UNDNAME_NO_CV_THISTYPE = $0040; // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration UNDNAME_NO_THISTYPE = $0060; // Disable all modifiers on the 'this' type UNDNAME_NO_ACCESS_SPECIFIERS = $0080; // Disable expansion of access specifiers for members UNDNAME_NO_THROW_SIGNATURES = $0100; // Disable expansion of 'throw-signatures' for functions and pointers to functions UNDNAME_NO_MEMBER_TYPE = $0200; // Disable expansion of 'static' or 'virtual'ness of members UNDNAME_NO_RETURN_UDT_MODEL = $0400; // Disable expansion of MS model for UDT returns UNDNAME_32_BIT_DECODE = $0800; // Undecorate 32-bit decorated names UNDNAME_NAME_ONLY = $1000; // Crack only the name for primary declaration; // return just [scope::]name. Does expand template params UNDNAME_NO_ARGUMENTS = $2000; // Don't undecorate arguments to function UNDNAME_NO_SPECIAL_SYMS = $4000; // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc) SYMFLAG_VALUEPRESENT = $00000001; SYMFLAG_REGISTER = $00000008; SYMFLAG_REGREL = $00000010; SYMFLAG_FRAMEREL = $00000020; SYMFLAG_PARAMETER = $00000040; SYMFLAG_LOCAL = $00000080; SYMFLAG_CONSTANT = $00000100; SYMFLAG_EXPORT = $00000200; SYMFLAG_FORWARDER = $00000400; SYMFLAG_FUNCTION = $00000800; SYMFLAG_VIRTUAL = $00001000; SYMFLAG_THUNK = $00002000; SYMFLAG_TLSREL = $00004000; CBA_DEFERRED_SYMBOL_LOAD_START = $00000001; CBA_DEFERRED_SYMBOL_LOAD_COMPLETE = $00000002; CBA_DEFERRED_SYMBOL_LOAD_FAILURE = $00000003; CBA_SYMBOLS_UNLOADED = $00000004; CBA_DUPLICATE_SYMBOL = $00000005; CBA_READ_MEMORY = $00000006; CBA_DEFERRED_SYMBOL_LOAD_CANCEL = $00000007; CBA_SET_OPTIONS = $00000008; CBA_EVENT = $00000010; CBA_DEFERRED_SYMBOL_LOAD_PARTIAL = $00000020; CBA_DEBUG_INFO = $10000000; DSLFLAG_MISMATCHED_PDB = $1; DSLFLAG_MISMATCHED_DBG = $2; SYMOPT_CASE_INSENSITIVE = $00000001; SYMOPT_UNDNAME = $00000002; SYMOPT_DEFERRED_LOADS = $00000004; SYMOPT_NO_CPP = $00000008; SYMOPT_LOAD_LINES = $00000010; SYMOPT_OMAP_FIND_NEAREST = $00000020; SYMOPT_LOAD_ANYTHING = $00000040; SYMOPT_IGNORE_CVREC = $00000080; SYMOPT_NO_UNQUALIFIED_LOADS = $00000100; SYMOPT_FAIL_CRITICAL_ERRORS = $00000200; SYMOPT_EXACT_SYMBOLS = $00000400; SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = $00000800; SYMOPT_IGNORE_NT_SYMPATH = $00001000; SYMOPT_INCLUDE_32BIT_MODULES = $00002000; SYMOPT_PUBLICS_ONLY = $00004000; SYMOPT_NO_PUBLICS = $00008000; SYMOPT_AUTO_PUBLICS = $00010000; SYMOPT_NO_IMAGE_SEARCH = $00020000; SYMOPT_SECURE = $00040000; SYMOPT_NO_PROMPTS = $00080000; SYMOPT_DEBUG = $80000000; SYMENUMFLAG_FULLSRCH = 1; SYMENUMFLAG_SPEEDSRCH = 2; SYMF_OMAP_GENERATED = $00000001; SYMF_OMAP_MODIFIED = $00000002; SYMF_REGISTER = $00000008; SYMF_REGREL = $00000010; SYMF_FRAMEREL = $00000020; SYMF_PARAMETER = $00000040; SYMF_LOCAL = $00000080; SYMF_CONSTANT = $00000100; SYMF_EXPORT = $00000200; SYMF_FORWARDER = $00000400; SYMF_FUNCTION = $00000800; SYMF_VIRTUAL = $00001000; SYMF_THUNK = $00002000; SYMF_TLSREL = $00004000; // These values should also not be used. // They have been replaced by SYMFLAG_ values. IMAGEHLP_SYMBOL_INFO_VALUEPRESENT = 1; IMAGEHLP_SYMBOL_INFO_REGISTER = SYMF_REGISTER ; // = $0008 IMAGEHLP_SYMBOL_INFO_REGRELATIVE = SYMF_REGREL ; // = $0010 IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE = SYMF_FRAMEREL ; // = $0020 IMAGEHLP_SYMBOL_INFO_PARAMETER = SYMF_PARAMETER ; // = $0040 IMAGEHLP_SYMBOL_INFO_LOCAL = SYMF_LOCAL ; // = $0080 IMAGEHLP_SYMBOL_INFO_CONSTANT = SYMF_CONSTANT ; // = $0100 IMAGEHLP_SYMBOL_FUNCTION = SYMF_FUNCTION; // = $0800 IMAGEHLP_SYMBOL_VIRTUAL = SYMF_VIRTUAL; // = $1000 IMAGEHLP_SYMBOL_THUNK = SYMF_THUNK ; // = $2000 IMAGEHLP_SYMBOL_INFO_TLSRELATIVE = SYMF_TLSREL; // = $4000 MINIDUMP_MISC1_PROCESS_ID = $00000001; MINIDUMP_MISC1_PROCESS_TIMES = $00000002; Type DIGEST_HANDLE = POINTER; TDIGEST_HANDLE = DIGEST_HANDLE; PRVA = ^TRVA; TRVA = dword; RVA = TRVA; ULONG64 = QWORD; // to windows unit ? ULONG32 = CARDINAL; PRVA64 = ^TRVA64; TRVA64 = ULONG64; RVA64 = TRVA64; PPSTR = ^PSTR; _IMAGEHLP_STATUS_REASON =( BindOutOfMemory, BindRvaToVaFailed, BindNoRoomInImage, BindImportModuleFailed, BindImportProcedureFailed, BindImportModule, BindImportProcedure, BindForwarder, BindForwarderNOT, BindImageModified, BindExpandFileHeaders, BindImageComplete, BindMismatchedSymbols, BindSymbolsNotUpdated, BindImportProcedure32, BindImportProcedure64, BindForwarder32, BindForwarder64, BindForwarderNOT32, BindForwarderNOT64); IMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON; TIMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON; ADDRESS_MODE =( AddrMode1616, AddrMode1632, AddrModeReal, AddrModeFlat); TADDRESS_MODE = ADDRESS_MODE; SYM_TYPE =( SymNone = 0, SymCoff, SymCv, SymPdb, SymExport, SymDeferred, SymSym, // .sym file SymDia, SymVirtual, NumSymTypes); TSYM_TYPE = SYM_TYPE; _IMAGEHLP_SYMBOL_TYPE_INFO = ( TI_GET_SYMTAG, TI_GET_SYMNAME, TI_GET_LENGTH, TI_GET_TYPE, TI_GET_TYPEID, TI_GET_BASETYPE, TI_GET_ARRAYINDEXTYPEID, TI_FINDCHILDREN, TI_GET_DATAKIND, TI_GET_ADDRESSOFFSET, TI_GET_OFFSET, TI_GET_VALUE, TI_GET_COUNT, TI_GET_CHILDRENCOUNT, TI_GET_BITPOSITION, TI_GET_VIRTUALBASECLASS, TI_GET_VIRTUALTABLESHAPEID, TI_GET_VIRTUALBASEPOINTEROFFSET, TI_GET_CLASSPARENTID, TI_GET_NESTED, TI_GET_SYMINDEX, TI_GET_LEXICALPARENT, TI_GET_ADDRESS, TI_GET_THISADJUST, TI_GET_UDTKIND, TI_IS_EQUIV_TO, TI_GET_CALLING_CONVENTION); IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO; TIMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO; _MINIDUMP_STREAM_TYPE = ( UnusedStream = 0, ReservedStream0 = 1, ReservedStream1 = 2, ThreadListStream = 3, ModuleListStream = 4, MemoryListStream = 5, ExceptionStream = 6, SystemInfoStream = 7, ThreadExListStream = 8, Memory64ListStream = 9, CommentStreamA = 10, CommentStreamW = 11, HandleDataStream = 12, FunctionTableStream = 13, UnloadedModuleListStream = 14, MiscInfoStream = 15, LastReservedStream = $ffff); MINIDUMP_STREAM_TYPE = _MINIDUMP_STREAM_TYPE; _MINIDUMP_CALLBACK_TYPE =( ModuleCallback, ThreadCallback, ThreadExCallback, IncludeThreadCallback, IncludeModuleCallback, MemoryCallback); MINIDUMP_CALLBACK_TYPE = _MINIDUMP_CALLBACK_TYPE; _THREAD_WRITE_FLAGS =( ThreadWriteThread = $0001, ThreadWriteStack = $0002, ThreadWriteContext = $0004, ThreadWriteBackingStore = $0008, ThreadWriteInstructionWindow = $0010, ThreadWriteThreadData = $0020); THREAD_WRITE_FLAGS = _THREAD_WRITE_FLAGS; _MODULE_WRITE_FLAGS =( ModuleWriteModule = $0001, ModuleWriteDataSeg = $0002, ModuleWriteMiscRecord = $0004, ModuleWriteCvRecord = $0008, ModuleReferencedByMemory = $0010); MODULE_WRITE_FLAGS = _MODULE_WRITE_FLAGS; tagan = ( sevInfo = 0, sevProblem, sevAttn, sevFatal, sevMax ); Anonymous = ( hdBase = 0, // root directory for dbghelp hdSym, // where symbols are stored hdSrc, // where source is stored hdMax // end marker ); _MINIDUMP_TYPE = ( MiniDumpNormal = $0000, MiniDumpWithDataSegs = $0001, MiniDumpWithFullMemory = $0002, MiniDumpWithHandleData = $0004, MiniDumpFilterMemory = $0008, MiniDumpScanMemory = $0010, MiniDumpWithUnloadedModules = $0020, MiniDumpWithIndirectlyReferencedMemory = $0040, MiniDumpFilterModulePaths = $0080, MiniDumpWithProcessThreadData = $0100, MiniDumpWithPrivateReadWriteMemory = $0200, MiniDumpWithoutOPTIONALData = $0400); MINIDUMP_TYPE = _MINIDUMP_TYPE; TMINIDUMP_TYPE = _MINIDUMP_TYPE; TLOADED_IMAGE = record ModuleName : PSTR; hFile : THANDLE; MappedAddress : PUCHAR; {$ifdef IMAGEHLP64} FileHeader : PIMAGE_NT_HEADERS64; {$else} FileHeader : PIMAGE_NT_HEADERS32; {$endif} LastRvaSection : PIMAGE_SECTION_HEADER; NumberOfSections : ULONG; Sections : PIMAGE_SECTION_HEADER; Characteristics : ULONG; fSystemImage : bytebool; fDOSImage : bytebool; Links : TLISTENTRY; SizeOfImage : ULONG; end; LOADED_IMAGE = TLOADED_IMAGE; PLOADED_IMAGE = ^TLOADED_IMAGE; PPLOADED_IMAGE = ^PLOADED_IMAGE; {$ifndef win64} PIMAGE_DEBUG_INFORMATION = ^TIMAGE_DEBUG_INFORMATION; TIMAGE_DEBUG_INFORMATION = record List : TLISTENTRY; ReservedSize : DWORD; ReservedMappedBase : POINTER; ReservedMachine : USHORT; ReservedCharacteristics : USHORT; ReservedCheckSum : DWORD; ImageBase : DWORD; SizeOfImage : DWORD; ReservedNumberOfSections : DWORD; ReservedSections : PIMAGE_SECTION_HEADER; ReservedExportedNamesSize : DWORD; ReservedExportedNames : PSTR; ReservedNumberOfFunctionTableEntries : DWORD; ReservedFunctionTableEntries : PIMAGE_FUNCTION_ENTRY; ReservedLowestFunctionStartingAddress : DWORD; ReservedHighestFunctionEndingAddress : DWORD; ReservedNumberOfFpoTableEntries : DWORD; ReservedFpoTableEntries : PFPO_DATA; SizeOfCoffSymbols : DWORD; CoffSymbols : PIMAGE_COFF_SYMBOLS_HEADER; ReservedSizeOfCodeViewSymbols : DWORD; ReservedCodeViewSymbols : pointer; ImageFilePath : PSTR; ImageFileName : PSTR; ReservedDebugFilePath : PSTR; ReservedTimeDateStamp : DWORD; ReservedRomImage : bool; ReservedDebugDirectory : PIMAGE_DEBUG_DIRECTORY; ReservedNumberOfDebugDirectories : DWORD; ReservedOriginalFunctionTableBaseAddress : DWORD; Reserved : array[0..1] of DWORD; end; IMAGE_DEBUG_INFORMATION = TIMAGE_DEBUG_INFORMATION; {$ENDIF} PMODLOAD_DATA = ^TMODLOAD_DATA; TMODLOAD_DATA = record ssize : DWORD; ssig : DWORD; data : POINTER; _size : DWORD; flags : DWORD; end; MODLOAD_DATA = TMODLOAD_DATA; tagADDRESS64 = record Offset : dword64; Segment : word; Mode : TADDRESS_MODE; end; TADDRESS64 = tagADDRESS64; PADDRESS64 = ^TADDRESS64; LPADDRESS64 = PADDRESS64; {$IFDEF IMAGEHLP64} TADDRESS=TADDRESS64; PADDRESS=PADDRESS64; LPADDRESS=PADDRESS64; {$ELSE} tagADDRESS = record Offset : dword; Segment : word; Mode : TADDRESS_MODE; end; TADDRESS = tagADDRESS; PADDRESS = ^TADDRESS; LPADDRESS = PADDRESS; {$ENDIF} PKDHELP64 = ^TKDHELP64; TKDHELP64 = record Thread : DWORD64; ThCallbackStack : DWORD; ThCallbackBStore : DWORD; NextCallback : DWORD; FramePointer : DWORD; KiCallUserMode : DWORD64; KeUserCallbackDispatcher : DWORD64; SystemRangeStart : DWORD64; Reserved : array[0..7] of DWORD64; end; KDHELP64 = TKDHELP64; {$IFDEF IMAGEHLP64} TKDHELP = KDHELP64; KDHELP = KDHELP64; PKDHELP = PKDHELP64; {$ELSE} PKDHELP = ^TKDHELP; TKDHELP = record Thread : DWORD; ThCallbackStack : DWORD; NextCallback : DWORD; FramePointer : DWORD; KiCallUserMode : DWORD; KeUserCallbackDispatcher : DWORD; SystemRangeStart : DWORD; ThCallbackBStore : DWORD; Reserved : array[0..7] of DWORD; end; KDHELP = TKDHELP; {$ENDIF} tagSTACKFRAME64 = record AddrPC : TADDRESS64; AddrReturn : TADDRESS64; AddrFrame : TADDRESS64; AddrStack : TADDRESS64; AddrBStore : TADDRESS64; FuncTableEntry : POINTER; Params : array[0..3] of DWORD64; Far : BOOL; Virtual : BOOL; Reserved : array[0..2] of DWORD64; KdHelp : TKDHELP64; end; TSTACKFRAME64 = tagSTACKFRAME64; PSTACKFRAME64 = ^TSTACKFRAME64; LPSTACKFRAME64= ^TSTACKFRAME64; {$IFDEF IMAGEHLP64} STACKFRAME = TSTACKFRAME64; LPSTACKFRAME = LPSTACKFRAME64; TSTACKFRAME = TSTACKFRAME64; PSTACKFRAME = PSTACKFRAME64; {$ELSE} tagSTACKFRAME = record AddrPC : TADDRESS; AddrReturn : TADDRESS; AddrFrame : TADDRESS; AddrStack : TADDRESS; FuncTableEntry : POINTER; Params : array[0..3] of DWORD; _Far : BOOL; _Virtual : BOOL; Reserved : array[0..2] of DWORD; KdHelp : TKDHELP; AddrBStore : TADDRESS; end; TSTACKFRAME = tagSTACKFRAME; PSTACKFRAME = ^TSTACKFRAME; LPSTACKFRAME= ^TSTACKFRAME; {$ENDIF} PAPI_VERSION = ^TAPI_VERSION; LPAPI_VERSION= PAPI_VERSION; TAPI_VERSION = record MajorVersion : ushort; MinorVersion : ushort; Revision : ushort; Reserved : ushort; end; API_VERSION = TAPI_VERSION; PIMAGEHLP_SYMBOL64 = ^TIMAGEHLP_SYMBOL64; TIMAGEHLP_SYMBOL64 = record SizeOfStruct : dword; Address : dword64; Size : dword; Flags : dword; MaxNameLength : dword; Name : array[0..0] of TCHAR; end; IMAGEHLP_SYMBOL64 = TIMAGEHLP_SYMBOL64; LPIMAGEHLP_SYMBOL64 = PIMAGEHLP_SYMBOL64; PIMAGEHLP_SYMBOL64_PACKAGE = ^TIMAGEHLP_SYMBOL64_PACKAGE; TIMAGEHLP_SYMBOL64_PACKAGE = record sym : TIMAGEHLP_SYMBOL64; name : array[0..(MAX_SYM_NAME+1)-1] of TCHAR; end; IMAGEHLP_SYMBOL64_PACKAGE = TIMAGEHLP_SYMBOL64_PACKAGE; LPIMAGEHLP_SYMBOL64_PACKAGE = ^TIMAGEHLP_SYMBOL64_PACKAGE; {$IFDEF IMAGEHLP64} IMAGEHLP_SYMBOL = IMAGEHLP_SYMBOL64; TIMAGEHLP_SYMBOL = IMAGEHLP_SYMBOL64; PIMAGEHLP_SYMBOL = PIMAGEHLP_SYMBOL64; TIMAGEHLP_SYMBOL_PACKAGE = IMAGEHLP_SYMBOL64_PACKAGE; IMAGEHLP_SYMBOL_PACKAGE = IMAGEHLP_SYMBOL64_PACKAGE; PIMAGEHLP_SYMBOL_PACKAGE= PIMAGEHLP_SYMBOL64_PACKAGE; {$ELSE} PIMAGEHLP_SYMBOL = ^TIMAGEHLP_SYMBOL; TIMAGEHLP_SYMBOL = record SizeOfStruct : dword; Address : dword; Size : dword; Flags : dword; MaxNameLength : dword; Name : array[0..0] of TCHAR; end; IMAGEHLP_SYMBOL = TIMAGEHLP_SYMBOL; LPIMAGEHLP_SYMBOL = PIMAGEHLP_SYMBOL; PIMAGEHLP_SYMBOL_PACKAGE = ^TIMAGEHLP_SYMBOL_PACKAGE; TIMAGEHLP_SYMBOL_PACKAGE = record sym : TIMAGEHLP_SYMBOL; name : array[0..(MAX_SYM_NAME+1)-1] of TCHAR; end; IMAGEHLP_SYMBOL_PACKAGE = TIMAGEHLP_SYMBOL_PACKAGE; LPIMAGEHLP_SYMBOL_PACKAGE = PIMAGEHLP_SYMBOL_PACKAGE; {$ENDIF} PIMAGEHLP_MODULE64 = ^TIMAGEHLP_MODULE64; TIMAGEHLP_MODULE64 = record SizeOfStruct : dword; BaseOfImage : dword64; ImageSize : dword; TimeDateStamp : dword; CheckSum : dword; NumSyms : dword; SymType : TSYM_TYPE; ModuleName : array[0..31] of TCHAR; ImageName : array[0..255] of TCHAR; LoadedImageName : array[0..255] of TCHAR; LoadedPdbName : array[0..255] of TCHAR; CVSig : dword; CVData : array[0..(MAX_PATH*3)-1] of TCHAR; PdbSig : dword; PdbSig70 : TGUID; PdbAge : dword; PdbUnmatched : bool; DbgUnmatched : bool; LineNumbers : bool; GlobalSymbols : bool; TypeInfo : bool; end; IMAGEHLP_MODULE64 = TIMAGEHLP_MODULE64; PIMAGEHLP_MODULE64W = ^TIMAGEHLP_MODULE64W; TIMAGEHLP_MODULE64W = record SizeOfStruct : dword; BaseOfImage : dword64; ImageSize : dword; TimeDateStamp : dword; CheckSum : dword; NumSyms : dword; SymType : TSYM_TYPE; ModuleName : array[0..31] of wchar; ImageName : array[0..255] of wchar; LoadedImageName : array[0..255] of wchar; LoadedPdbName : array[0..255] of wchar; CVSig : dword; CVData : array[0..(MAX_PATH*3)-1] of wchar; PdbSig : dword; PdbSig70 : TGUID; PdbAge : dword; PdbUnmatched : bool; DbgUnmatched : bool; LineNumbers : bool; GlobalSymbols : bool; TypeInfo : bool; end; IMAGEHLP_MODULE64W = TIMAGEHLP_MODULE64W; LPIMAGEHLP_MODULE64W = PIMAGEHLP_MODULE64W; IMAGEHLP_MODULEW64 = TIMAGEHLP_MODULE64W; TIMAGEHLP_MODULEW64 = TIMAGEHLP_MODULE64W; PIMAGEHLP_MODULEW64 = PIMAGEHLP_MODULE64W; {$IFDEF IMAGEHLP64} IMAGEHLP_MODULE = TIMAGEHLP_MODULE64; LPIMAGEHLP_MODULE = PIMAGEHLP_MODULE64; IMAGEHLP_MODULEW = TIMAGEHLP_MODULE64W; LPIMAGEHLP_MODULEW = PIMAGEHLP_MODULE64W; {$ELSE} PIMAGEHLP_MODULE = ^TIMAGEHLP_MODULE; TIMAGEHLP_MODULE = record SizeOfStruct : dword; BaseOfImage : dword; ImageSize : dword; TimeDateStamp : dword; CheckSum : dword; NumSyms : dword; SymType : TSYM_TYPE; ModuleName : array[0..31] of TCHAR; ImageName : array[0..255] of TCHAR; LoadedImageName : array[0..255] of TCHAR; end; IMAGEHLP_MODULE = TIMAGEHLP_MODULE; LPIMAGEHLP_MODULE = PIMAGEHLP_MODULE; PIMAGEHLP_MODULEW = ^TIMAGEHLP_MODULEW; TIMAGEHLP_MODULEW = record SizeOfStruct : dword; BaseOfImage : dword; ImageSize : dword; TimeDateStamp : dword; CheckSum : dword; NumSyms : dword; SymType : TSYM_TYPE; ModuleName : array[0..31] of wchar; ImageName : array[0..255] of wchar; LoadedImageName : array[0..255] of wchar; end; IMAGEHLP_MODULEW = TIMAGEHLP_MODULEW; LPIMAGEHLP_MODULEW = PIMAGEHLP_MODULEW; {$ENDIF} PIMAGEHLP_LINE64 = ^TIMAGEHLP_LINE64; TIMAGEHLP_LINE64 = record SizeOfStruct : dword; Key : pointer; LineNumber : dword; FileName : pchar; Address : dword64; end; IMAGEHLP_LINE64 = TIMAGEHLP_LINE64; LPIMAGEHLP_LINE64 = PIMAGEHLP_LINE64; {$ifdef IMAGEHLP64} IMAGEHLP_LINE = IMAGEHLP_LINE64; TIMAGEHLP_LINE = IMAGEHLP_LINE64; PIMAGEHLP_LINE = PIMAGEHLP_LINE64; LPIMAGEHLP_LINE = PIMAGEHLP_LINE64; {$else} PIMAGEHLP_LINE = ^TIMAGEHLP_LINE; TIMAGEHLP_LINE = record SizeOfStruct : dword; Key : pointer; LineNumber : dword; FileName : pchar; Address : dword; end; IMAGEHLP_LINE = TIMAGEHLP_LINE; LPIMAGEHLP_LINE = PIMAGEHLP_LINE; {$endif} PSOURCEFILE = ^TSOURCEFILE; TSOURCEFILE = record ModBase : dword64; FileName : pchar; end; PIMAGEHLP_CBA_READ_MEMORY = ^TIMAGEHLP_CBA_READ_MEMORY; TIMAGEHLP_CBA_READ_MEMORY = record addr : dword64; buf : pointer; bytes : dword; bytesread : PDWORD; end; IMAGEHLP_CBA_READ_MEMORY = TIMAGEHLP_CBA_READ_MEMORY; LPIMAGEHLP_CBA_READ_MEMORY = PIMAGEHLP_CBA_READ_MEMORY; PIMAGEHLP_CBA_EVENT = ^TIMAGEHLP_CBA_EVENT; TIMAGEHLP_CBA_EVENT = record severity : dword; code : dword; desc : pchar; _object : pointer; end; IMAGEHLP_CBA_EVENT = TIMAGEHLP_CBA_EVENT; LPIMAGEHLP_CBA_EVENT = PIMAGEHLP_CBA_EVENT; PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = ^TIMAGEHLP_DEFERRED_SYMBOL_LOAD64; TIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = record SizeOfStruct : dword; BaseOfImage : dword64; CheckSum : dword; TimeDateStamp : dword; FileName : array[0..(MAX_PATH)-1] of TCHAR; Reparse : bytebool; hFile : THANDLE; Flags : dword; end; IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = TIMAGEHLP_DEFERRED_SYMBOL_LOAD64; LPIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; {$ifdef IMAGEHLP64} IMAGEHLP_DEFERRED_SYMBOL_LOAD = IMAGEHLP_DEFERRED_SYMBOL_LOAD64; TIMAGEHLP_DEFERRED_SYMBOL_LOAD = IMAGEHLP_DEFERRED_SYMBOL_LOAD64; PIMAGEHLP_DEFERRED_SYMBOL_LOAD = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; {$else} PIMAGEHLP_DEFERRED_SYMBOL_LOAD = ^TIMAGEHLP_DEFERRED_SYMBOL_LOAD; TIMAGEHLP_DEFERRED_SYMBOL_LOAD = record SizeOfStruct : dword; BaseOfImage : dword; CheckSum : dword; TimeDateStamp : dword; FileName : array[0..(MAX_PATH)-1] of TCHAR; Reparse : bytebool; hFile : THANDLE; end; IMAGEHLP_DEFERRED_SYMBOL_LOAD = TIMAGEHLP_DEFERRED_SYMBOL_LOAD; LPIMAGEHLP_DEFERRED_SYMBOL_LOAD = PIMAGEHLP_DEFERRED_SYMBOL_LOAD; {$endif} PIMAGEHLP_DUPLICATE_SYMBOL64 = ^TIMAGEHLP_DUPLICATE_SYMBOL64; TIMAGEHLP_DUPLICATE_SYMBOL64 = record SizeOfStruct : dword; NumberOfDups : dword; Symbol : PIMAGEHLP_SYMBOL64; SelectedSymbol : dword; end; IMAGEHLP_DUPLICATE_SYMBOL64 = TIMAGEHLP_DUPLICATE_SYMBOL64; LPIMAGEHLP_DUPLICATE_SYMBOL64 = PIMAGEHLP_DUPLICATE_SYMBOL64; {$ifdef IMAGEHLP64} IMAGEHLP_DUPLICATE_SYMBOL = IMAGEHLP_DUPLICATE_SYMBOL64; PIMAGEHLP_DUPLICATE_SYMBOL = PIMAGEHLP_DUPLICATE_SYMBOL64; TIMAGEHLP_DUPLICATE_SYMBOL = IMAGEHLP_DUPLICATE_SYMBOL64; LPIMAGEHLP_DUPLICATE_SYMBOL = PIMAGEHLP_DUPLICATE_SYMBOL64; {$else} PIMAGEHLP_DUPLICATE_SYMBOL = ^TIMAGEHLP_DUPLICATE_SYMBOL; TIMAGEHLP_DUPLICATE_SYMBOL = record SizeOfStruct : dword; NumberOfDups : dword; Symbol : PIMAGEHLP_SYMBOL; SelectedSymbol : dword; end; IMAGEHLP_DUPLICATE_SYMBOL = TIMAGEHLP_DUPLICATE_SYMBOL; LPIMAGEHLP_DUPLICATE_SYMBOL = PIMAGEHLP_DUPLICATE_SYMBOL; {$endif} PSRCCODEINFO = ^TSRCCODEINFO; TSRCCODEINFO = record SizeOfStruct : dword; Key : pointer; ModBase : dword64; Obj : array[0..(MAX_PATH+1)-1] of TCHAR; FileName : array[0..(MAX_PATH+1)-1] of TCHAR; LineNumber : dword; Address : dword64; end; SRCCODEINFO = TSRCCODEINFO; LPSRCCODEINFO = PSRCCODEINFO; PIMAGEHLP_SYMBOL_SRC = ^TIMAGEHLP_SYMBOL_SRC; TIMAGEHLP_SYMBOL_SRC = record sizeofstruct : dword; _type : dword; _file : array[0..(MAX_PATH)-1] of char; end; IMAGEHLP_SYMBOL_SRC = TIMAGEHLP_SYMBOL_SRC; LPIMAGEHLP_SYMBOL_SRC = PIMAGEHLP_SYMBOL_SRC; PMODULE_TYPE_INFO = ^TMODULE_TYPE_INFO; TMODULE_TYPE_INFO = record dataLength : USHORT; leaf : USHORT; data : array[0..0] of TBYTE; end; MODULE_TYPE_INFO = TMODULE_TYPE_INFO; LPMODULE_TYPE_INFO = PMODULE_TYPE_INFO; PSYMBOL_INFO = ^TSYMBOL_INFO; TSYMBOL_INFO = record SizeOfStruct : ULONG; TypeIndex : ULONG; Reserved : array[0..1] of ULONG64; info : ULONG; Size : ULONG; ModBase : ULONG64; Flags : ULONG; Value : ULONG64; Address : ULONG64; Register : ULONG; Scope : ULONG; Tag : ULONG; NameLen : ULONG; MaxNameLen : ULONG; Name : array[0..0] of TCHAR; end; SYMBOL_INFO = TSYMBOL_INFO; LPSYMBOL_INFO = PSYMBOL_INFO; PSYMBOL_INFO_PACKAGE = ^TSYMBOL_INFO_PACKAGE; TSYMBOL_INFO_PACKAGE = record si : TSYMBOL_INFO; name : array[0..(MAX_SYM_NAME+1)-1] of TCHAR; end; SYMBOL_INFO_PACKAGE = TSYMBOL_INFO_PACKAGE; LPSYMBOL_INFO_PACKAGE = PSYMBOL_INFO_PACKAGE; PIMAGEHLP_STACK_FRAME = ^TIMAGEHLP_STACK_FRAME; TIMAGEHLP_STACK_FRAME = record InstructionOffset : ULONG64; ReturnOffset : ULONG64; FrameOffset : ULONG64; StackOffset : ULONG64; BackingStoreOffset : ULONG64; FuncTableEntry : ULONG64; Params : array[0..3] of ULONG64; Reserved : array[0..4] of ULONG64; Virtual : BOOL; Reserved2 : ULONG; end; IMAGEHLP_STACK_FRAME = TIMAGEHLP_STACK_FRAME; LPIMAGEHLP_STACK_FRAME = PIMAGEHLP_STACK_FRAME; PIMAGEHLP_CONTEXT = ^TIMAGEHLP_CONTEXT; TIMAGEHLP_CONTEXT = pointer; PPIMAGEHLP_CONTEXT = ^PIMAGEHLP_CONTEXT; PTI_FINDCHILDREN_PARAMS = ^TTI_FINDCHILDREN_PARAMS; TTI_FINDCHILDREN_PARAMS = record Count : ULONG; Start : ULONG; ChildId : array[0..0] of ULONG; end; PMINIDUMP_LOCATION_DESCRIPTOR = ^TMINIDUMP_LOCATION_DESCRIPTOR; TMINIDUMP_LOCATION_DESCRIPTOR = record DataSize : ULONG32; Rva : TRVA; end; MINIDUMP_LOCATION_DESCRIPTOR = TMINIDUMP_LOCATION_DESCRIPTOR ; PMINIDUMP_LOCATION_DESCRIPTOR64 = ^TMINIDUMP_LOCATION_DESCRIPTOR64; TMINIDUMP_LOCATION_DESCRIPTOR64 = record DataSize : ULONG64; Rva : TRVA64; end; MINIDUMP_LOCATION_DESCRIPTOR64 = TMINIDUMP_LOCATION_DESCRIPTOR64; PMINIDUMP_MEMORY_DESCRIPTOR = ^TMINIDUMP_MEMORY_DESCRIPTOR; TMINIDUMP_MEMORY_DESCRIPTOR = record StartOfMemoryRange : ULONG64; Memory : TMINIDUMP_LOCATION_DESCRIPTOR; end; MINIDUMP_MEMORY_DESCRIPTOR = TMINIDUMP_MEMORY_DESCRIPTOR; LPMINIDUMP_MEMORY_DESCRIPTOR = PMINIDUMP_MEMORY_DESCRIPTOR; PMINIDUMP_MEMORY_DESCRIPTOR64 = ^TMINIDUMP_MEMORY_DESCRIPTOR64; TMINIDUMP_MEMORY_DESCRIPTOR64 = record StartOfMemoryRange : ULONG64; DataSize : ULONG64; end; MINIDUMP_MEMORY_DESCRIPTOR64 = TMINIDUMP_MEMORY_DESCRIPTOR64; LPMINIDUMP_MEMORY_DESCRIPTOR64 = PMINIDUMP_MEMORY_DESCRIPTOR64; PMINIDUMP_HEADER = ^TMINIDUMP_HEADER; TMINIDUMP_HEADER = record Signature : ULONG32; Version : ULONG32; NumberOfStreams : ULONG32; StreamDirectoryRva : TRVA; CheckSum : ULONG32; a : packed record case longint of 0 : ( Reserved : ULONG32 ); 1 : ( TimeDateStamp : ULONG32 ); end; Flags : ULONG64; end; MINIDUMP_HEADER = TMINIDUMP_HEADER; LPMINIDUMP_HEADER = PMINIDUMP_HEADER; PMINIDUMP_DIRECTORY = ^TMINIDUMP_DIRECTORY; TMINIDUMP_DIRECTORY = record StreamType : ULONG32; Location : TMINIDUMP_LOCATION_DESCRIPTOR; end; MINIDUMP_DIRECTORY = TMINIDUMP_DIRECTORY; LPMINIDUMP_DIRECTORY = PMINIDUMP_DIRECTORY; PPMINIDUMP_DIRECTORY = ^PMINIDUMP_DIRECTORY; PMINIDUMP_STRING = ^TMINIDUMP_STRING; TMINIDUMP_STRING = record Length : ULONG32; Buffer : array[0..0] of WCHAR; end; MINIDUMP_STRING = TMINIDUMP_STRING; LPMINIDUMP_STRING = PMINIDUMP_STRING; PCPU_INFORMATION = ^TCPU_INFORMATION; TCPU_INFORMATION = record case longint of 0 : ( X86CpuInfo : packed record VendorId : array[0..2] of ULONG32; VersionInformation : ULONG32; FeatureInformation : ULONG32; AMDExtendedCpuFeatures : ULONG32; end ); 1 : ( OtherCpuInfo : packed record ProcessorFeatures : array[0..1] of ULONG64; end ); end; CPU_INFORMATION = TCPU_INFORMATION; LPCPU_INFORMATION = PCPU_INFORMATION; PMINIDUMP_SYSTEM_INFO = ^TMINIDUMP_SYSTEM_INFO; TMINIDUMP_SYSTEM_INFO = record ProcessorArchitecture : USHORT; ProcessorLevel : USHORT; ProcessorRevision : USHORT; c : packed record case longint of 0 : ( Reserved0 : USHORT ); 1 : ( b : packed record NumberOfProcessors : UCHAR; ProductType : UCHAR; end ); end; MajorVersion : ULONG32; MinorVersion : ULONG32; BuildNumber : ULONG32; PlatformId : ULONG32; CSDVersionRva : TRVA; e : packed record case longint of 0 : ( Reserved1 : ULONG32 ); 1 : ( d : packed record SuiteMask : USHORT; Reserved2 : USHORT; end ); end; Cpu : TCPU_INFORMATION; end; MINIDUMP_SYSTEM_INFO = TMINIDUMP_SYSTEM_INFO; LPMINIDUMP_SYSTEM_INFO = PMINIDUMP_SYSTEM_INFO; PMINIDUMP_THREAD = ^TMINIDUMP_THREAD; TMINIDUMP_THREAD = record ThreadId : ULONG32; SuspendCount : ULONG32; PriorityClass : ULONG32; Priority : ULONG32; Teb : ULONG64; Stack : TMINIDUMP_MEMORY_DESCRIPTOR; ThreadContext : TMINIDUMP_LOCATION_DESCRIPTOR; end; MINIDUMP_THREAD = TMINIDUMP_THREAD; LPMINIDUMP_THREAD = PMINIDUMP_THREAD; PMINIDUMP_THREAD_LIST = ^TMINIDUMP_THREAD_LIST; TMINIDUMP_THREAD_LIST = record NumberOfThreads : ULONG32; Threads : array[0..0] of TMINIDUMP_THREAD; end; MINIDUMP_THREAD_LIST = TMINIDUMP_THREAD_LIST; LPMINIDUMP_THREAD_LIST = PMINIDUMP_THREAD_LIST; PMINIDUMP_THREAD_EX = ^TMINIDUMP_THREAD_EX; TMINIDUMP_THREAD_EX = record ThreadId : ULONG32; SuspendCount : ULONG32; PriorityClass : ULONG32; Priority : ULONG32; Teb : ULONG64; Stack : TMINIDUMP_MEMORY_DESCRIPTOR; ThreadContext : TMINIDUMP_LOCATION_DESCRIPTOR; BackingStore : TMINIDUMP_MEMORY_DESCRIPTOR; end; MINIDUMP_THREAD_EX = PMINIDUMP_THREAD_EX; LPMINIDUMP_THREAD_EX = PMINIDUMP_THREAD_EX; PMINIDUMP_THREAD_EX_LIST = ^TMINIDUMP_THREAD_EX_LIST; TMINIDUMP_THREAD_EX_LIST = record NumberOfThreads : ULONG32; Threads : array[0..0] of TMINIDUMP_THREAD_EX; end; MINIDUMP_THREAD_EX_LIST = TMINIDUMP_THREAD_EX_LIST; LPMINIDUMP_THREAD_EX_LIST = PMINIDUMP_THREAD_EX_LIST; PMINIDUMP_EXCEPTION = ^TMINIDUMP_EXCEPTION; TMINIDUMP_EXCEPTION = record ExceptionCode : ULONG32; ExceptionFlags : ULONG32; ExceptionRecord : ULONG64; ExceptionAddress : ULONG64; NumberParameters : ULONG32; __unusedAlignment : ULONG32; ExceptionInformation : array[0..(EXCEPTION_MAXIMUM_PARAMETERS)-1] of ULONG64; end; MINIDUMP_EXCEPTION = TMINIDUMP_EXCEPTION; LPMINIDUMP_EXCEPTION = PMINIDUMP_EXCEPTION; PMINIDUMP_EXCEPTION_STREAM = ^TMINIDUMP_EXCEPTION_STREAM; TMINIDUMP_EXCEPTION_STREAM = record ThreadId : ULONG32; __alignment : ULONG32; ExceptionRecord : TMINIDUMP_EXCEPTION; ThreadContext : TMINIDUMP_LOCATION_DESCRIPTOR; end; MINIDUMP_EXCEPTION_STREAM = TMINIDUMP_EXCEPTION_STREAM; LPMINIDUMP_EXCEPTION_STREAM = PMINIDUMP_EXCEPTION_STREAM; PMINIDUMP_MODULE = ^TMINIDUMP_MODULE; TMINIDUMP_MODULE = record BaseOfImage : ULONG64; SizeOfImage : ULONG32; CheckSum : ULONG32; TimeDateStamp : ULONG32; ModuleNameRva : TRVA; VersionInfo : TVSFIXEDFILEINFO; CvRecord : TMINIDUMP_LOCATION_DESCRIPTOR; MiscRecord : TMINIDUMP_LOCATION_DESCRIPTOR; Reserved0 : ULONG64; Reserved1 : ULONG64; end; MINIDUMP_MODULE = TMINIDUMP_MODULE; LPMINIDUMP_MODULE = PMINIDUMP_MODULE; PMINIDUMP_MODULE_LIST = ^TMINIDUMP_MODULE_LIST; TMINIDUMP_MODULE_LIST = record NumberOfModules : ULONG32; Modules : array[0..0] of TMINIDUMP_MODULE; end; MINIDUMP_MODULE_LIST = TMINIDUMP_MODULE_LIST; LPMINIDUMP_MODULE_LIST = PMINIDUMP_MODULE_LIST; PMINIDUMP_MEMORY_LIST = ^TMINIDUMP_MEMORY_LIST; TMINIDUMP_MEMORY_LIST = record NumberOfMemoryRanges : ULONG32; MemoryRanges : array[0..0] of TMINIDUMP_MEMORY_DESCRIPTOR; end; MINIDUMP_MEMORY_LIST = TMINIDUMP_MEMORY_LIST; LPMINIDUMP_MEMORY_LIST = PMINIDUMP_MEMORY_LIST; PMINIDUMP_MEMORY64_LIST = ^TMINIDUMP_MEMORY64_LIST; TMINIDUMP_MEMORY64_LIST = record NumberOfMemoryRanges : ULONG64; BaseRva : TRVA64; MemoryRanges : array[0..0] of TMINIDUMP_MEMORY_DESCRIPTOR64; end; MINIDUMP_MEMORY64_LIST = TMINIDUMP_MEMORY64_LIST; LPMINIDUMP_MEMORY64_LIST = PMINIDUMP_MEMORY64_LIST; PMINIDUMP_EXCEPTION_INFORMATION = ^TMINIDUMP_EXCEPTION_INFORMATION; TMINIDUMP_EXCEPTION_INFORMATION = record ThreadId : dword; ExceptionPointers : PEXCEPTION_POINTERS; ClientPointers : BOOL; end; MINIDUMP_EXCEPTION_INFORMATION = TMINIDUMP_EXCEPTION_INFORMATION; LPMINIDUMP_EXCEPTION_INFORMATION = PMINIDUMP_EXCEPTION_INFORMATION; PMINIDUMP_EXCEPTION_INFORMATION64 = ^TMINIDUMP_EXCEPTION_INFORMATION64; TMINIDUMP_EXCEPTION_INFORMATION64 = record ThreadId : dword; ExceptionRecord : ULONG64; ContextRecord : ULONG64; ClientPointers : BOOL; end; MINIDUMP_EXCEPTION_INFORMATION64 = TMINIDUMP_EXCEPTION_INFORMATION64; LPMINIDUMP_EXCEPTION_INFORMATION64 = PMINIDUMP_EXCEPTION_INFORMATION64; PMINIDUMP_HANDLE_DESCRIPTOR = ^TMINIDUMP_HANDLE_DESCRIPTOR; TMINIDUMP_HANDLE_DESCRIPTOR = record Handle : ULONG64; TypeNameRva : TRVA; ObjectNameRva : TRVA; Attributes : ULONG32; GrantedAccess : ULONG32; HandleCount : ULONG32; PointerCount : ULONG32; end; MINIDUMP_HANDLE_DESCRIPTOR = TMINIDUMP_HANDLE_DESCRIPTOR; LPMINIDUMP_HANDLE_DESCRIPTOR = PMINIDUMP_HANDLE_DESCRIPTOR; PMINIDUMP_HANDLE_DATA_STREAM = ^TMINIDUMP_HANDLE_DATA_STREAM; TMINIDUMP_HANDLE_DATA_STREAM = record SizeOfHeader : ULONG32; SizeOfDescriptor : ULONG32; NumberOfDescriptors : ULONG32; Reserved : ULONG32; end; MINIDUMP_HANDLE_DATA_STREAM = TMINIDUMP_HANDLE_DATA_STREAM; LPMINIDUMP_HANDLE_DATA_STREAM = PMINIDUMP_HANDLE_DATA_STREAM; PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = ^TMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; TMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = record MinimumAddress : ULONG64; MaximumAddress : ULONG64; BaseAddress : ULONG64; EntryCount : ULONG32; SizeOfAlignPad : ULONG32; end; MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = TMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; LPMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; PMINIDUMP_FUNCTION_TABLE_STREAM = ^TMINIDUMP_FUNCTION_TABLE_STREAM; TMINIDUMP_FUNCTION_TABLE_STREAM = record SizeOfHeader : ULONG32; SizeOfDescriptor : ULONG32; SizeOfNativeDescriptor : ULONG32; SizeOfFunctionEntry : ULONG32; NumberOfDescriptors : ULONG32; SizeOfAlignPad : ULONG32; end; MINIDUMP_FUNCTION_TABLE_STREAM = TMINIDUMP_FUNCTION_TABLE_STREAM; LPPMINIDUMP_FUNCTION_TABLE_STREAM = PMINIDUMP_FUNCTION_TABLE_STREAM; PMINIDUMP_UNLOADED_MODULE = ^TMINIDUMP_UNLOADED_MODULE; TMINIDUMP_UNLOADED_MODULE = record BaseOfImage : ULONG64; SizeOfImage : ULONG32; CheckSum : ULONG32; TimeDateStamp : ULONG32; ModuleNameRva : TRVA; end; MINIDUMP_UNLOADED_MODULE = TMINIDUMP_UNLOADED_MODULE; LPMINIDUMP_UNLOADED_MODULE = PMINIDUMP_UNLOADED_MODULE; PMINIDUMP_UNLOADED_MODULE_LIST = ^TMINIDUMP_UNLOADED_MODULE_LIST; TMINIDUMP_UNLOADED_MODULE_LIST = record SizeOfHeader : ULONG32; SizeOfEntry : ULONG32; NumberOfEntries : ULONG32; end; MINIDUMP_UNLOADED_MODULE_LIST = TMINIDUMP_UNLOADED_MODULE_LIST; LPMINIDUMP_UNLOADED_MODULE_LIST = PMINIDUMP_UNLOADED_MODULE_LIST; PMINIDUMP_MISC_INFO = ^TMINIDUMP_MISC_INFO; TMINIDUMP_MISC_INFO = record SizeOfInfo : ULONG32; Flags1 : ULONG32; ProcessId : ULONG32; ProcessCreateTime : ULONG32; ProcessUserTime : ULONG32; ProcessKernelTime : ULONG32; end; MINIDUMP_MISC_INFO = TMINIDUMP_MISC_INFO; LPMINIDUMP_MISC_INFO = PMINIDUMP_MISC_INFO; PMINIDUMP_USER_RECORD = ^TMINIDUMP_USER_RECORD; TMINIDUMP_USER_RECORD = record _Type : ULONG32; Memory : TMINIDUMP_LOCATION_DESCRIPTOR; end; MINIDUMP_USER_RECORD = TMINIDUMP_USER_RECORD; LPMINIDUMP_USER_RECORD = PMINIDUMP_USER_RECORD; PMINIDUMP_USER_STREAM = ^TMINIDUMP_USER_STREAM; TMINIDUMP_USER_STREAM = record _Type : ULONG32; BufferSize : ULONG; Buffer : pointer; end; MINIDUMP_USER_STREAM = TMINIDUMP_USER_STREAM; LPMINIDUMP_USER_STREAM = PMINIDUMP_USER_STREAM; PMINIDUMP_USER_STREAM_INFORMATION = ^TMINIDUMP_USER_STREAM_INFORMATION; TMINIDUMP_USER_STREAM_INFORMATION = record UserStreamCount : ULONG; UserStreamArray : PMINIDUMP_USER_STREAM; end; MINIDUMP_USER_STREAM_INFORMATION = TMINIDUMP_USER_STREAM_INFORMATION; LPMINIDUMP_USER_STREAM_INFORMATION = PMINIDUMP_USER_STREAM_INFORMATION; PMINIDUMP_THREAD_CALLBACK = ^TMINIDUMP_THREAD_CALLBACK; TMINIDUMP_THREAD_CALLBACK = record ThreadId : ULONG; ThreadHandle : THANDLE; Context : TCONTEXT; SizeOfContext : ULONG; StackBase : ULONG64; StackEnd : ULONG64; end; MINIDUMP_THREAD_CALLBACK = TMINIDUMP_THREAD_CALLBACK; LPMINIDUMP_THREAD_CALLBACK = PMINIDUMP_THREAD_CALLBACK; PMINIDUMP_THREAD_EX_CALLBACK = ^TMINIDUMP_THREAD_EX_CALLBACK; TMINIDUMP_THREAD_EX_CALLBACK = record ThreadId : ULONG; ThreadHandle : THANDLE; Context : TCONTEXT; SizeOfContext : ULONG; StackBase : ULONG64; StackEnd : ULONG64; BackingStoreBase : ULONG64; BackingStoreEnd : ULONG64; end; MINIDUMP_THREAD_EX_CALLBACK = TMINIDUMP_THREAD_EX_CALLBACK; LPMINIDUMP_THREAD_EX_CALLBACK = PMINIDUMP_THREAD_EX_CALLBACK; PMINIDUMP_INCLUDE_THREAD_CALLBACK = ^TMINIDUMP_INCLUDE_THREAD_CALLBACK; TMINIDUMP_INCLUDE_THREAD_CALLBACK = record ThreadId : ULONG; end; MINIDUMP_INCLUDE_THREAD_CALLBACK = TMINIDUMP_INCLUDE_THREAD_CALLBACK; LPMINIDUMP_INCLUDE_THREAD_CALLBACK = PMINIDUMP_INCLUDE_THREAD_CALLBACK; PMINIDUMP_MODULE_CALLBACK = ^TMINIDUMP_MODULE_CALLBACK; TMINIDUMP_MODULE_CALLBACK = record FullPath : PWCHAR; BaseOfImage : ULONG64; SizeOfImage : ULONG; CheckSum : ULONG; TimeDateStamp : ULONG; VersionInfo : TVSFIXEDFILEINFO; CvRecord : pointer; SizeOfCvRecord : ULONG; MiscRecord : pointer; SizeOfMiscRecord : ULONG; end; MINIDUMP_MODULE_CALLBACK = TMINIDUMP_MODULE_CALLBACK; LPMINIDUMP_MODULE_CALLBACK = PMINIDUMP_MODULE_CALLBACK; PMINIDUMP_INCLUDE_MODULE_CALLBACK = ^TMINIDUMP_INCLUDE_MODULE_CALLBACK; TMINIDUMP_INCLUDE_MODULE_CALLBACK = record BaseOfImage : ULONG64; end; MINIDUMP_INCLUDE_MODULE_CALLBACK = TMINIDUMP_INCLUDE_MODULE_CALLBACK; LPMINIDUMP_INCLUDE_MODULE_CALLBACK = PMINIDUMP_INCLUDE_MODULE_CALLBACK; PMINIDUMP_CALLBACK_INPUT = ^TMINIDUMP_CALLBACK_INPUT; TMINIDUMP_CALLBACK_INPUT = record ProcessId : ULONG; ProcessHandle : THANDLE; CallbackType : ULONG; anony : packed record case longint of 0 : ( Thread : TMINIDUMP_THREAD_CALLBACK ); 1 : ( ThreadEx : TMINIDUMP_THREAD_EX_CALLBACK ); 2 : ( Module : TMINIDUMP_MODULE_CALLBACK ); 3 : ( IncludeThread : TMINIDUMP_INCLUDE_THREAD_CALLBACK ); 4 : ( IncludeModule : TMINIDUMP_INCLUDE_MODULE_CALLBACK ); end; end; MINIDUMP_CALLBACK_INPUT = TMINIDUMP_CALLBACK_INPUT; LPMINIDUMP_CALLBACK_INPUT = PMINIDUMP_CALLBACK_INPUT; PMINIDUMP_CALLBACK_OUTPUT = ^TMINIDUMP_CALLBACK_OUTPUT; TMINIDUMP_CALLBACK_OUTPUT = record anony3 : packed record case longint of 0 : ( ModuleWriteFlags : ULONG ); 1 : ( ThreadWriteFlags : ULONG ); 2 : ( anony2 : packed record MemoryBase : ULONG64; MemorySize : ULONG; end ); end; end; MINIDUMP_CALLBACK_OUTPUT = TMINIDUMP_CALLBACK_OUTPUT; LPMINIDUMP_CALLBACK_OUTPUT = PMINIDUMP_CALLBACK_OUTPUT; TIMAGEHLP_STATUS_ROUTINE = function (Reason:TIMAGEHLP_STATUS_REASON; ImageName:PSTR; DllName:PSTR; Va:ULONG_PTR; Parameter:ULONG_PTR):BOOL;stdcall; TIMAGEHLP_STATUS_ROUTINE32 = function (Reason:TIMAGEHLP_STATUS_REASON; ImageName:PSTR; DllName:PSTR; Va:ULONG; Parameter:ULONG_PTR):BOOL;stdcall; TIMAGEHLP_STATUS_ROUTINE64 = function (Reason:TIMAGEHLP_STATUS_REASON; ImageName:PSTR; DllName:PSTR; Va:ULONG64; Parameter:ULONG_PTR):BOOL;stdcall; TDIGEST_FUNCTION = function (refdata:TDIGEST_HANDLE; pData:pbyte; dwLength:DWORD):bool;stdcall; TFIND_DEBUG_FILE_CALLBACK = function (FileHandle:THANDLE; FileName:PSTR; CallerData:pointer):bool;stdcall; // callback TFINDFILEINPATHCALLBACK = function (filename:PSTR; context:pointer):bool;stdcall; TFIND_EXE_FILE_CALLBACK = function (FileHandle:THANDLE; FileName:PSTR; CallerData:pointer):bool;stdcall; TSYMBOLSERVERPROC = function (para1:LPCSTR; para2:LPCSTR; para3:pointer; para4:DWORD; para5:DWORD; para6:lpstr):bool;stdcall; TSYMBOLSERVEROPENPROC = function (para1:pointer):bool;stdcall; TSYMBOLSERVERCLOSEPROC = function (para1:pointer):bool;stdcall; TSYMBOLSERVERSETOPTIONSPROC= function (para1:UINT_PTR; para2:ULONG64):bool;stdcall; TSYMBOLSERVERCALLBACKPROC = function (action:UINT_PTR; data:ULONG64; context:ULONG64):bool;stdcall; TSYMBOLSERVERGETOPTIONSPROC= function :UINT_PTR;stdcall; TSYMBOLSERVERPINGPROC = function (para1:LPCSTR):bool;stdcall; TENUMDIRTREE_CALLBACK = function (FilePath:LPCSTR; CallerData:pointer):bool;stdcall; TREAD_PROCESS_MEMORY_ROUTINE64 = function (hProcess:THANDLE; qwBaseAddress:dword64; lpBuffer:pointer; nSize:dword; lpNumberOfBytesRead:lpdword):bool;stdcall; TFUNCTION_TABLE_ACCESS_ROUTINE64= function (hProcess:THANDLE; AddrBase:dword64):pointer;stdcall; TGET_MODULE_BASE_ROUTINE64 = function (hProcess:THANDLE; Address:dword64):dword64;stdcall; TTRANSLATE_ADDRESS_ROUTINE64 = function (hProcess:THANDLE; hThread:THANDLE; lpaddr:LPADDRESS64):dword64;stdcall; {$IFDEF IMAGEHLP64} TREAD_PROCESS_MEMORY_ROUTINE = TREAD_PROCESS_MEMORY_ROUTINE64 ; TFUNCTION_TABLE_ACCESS_ROUTINE = TFUNCTION_TABLE_ACCESS_ROUTINE64; TGET_MODULE_BASE_ROUTINE = TGET_MODULE_BASE_ROUTINE64; TTRANSLATE_ADDRESS_ROUTINE = TTRANSLATE_ADDRESS_ROUTINE64; {$ELSE} TREAD_PROCESS_MEMORY_ROUTINE = function (hProcess:THANDLE; lpBaseAddress:dword; lpBuffer:pointer; nSize:dword; lpNumberOfBytesRead:PDWORD):bool;stdcall; TFUNCTION_TABLE_ACCESS_ROUTINE = function (hProcess:THANDLE; AddrBase:dword):pointer;stdcall; TGET_MODULE_BASE_ROUTINE = function (hProcess:THANDLE; Address:dword):dword;stdcall; TTRANSLATE_ADDRESS_ROUTINE = function (hProcess:THANDLE; hThread:THANDLE; lpaddr:LPADDRESS):dword;stdcall; {$ENDIF} TSYM_ENUMMODULES_CALLBACK64 = function (ModuleName:PSTR; BaseOfDll:dword64; UserContext:pointer):bool;stdcall; {CALLBACK } TSYM_ENUMSYMBOLS_CALLBACK64 = function (SymbolName:PSTR; SymbolAddress:dword64; SymbolSize:ULONG; UserContext:pointer):bool;stdcall; {CALLBACK } TSYM_ENUMSYMBOLS_CALLBACK64W = function (SymbolName:lpwstr; SymbolAddress:dword64; SymbolSize:ULONG; UserContext:pointer):bool;stdcall; {CALLBACK } TENUMLOADED_MODULES_CALLBACK64 = function (ModuleName:PSTR; ModuleBase:dword64; ModuleSize:ULONG; UserContext:pointer):bool;stdcall; {CALLBACK } TSYMBOL_REGISTERED_CALLBACK64 = function (hProcess:THANDLE; ActionCode:ULONG; CallbackData:ULONG64; UserContext:ULONG64):bool;stdcall; {CALLBACK } TSYMBOL_FUNCENTRY_CALLBACK64 = function (hProcess:THANDLE; AddrBase:ULONG64; UserContext:ULONG64):pointer;stdcall; {CALLBACK } {$IFDEF IMAGEHLP64} TSYM_ENUMMODULES_CALLBACK = TSYM_ENUMMODULES_CALLBACK64; TSYM_ENUMSYMBOLS_CALLBACK = TSYM_ENUMSYMBOLS_CALLBACK64; TSYM_ENUMSYMBOLS_CALLBACKW = TSYM_ENUMSYMBOLS_CALLBACK64W; TENUMLOADED_MODULES_CALLBACK = TENUMLOADED_MODULES_CALLBACK64; TSYMBOL_REGISTERED_CALLBACK = TSYMBOL_REGISTERED_CALLBACK64; TSYMBOL_FUNCENTRY_CALLBACK = TSYMBOL_FUNCENTRY_CALLBACK64; {$ELSE} TSYM_ENUMMODULES_CALLBACK = function (ModuleName:PSTR; BaseOfDll:ULONG; UserContext:pointer):bool;stdcall; TSYM_ENUMSYMBOLS_CALLBACK = function (SymbolName:PSTR; SymbolAddress:ULONG; SymbolSize:ULONG; UserContext:pointer):bool;stdcall; TSYM_ENUMSYMBOLS_CALLBACKW = function (SymbolName:lpwstr; SymbolAddress:ULONG; SymbolSize:ULONG; UserContext:pointer):bool;stdcall; TENUMLOADED_MODULES_CALLBACK = function (ModuleName:PSTR; ModuleBase:ULONG; ModuleSize:ULONG; UserContext:pointer):bool;stdcall; TSYMBOL_REGISTERED_CALLBACK = function (hProcess:THANDLE; ActionCode:ULONG; CallbackData:pointer; UserContext:pointer):bool;stdcall; TSYMBOL_FUNCENTRY_CALLBACK = function (hProcess:THANDLE; AddrBase:dword; UserContext:pointer):pointer;stdcall; {CALLBACK } {$ENDIF} TSYM_ENUMSOURCFILES_CALLBACK = function (pSourceFile:PSOURCEFILE; UserContext:pointer):BOOL;stdcall; TSYM_ENUMLINES_CALLBACK = function (LineInfo:PSRCCODEINFO; UserContext:pointer):BOOL;stdcall; TSYM_ENUMERATESYMBOLS_CALLBACK = function (pSymInfo:PSYMBOL_INFO; SymbolSize:ULONG; UserContext:pointer):BOOL;stdcall; TDBGHELP_CREATE_USER_DUMP_CALLBACK = function (DataType:dword; Data:PPOINTER; DataLength:lpdword; UserData:pointer):BOOL;stdcall; TMINIDUMP_CALLBACK_ROUTINE = function (CallbackParam:pointer; CallbackInput:PMINIDUMP_CALLBACK_INPUT; CallbackOutput:PMINIDUMP_CALLBACK_OUTPUT):BOOL;stdcall; PMINIDUMP_CALLBACK_INFORMATION = ^TMINIDUMP_CALLBACK_INFORMATION; TMINIDUMP_CALLBACK_INFORMATION = record CallbackRoutine : TMINIDUMP_CALLBACK_ROUTINE; CallbackParam : pointer; end; MINIDUMP_CALLBACK_INFORMATION = TMINIDUMP_CALLBACK_INFORMATION; LPMINIDUMP_CALLBACK_INFORMATION = PMINIDUMP_CALLBACK_INFORMATION; function BindImage(ImageName:PSTR; DllPath:PSTR; SymbolPath:PSTR):BOOL;stdcall;external External_library name 'BindImage'; function BindImageEx(Flags:DWORD; ImageName:PSTR; DllPath:PSTR; SymbolPath:PSTR; StatusRoutine:TIMAGEHLP_STATUS_ROUTINE):BOOL;stdcall;external External_library name 'BindImageEx'; function ReBaseImage(CurrentImageName:PSTR; SymbolPath:PSTR; fReBase:bool; fRebaseSysfileOk:bool; fGoingDown:bool; CheckImageSize:ULONG; OldImageSize:PULONG; OldImageBase:PULONG_PTR; NewImageSize:PULONG; NewImageBase:PULONG_PTR; TimeStamp:ULONG):bool;stdcall;external External_library name 'ReBaseImage'; function ReBaseImage64(CurrentImageName:PSTR; SymbolPath:PSTR; fReBase:bool; fRebaseSysfileOk:bool; fGoingDown:bool; CheckImageSize:ULONG; OldImageSize:PULONG; OldImageBase:PULONG64; NewImageSize:PULONG; NewImageBase:PULONG64; TimeStamp:ULONG):bool;stdcall;external External_library name 'ReBaseImage64'; function CheckSumMappedFile(BaseAddress:pointer; FileLength:DWORD; HeaderSum:PDWORD; CheckSum:PDWORD):PIMAGE_NT_HEADERS;stdcall;external External_library name 'CheckSumMappedFile'; function MapFileAndCheckSumA(Filename:PSTR; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumA'; function MapFileAndCheckSumW(Filename:lpwstr; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumW'; {$IFDEF UNICODE} function MapFileAndCheckSum(Filename:lpwstr; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumW'; {$ELSE} function MapFileAndCheckSum(Filename:PSTR; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumA'; {$ENDIF} function GetImageConfigInformation(LoadedImage:PLOADED_IMAGE; ImageConfigInformation:PIMAGE_LOAD_CONFIG_DIRECTORY):bool;stdcall;external External_library name 'GetImageConfigInformation'; function GetImageUnusedHeaderBytes(LoadedImage:PLOADED_IMAGE; SizeUnusedHeaderBytes:PDWORD):DWORD;stdcall;external External_library name 'GetImageUnusedHeaderBytes'; function SetImageConfigInformation(LoadedImage:PLOADED_IMAGE; ImageConfigInformation:PIMAGE_LOAD_CONFIG_DIRECTORY):bool;stdcall;external External_library name 'SetImageConfigInformation'; function ImageGetDigestStream(FileHandle:THANDLE; DigestLevel:DWORD; DigestFunction:TDIGEST_FUNCTION; DigestHandle:TDIGEST_HANDLE):bool;stdcall;external External_library name 'ImageGetDigestStream'; function ImageAddCertificate(FileHandle:THANDLE; Certificate:PWINCERTIFICATE; Index:PDWORD):bool;stdcall;external External_library name 'ImageAddCertificate'; function ImageRemoveCertificate(FileHandle:THANDLE; Index:DWORD):bool;stdcall;external External_library name 'ImageRemoveCertificate'; function ImageEnumerateCertificates(FileHandle:THANDLE; TypeFilter:word; CertificateCount:PDWORD; Indices:PDWORD; IndexCount:DWORD):bool;stdcall;external External_library name 'ImageEnumerateCertificates'; function ImageGetCertificateData(FileHandle:THANDLE; CertificateIndex:DWORD; Certificate:PWINCERTIFICATE; RequiredLength:PDWORD):bool;stdcall;external External_library name 'ImageGetCertificateData'; function ImageGetCertificateHeader(FileHandle:THANDLE; CertificateIndex:DWORD; Certificateheader:PWINCERTIFICATE):bool;stdcall;external External_library name 'ImageGetCertificateHeader'; function ImageLoad(DllName:PSTR; DllPath:PSTR):PLOADED_IMAGE;stdcall;external External_library name 'ImageLoad'; function ImageUnload(LoadedImage:PLOADED_IMAGE):bool;stdcall;external External_library name 'ImageUnload'; function MapAndLoad(ImageName:PSTR; DllPath:PSTR; LoadedImage:PLOADED_IMAGE; DotDll:bool; ReadOnly:BOOL):bool;stdcall;external External_library name 'MapAndLoad'; function UnMapAndLoad(LoadedImage:PLOADED_IMAGE):bool;stdcall;external External_library name 'UnMapAndLoad'; function TouchFileTimes(FileHandle:THANDLE; pSystemTime:PSYSTEMTIME):bool;stdcall;external External_library name 'TouchFileTimes'; function SplitSymbols(ImageName:PSTR; SymbolsPath:PSTR; SymbolFilePath:PSTR; Flags:DWORD):bool;stdcall;external External_library name 'SplitSymbols'; function UpdateDebugInfoFile(ImageFileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR; NtHeaders:PIMAGE_NT_HEADERS32):bool;stdcall;external External_library name 'UpdateDebugInfoFile'; function UpdateDebugInfoFileEx(ImageFileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR; NtHeaders:PIMAGE_NT_HEADERS32; OldChecksum:DWORD):bool;stdcall;external External_library name 'UpdateDebugInfoFileEx'; function FindDebugInfoFile(FileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR):THANDLE;stdcall;external External_library name 'FindDebugInfoFile'; function FindDebugInfoFileEx(FileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR; Callback:TFIND_DEBUG_FILE_CALLBACK; CallerData:pointer):THANDLE;stdcall;external External_library name 'FindDebugInfoFileEx'; function SymFindFileInPath(hprocess:THANDLE; SearchPath:lpstr; FileName:lpstr; id:pointer; two:DWORD; three:DWORD; flags:DWORD; FoundFile:lpstr; callback:TFINDFILEINPATHCALLBACK; context:pointer):bool;stdcall;external External_library name 'SymFindFileInPath'; function FindExecutableImage(FileName:PSTR; SymbolPath:PSTR; ImageFilePath:PSTR):THANDLE;stdcall;external External_library name 'FindExecutableImage'; function FindExecutableImageEx(FileName:PSTR; SymbolPath:PSTR; ImageFilePath:PSTR; Callback:TFIND_EXE_FILE_CALLBACK; CallerData:pointer):THANDLE;stdcall;external External_library name 'FindExecutableImageEx'; function ImageNtHeader(Base:pointer):PIMAGE_NT_HEADERS;stdcall;external External_library name 'ImageNtHeader'; function ImageDirectoryEntryToDataEx(Base:pointer; MappedAsImage:bytebool; DirectoryEntry:ushort; Size:PULONG; FoundHeader:PPIMAGE_SECTION_HEADER):pointer;stdcall;external External_library name 'ImageDirectoryEntryToDataEx'; function ImageDirectoryEntryToData(Base:pointer; MappedAsImage:bytebool; DirectoryEntry:ushort; Size:PULONG):pointer;stdcall;external External_library name 'ImageDirectoryEntryToData'; function ImageRvaToSection(NtHeaders:PIMAGE_NT_HEADERS; Base:pointer; Rva:ULONG):PIMAGE_SECTION_HEADER;stdcall;external External_library name 'ImageRvaToSection'; function ImageRvaToVa(NtHeaders:PIMAGE_NT_HEADERS; Base:pointer; Rva:ULONG; LastRvaSection:PPIMAGE_SECTION_HEADER):pointer;stdcall;external External_library name 'ImageRvaToVa'; {$IFNDEF WIN64} function MapDebugInformation(FileHandle:THANDLE; FileName:PSTR; SymbolPath:PSTR; ImageBase:dword):PIMAGE_DEBUG_INFORMATION;stdcall;external External_library name 'MapDebugInformation'; function UnmapDebugInformation(DebugInfo:PIMAGE_DEBUG_INFORMATION):bool;stdcall;external External_library name 'UnmapDebugInformation'; {$ENDIF} function SearchTreeForFile(RootPath:PSTR; InputPathName:PSTR; OutputPathBuffer:PSTR):bool;stdcall;external External_library name 'SearchTreeForFile'; function EnumDirTree(hProcess:THANDLE; RootPath:PSTR; InputPathName:PSTR; OutputPathBuffer:PSTR; Callback:TENUMDIRTREE_CALLBACK; CallbackData:pointer):bool;stdcall;external External_library name 'EnumDirTree'; function MakeSureDirectoryPathExists(DirPath:LPCSTR):bool;stdcall;external External_library name 'MakeSureDirectoryPathExists'; function UnDecorateSymbolName(DecoratedName:LPCSTR; UnDecoratedName:PSTR; UndecoratedLength:dword; Flags:dword):dword;stdcall;external External_library name 'UnDecorateSymbolName'; function StackWalk64(MachineType:dword; hProcess:THANDLE; hThread:THANDLE; StackFrame:LPSTACKFRAME64; ContextRecord:pointer; ReadMemoryRoutine:TREAD_PROCESS_MEMORY_ROUTINE64; FunctionTableAccessRoutine:TFUNCTION_TABLE_ACCESS_ROUTINE64; GetModuleBaseRoutine:TGET_MODULE_BASE_ROUTINE64; TranslateAddress:TTRANSLATE_ADDRESS_ROUTINE64):bool;stdcall;external External_library name 'StackWalk64'; {$IFDEF IMAGEHLP64} function StackWalk(MachineType:dword; hProcess:THANDLE; hThread:THANDLE; StackFrame:LPSTACKFRAME64; ContextRecord:pointer; ReadMemoryRoutine:TREAD_PROCESS_MEMORY_ROUTINE64; FunctionTableAccessRoutine:TFUNCTION_TABLE_ACCESS_ROUTINE64; GetModuleBaseRoutine:TGET_MODULE_BASE_ROUTINE64; TranslateAddress:TTRANSLATE_ADDRESS_ROUTINE64):bool;stdcall;external External_library name 'StackWalk64'; {$ELSE} function StackWalk(MachineType:dword; hProcess:THANDLE; hThread:THANDLE; StackFrame:LPSTACKFRAME; ContextRecord:pointer; ReadMemoryRoutine:TREAD_PROCESS_MEMORY_ROUTINE; FunctionTableAccessRoutine:TFUNCTION_TABLE_ACCESS_ROUTINE; GetModuleBaseRoutine:TGET_MODULE_BASE_ROUTINE; TranslateAddress:TTRANSLATE_ADDRESS_ROUTINE):bool;stdcall;external External_library name 'StackWalk'; {$ENDIF} function ImagehlpApiVersion:LPAPI_VERSION;stdcall;external External_library name 'ImagehlpApiVersion'; function ImagehlpApiVersionEx(AppVersion:LPAPI_VERSION):LPAPI_VERSION;stdcall;external External_library name 'ImagehlpApiVersionEx'; function GetTimestampForLoadedLibrary(Module:HMODULE):dword;stdcall;external External_library name 'GetTimestampForLoadedLibrary'; function SymSetParentWindow(hwnd:HWND):bool;stdcall;external External_library name 'SymSetParentWindow'; function SymSetHomeDirectory(dir:LPCSTR):pchar;stdcall;external External_library name 'SymSetHomeDirectory'; function SymGetHomeDirectory(_type:dword; dir:PSTR; size:Tsize):pchar;stdcall;external External_library name 'SymGetHomeDirectory'; function SymSetOptions(SymOptions:dword):dword;stdcall;external External_library name 'SymSetOptions'; function SymGetOptions:dword;stdcall;external External_library name 'SymGetOptions'; function SymCleanup(hProcess:THANDLE):BOOL;stdcall;external External_library name 'SymCleanup'; function SymMatchString(_string:lpstr; expression:lpstr; fCase:BOOL):BOOL;stdcall;external External_library name 'SymMatchString'; function SymEnumSourceFiles(hProcess:THANDLE; ModBase:ULONG64; Mask:lpstr; cbSrcFiles:TSYM_ENUMSOURCFILES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSourceFiles'; function SymEnumerateModules64(hProcess:THANDLE; EnumModulesCallback:TSYM_ENUMMODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateModules64'; function SymEnumerateSymbols64(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbols64'; function SymEnumerateSymbolsW64(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64W; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbolsW64'; function EnumerateLoadedModules64(hProcess:THANDLE; EnumLoadedModulesCallback:TENUMLOADED_MODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'EnumerateLoadedModules64'; function SymFunctionTableAccess64(hProcess:THANDLE; AddrBase:dword64):pointer;stdcall;external External_library name 'SymFunctionTableAccess64'; function SymGetModuleInfo64(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULE64):BOOL;stdcall;external External_library name 'SymGetModuleInfo64'; function SymGetModuleInfoW64(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULEW64):BOOL;stdcall;external External_library name 'SymGetModuleInfoW64'; function SymGetModuleBase64(hProcess:THANDLE; qwAddr:dword64):dword64;stdcall;external External_library name 'SymGetModuleBase64'; function SymGetSymNext64(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymNext64'; function SymGetSymPrev64(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymPrev64'; {$ifdef IMAGEHLP64} function SymEnumerateModules(hProcess:THANDLE; EnumModulesCallback:TSYM_ENUMMODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateModules64'; function SymEnumerateSymbols(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbols64'; function SymEnumerateSymbolsW(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64W; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbolsW64'; function EnumerateLoadedModules(hProcess:THANDLE; EnumLoadedModulesCallback:TENUMLOADED_MODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'EnumerateLoadedModules64'; function SymFunctionTableAccess(hProcess:THANDLE; AddrBase:dword64):pointer;stdcall;external External_library name 'SymFunctionTableAccess64'; function SymGetModuleInfo(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULE64):BOOL;stdcall;external External_library name 'SymGetModuleInfo64'; function SymGetModuleInfoW(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULEW64):BOOL;stdcall;external External_library name 'SymGetModuleInfoW64'; function SymGetModuleBase(hProcess:THANDLE; qwAddr:dword64):dword64;stdcall;external External_library name 'SymGetModuleBase64'; function SymGetSymNext(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymNext64'; function SymGetSymPrev(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymPrev64'; {$ELSE} function SymEnumerateModules(hProcess:THANDLE; EnumModulesCallback:TSYM_ENUMMODULES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateModules'; function SymEnumerateSymbols(hProcess:THANDLE; BaseOfDll:dword; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbols'; function SymEnumerateSymbolsW(hProcess:THANDLE; BaseOfDll:dword; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACKW; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbolsW'; function EnumerateLoadedModules(hProcess:THANDLE; EnumLoadedModulesCallback:TENUMLOADED_MODULES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'EnumerateLoadedModules'; function SymFunctionTableAccess(hProcess:THANDLE; AddrBase:dword):pointer;stdcall;external External_library name 'SymFunctionTableAccess'; function SymGetModuleInfo(hProcess:THANDLE; dwAddr:dword; ModuleInfo:PIMAGEHLP_MODULE):BOOL;stdcall;external External_library name 'SymGetModuleInfo'; function SymGetModuleInfoW(hProcess:THANDLE; dwAddr:dword; ModuleInfo:PIMAGEHLP_MODULEW):BOOL;stdcall;external External_library name 'SymGetModuleInfoW'; function SymGetSymPrev(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymPrev'; function SymGetSymNext(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymNext'; function SymGetModuleBase(hProcess:THANDLE; dwAddr:dword):dword;stdcall;external External_library name 'SymGetModuleBase'; {$ENDIF} function SymGetLineFromAddr64(hProcess:THANDLE; qwAddr:dword64; pdwDisplacement:PDWORD; Line64:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromAddr64'; function SymGetLineFromName64(hProcess:THANDLE; ModuleName:PSTR; FileName:PSTR; dwLineNumber:dword; plDisplacement:PLONG; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromName64'; function SymGetLineNext64(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineNext64'; function SymGetLinePrev64(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLinePrev64'; function SymLoadModule64(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword64; SizeOfDll:dword):dword64;stdcall;external External_library name 'SymLoadModule64'; function SymUnloadModule64(hProcess:THANDLE; BaseOfDll:dword64):BOOL;stdcall;external External_library name 'SymUnloadModule64'; function SymUnDName64(sym:PIMAGEHLP_SYMBOL64; UnDecName:PSTR; UnDecNameLength:dword):BOOL;stdcall;external External_library name 'SymUnDName64'; function SymRegisterCallback64(hProcess:THANDLE; CallbackFunction:TSYMBOL_REGISTERED_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterCallback64'; function SymRegisterFunctionEntryCallback64(hProcess:THANDLE; CallbackFunction:TSYMBOL_FUNCENTRY_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterFunctionEntryCallback64'; {$ifdef IMAGEHLP64} function SymGetLineFromAddr(hProcess:THANDLE; qwAddr:dword64; pdwDisplacement:PDWORD; Line64:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromAddr64'; function SymGetLineFromName(hProcess:THANDLE; ModuleName:PSTR; FileName:PSTR; dwLineNumber:dword; plDisplacement:PLONG; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromName64'; function SymGetLineNext(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineNext64'; function SymGetLinePrev(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLinePrev64'; function SymLoadModule(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword64; SizeOfDll:dword):dword64;stdcall;external External_library name 'SymLoadModule64'; function SymUnloadModule(hProcess:THANDLE; BaseOfDll:dword64):BOOL;stdcall;external External_library name 'SymUnloadModule64'; function SymUnDName(sym:PIMAGEHLP_SYMBOL64; UnDecName:PSTR; UnDecNameLength:dword):BOOL;stdcall;external External_library name 'SymUnDName64'; function SymRegisterCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_REGISTERED_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterCallback64'; function SymRegisterFunctionEntryCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_FUNCENTRY_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterFunctionEntryCallback64'; {$else} function SymGetLineFromAddr(hProcess:THANDLE; dwAddr:dword; pdwDisplacement:PDWORD; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLineFromAddr'; function SymGetLineFromName(hProcess:THANDLE; ModuleName:PSTR; FileName:PSTR; dwLineNumber:dword; plDisplacement:PLONG; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLineFromName'; function SymGetLineNext(hProcess:THANDLE; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLineNext'; function SymGetLinePrev(hProcess:THANDLE; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLinePrev'; function SymLoadModule(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword; SizeOfDll:dword):dword;stdcall;external External_library name 'SymLoadModule'; function SymUnloadModule(hProcess:THANDLE; BaseOfDll:dword):BOOL;stdcall;external External_library name 'SymUnloadModule'; function SymUnDName(sym:PIMAGEHLP_SYMBOL; UnDecName:PSTR; UnDecNameLength:dword):BOOL;stdcall;external External_library name 'SymUnDName'; function SymRegisterCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_REGISTERED_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymRegisterCallback'; function SymRegisterFunctionEntryCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_FUNCENTRY_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymRegisterFunctionEntryCallback'; {$endif} function SymEnumLines(hProcess:THANDLE; Base:ULONG64; Obj:LPCSTR; _File:LPCSTR; EnumLinesCallback:TSYM_ENUMLINES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumLines'; function SymMatchFileName(FileName:PSTR; Match:PSTR; FileNameStop:PPSTR; MatchStop:PPSTR):BOOL;stdcall;external External_library name 'SymMatchFileName'; function SymInitialize(hProcess:THANDLE; UserSearchPath:PSTR; fInvadeProcess:BOOL):BOOL;stdcall;external External_library name 'SymInitialize'; function SymGetSearchPath(hProcess:THANDLE; SearchPath:PSTR; SearchPathLength:dword):BOOL;stdcall;external External_library name 'SymGetSearchPath'; function SymSetSearchPath(hProcess:THANDLE; SearchPath:PSTR):BOOL;stdcall;external External_library name 'SymSetSearchPath'; function SymLoadModuleEx(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword64; DllSize:dword; Data:PMODLOAD_DATA; Flags:dword):dword64;stdcall;external External_library name 'SymLoadModuleEx'; function SymSetContext(hProcess:THANDLE; StackFrame:PIMAGEHLP_STACK_FRAME; Context:PIMAGEHLP_CONTEXT):BOOL;stdcall;external External_library name 'SymSetContext'; function SymFromAddr(hProcess:THANDLE; Address:dword64; Displacement:PDWORD64; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymFromAddr'; function SymFromToken(hProcess:THANDLE; Base:dword64; Token:dword; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymFromToken'; function SymFromName(hProcess:THANDLE; Name:lpstr; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymFromName'; function SymEnumSymbols(hProcess:THANDLE; BaseOfDll:ULONG64; Mask:LPCSTR; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSymbols'; function SymEnumSymbolsForAddr(hProcess:THANDLE; Address:dword64; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSymbolsForAddr'; function SymGetTypeInfo(hProcess:THANDLE; ModBase:dword64; TypeId:ULONG; GetType:TIMAGEHLP_SYMBOL_TYPE_INFO; pInfo:pointer):BOOL;stdcall;external External_library name 'SymGetTypeInfo'; function SymEnumTypes(hProcess:THANDLE; BaseOfDll:ULONG64; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumTypes'; function SymGetTypeFromName(hProcess:THANDLE; BaseOfDll:ULONG64; Name:lpstr; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymGetTypeFromName'; function SymAddSymbol(hProcess:THANDLE; BaseOfDll:ULONG64; Name:LPCSTR; Address:dword64; Size:dword; Flags:dword):BOOL;stdcall;external External_library name 'SymAddSymbol'; function SymDeleteSymbol(hProcess:THANDLE; BaseOfDll:ULONG64; Name:LPCSTR; Address:dword64; Flags:dword):BOOL;stdcall;external External_library name 'SymDeleteSymbol'; function DbgHelpCreateUserDump(FileName:lpstr; Callback:TDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData:pointer):BOOL;stdcall;external External_library name 'DbgHelpCreateUserDump'; function DbgHelpCreateUserDumpW(FileName:LPWSTR; Callback:TDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData:pointer):BOOL;stdcall;external External_library name 'DbgHelpCreateUserDumpW'; function SymGetSymFromAddr64(hProcess:THANDLE; qwAddr:dword64; pdwDisplacement:PDWORD64; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymFromAddr64'; function SymGetSymFromName64(hProcess:THANDLE; Name:PSTR; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymFromName64'; {$ifdef IMAGEHLP64} {$else} function SymGetSymFromAddr(hProcess:THANDLE; dwAddr:dword; pdwDisplacement:PDWORD; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymFromAddr'; function SymGetSymFromName(hProcess:THANDLE; Name:PSTR; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymFromName'; {$endif} function FindFileInPath(hprocess:THANDLE; SearchPath:lpstr; FileName:lpstr; id:pointer; two:dword; three:dword; flags:dword; FilePath:lpstr):BOOL;stdcall;external External_library name 'FindFileInPath'; function FindFileInSearchPath(hprocess:THANDLE; SearchPath:lpstr; FileName:lpstr; one:dword; two:dword; three:dword; FilePath:lpstr):BOOL;stdcall;external External_library name 'FindFileInSearchPath'; function SymEnumSym(hProcess:THANDLE; BaseOfDll:ULONG64; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSym'; function MiniDumpWriteDump(hProcess:THANDLE; ProcessId:dword; hFile:THANDLE; DumpType:TMINIDUMP_TYPE; ExceptionParam:PMINIDUMP_EXCEPTION_INFORMATION; UserStreamParam:PMINIDUMP_USER_STREAM_INFORMATION; CallbackParam:TMINIDUMP_CALLBACK_INFORMATION):BOOL;stdcall;external External_library name 'MiniDumpWriteDump'; function MiniDumpReadDumpStream(BaseOfDump:pointer; StreamNumber:ULONG; Dir:PPMINIDUMP_DIRECTORY; StreamPointer:PPOINTER; StreamSize:PULONG):BOOL;stdcall;external External_library name 'MiniDumpReadDumpStream'; function RVA_TO_ADDR(Mapping:ULONG_PTR;RVA:CARDINAL):POINTER; inline; procedure Address64To32(a64: LPADDRESS64 ;a32:LPADDRESS); inline; Procedure Address32To64(a32: LPADDRESS ;a64:LPADDRESS64); inline; procedure KdHelp32To64(p32:PKDHELP;p64:PKDHELP64); inline; implementation function RVA_TO_ADDR(Mapping:ULONG_PTR;RVA:CARDINAL):POINTER; begin rva_to_addr:=pointer(ulong_ptr(mapping)+rva); end; Procedure Address32To64(a32: LPADDRESS ;a64:LPADDRESS64); begin a64^.Offset := ULONG64(LONG64(LONG(a32^.Offset))); // I assume these multiple typecasts are to avoid sign problems? a64^.Segment := a32^.Segment; a64^.Mode := a32^.Mode; end; procedure Address64To32(a64: LPADDRESS64 ;a32:LPADDRESS); begin a32^.Offset := ULONG(a64^.Offset); a32^.Segment:= a64^.Segment; a32^.Mode := a64^.Mode; end; procedure KdHelp32To64(p32:PKDHELP;p64:PKDHELP64); begin p64^.Thread := p32^.Thread; p64^.ThCallbackStack := p32^.ThCallbackStack; p64^.NextCallback := p32^.NextCallback; p64^.FramePointer := p32^.FramePointer; p64^.KiCallUserMode := p32^.KiCallUserMode; p64^.KeUserCallbackDispatcher := p32^.KeUserCallbackDispatcher; p64^.SystemRangeStart := p32^.SystemRangeStart; end; end.