{******************************************************************************} { } { Image Help API interface Unit for Object Pascal } { } { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } { Corporation. All Rights Reserved. } { } { The original file is: imagehlp.h, released August 2001. The original Pascal } { code is: ImageHelp.pas, released December 2000. The initial developer of the } { Pascal code is Marcel van Brakel (brakelm att chello dott nl). } { } { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } { Marcel van Brakel. All Rights Reserved. } { } { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) } { } { You may retrieve the latest version of this file at the Project JEDI } { APILIB home page, located at http://jedi-apilib.sourceforge.net } { } { The contents of this file are used with permission, subject to the Mozilla } { Public License Version 1.1 (the "License"); you may not use this file except } { in compliance with the License. You may obtain a copy of the License at } { http://www.mozilla.org/MPL/MPL-1.1.html } { } { Software distributed under the License is distributed on an "AS IS" basis, } { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } { the specific language governing rights and limitations under the License. } { } { Alternatively, the contents of this file may be used under the terms of the } { GNU Lesser General Public License (the "LGPL License"), in which case the } { provisions of the LGPL License are applicable instead of those above. } { If you wish to allow use of your version of this file only under the terms } { of the LGPL License and not to allow others to use your version of this file } { under the MPL, indicate your decision by deleting the provisions above and } { replace them with the notice and other provisions required by the LGPL } { License. If you do not delete the provisions above, a recipient may use } { your version of this file under either the MPL or the LGPL License. } { } { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html } { } {******************************************************************************} // $Id: JwaImageHlp.pas,v 1.13 2007/09/14 06:48:45 marquardt Exp $ {$IFNDEF JWA_OMIT_SECTIONS} unit JwaImageHlp; {$WEAKPACKAGEUNIT} {$ENDIF JWA_OMIT_SECTIONS} {$HPPEMIT ''} {$HPPEMIT '#include "ImageHlp.h"'} {$HPPEMIT ''} {$IFNDEF JWA_OMIT_SECTIONS} {$I jediapilib.inc} interface uses Windows, JwaWinBase, JwaWinNT, JwaWinType; {$ENDIF JWA_OMIT_SECTIONS} {$IFNDEF JWA_IMPLEMENTATIONSECTION} const IMAGE_SEPARATION = 64*1024; {$EXTERNALSYM IMAGE_SEPARATION} type PLOADED_IMAGE = ^LOADED_IMAGE; {$EXTERNALSYM PLOADED_IMAGE} _LOADED_IMAGE = record ModuleName: PSTR; hFile: HANDLE; MappedAddress: PUCHAR; FileHeader: PIMAGE_NT_HEADERS32; LastRvaSection: PIMAGE_SECTION_HEADER; NumberOfSections: ULONG; Sections: PIMAGE_SECTION_HEADER; Characteristics: ULONG; fSystemImage: ByteBool; fDOSImage: ByteBool; Links: LIST_ENTRY; SizeOfImage: ULONG; end; {$EXTERNALSYM _LOADED_IMAGE} LOADED_IMAGE = _LOADED_IMAGE; {$EXTERNALSYM LOADED_IMAGE} TLoadedImage = LOADED_IMAGE; PLoadedImage = PLOADED_IMAGE; const MAX_SYM_NAME = 2000; {$EXTERNALSYM MAX_SYM_NAME} function BindImage(ImageName, DllPath, SymbolPath: PSTR): BOOL; stdcall; {$EXTERNALSYM BindImage} type _IMAGEHLP_STATUS_REASON = ( BindOutOfMemory, BindRvaToVaFailed, BindNoRoomInImage, BindImportModuleFailed, BindImportProcedureFailed, BindImportModule, BindImportProcedure, BindForwarder, BindForwarderNOT, BindImageModified, BindExpandFileHeaders, BindImageComplete, BindMismatchedSymbols, BindSymbolsNotUpdated, BindImportProcedure32, BindImportProcedure64, BindForwarder32, BindForwarder64, BindForwarderNOT32, BindForwarderNOT64); {$EXTERNALSYM _IMAGEHLP_STATUS_REASON} IMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON; {$EXTERNALSYM IMAGEHLP_STATUS_REASON} TImageHlpStatusReason = IMAGEHLP_STATUS_REASON; PIMAGEHLP_STATUS_ROUTINE = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR; Va, Parameter: ULONG_PTR): BOOL; stdcall; {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE} PImageHlpStatusRoutine = PIMAGEHLP_STATUS_ROUTINE; PIMAGEHLP_STATUS_ROUTINE32 = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR; Va: ULONG; Parameter: ULONG_PTR): BOOL; stdcall; {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE32} PImageHlpStatusRoutine23 = PIMAGEHLP_STATUS_ROUTINE32; PIMAGEHLP_STATUS_ROUTINE64 = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR; Va: ULONG64; Parameter: ULONG_PTR): BOOL; stdcall; {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE64} PImageHlpStatusRoutine64 = PIMAGEHLP_STATUS_ROUTINE64; function BindImageEx(Flags: DWORD; ImageName, DllPath, SymbolPath: PSTR; StatusRoutine: PIMAGEHLP_STATUS_ROUTINE): BOOL; stdcall; {$EXTERNALSYM BindImageEx} const BIND_NO_BOUND_IMPORTS = $00000001; {$EXTERNALSYM BIND_NO_BOUND_IMPORTS} BIND_NO_UPDATE = $00000002; {$EXTERNALSYM BIND_NO_UPDATE} BIND_ALL_IMAGES = $00000004; {$EXTERNALSYM BIND_ALL_IMAGES} BIND_CACHE_IMPORT_DLLS = $00000008; // Cache dll's across calls to BindImageEx (same as NT 3.1->NT 4.0) {$EXTERNALSYM BIND_CACHE_IMPORT_DLLS} BIND_REPORT_64BIT_VA = $00000010; {$EXTERNALSYM BIND_REPORT_64BIT_VA} function ReBaseImage(CurrentImageName: PSTR; SymbolPath: PSTR; fReBase: BOOL; fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG; var OldImageSize: ULONG; var OldImageBase: ULONG_PTR; var NewImageSize: ULONG; var NewImageBase: ULONG_PTR; TimeStamp: ULONG): BOOL; stdcall; {$EXTERNALSYM ReBaseImage} function ReBaseImage64(CurrentImageName: PSTR; SymbolPath: PSTR; fReBase: BOOL; fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG; var OldImageSize: ULONG; var OldImageBase: ULONG64; var NewImageSize: ULONG; var NewImageBase: ULONG64; TimeStamp: ULONG): BOOL; stdcall; {$EXTERNALSYM ReBaseImage64} // // Define checksum return codes. // const CHECKSUM_SUCCESS = 0; {$EXTERNALSYM CHECKSUM_SUCCESS} CHECKSUM_OPEN_FAILURE = 1; {$EXTERNALSYM CHECKSUM_OPEN_FAILURE} CHECKSUM_MAP_FAILURE = 2; {$EXTERNALSYM CHECKSUM_MAP_FAILURE} CHECKSUM_MAPVIEW_FAILURE = 3; {$EXTERNALSYM CHECKSUM_MAPVIEW_FAILURE} CHECKSUM_UNICODE_FAILURE = 4; {$EXTERNALSYM CHECKSUM_UNICODE_FAILURE} // Define Splitsym flags. SPLITSYM_REMOVE_PRIVATE = $00000001; // Remove CV types/symbols and Fixup debug {$EXTERNALSYM SPLITSYM_REMOVE_PRIVATE} // Used for creating .dbg files that ship // as part of the product. SPLITSYM_EXTRACT_ALL = $00000002; // Extract all debug info from image. {$EXTERNALSYM SPLITSYM_EXTRACT_ALL} // 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 {$EXTERNALSYM SPLITSYM_SYMBOLPATH_IS_SRC} // path to locate the pdb. // // Define checksum function prototypes. // function CheckSumMappedFile(BaseAddress: PVOID; FileLength: DWORD; var HeaderSum, CheckSum: DWORD): PIMAGE_NT_HEADERS; stdcall; {$EXTERNALSYM CheckSumMappedFile} function MapFileAndCheckSumA(Filename: PSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall; {$EXTERNALSYM MapFileAndCheckSumA} function MapFileAndCheckSumW(Filename: PWSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall; {$EXTERNALSYM MapFileAndCheckSumW} function MapFileAndCheckSum(Filename: PTSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall; {$EXTERNALSYM MapFileAndCheckSum} function GetImageConfigInformation(const LoadedImage: LOADED_IMAGE; var ImageConfigInformation: IMAGE_LOAD_CONFIG_DIRECTORY): BOOL; stdcall; {$EXTERNALSYM GetImageConfigInformation} function GetImageUnusedHeaderBytes(const LoadedImage: LOADED_IMAGE; var SizeUnusedHeaderBytes: DWORD): DWORD; stdcall; {$EXTERNALSYM GetImageUnusedHeaderBytes} function SetImageConfigInformation(const LoadedImage: LOADED_IMAGE; const ImageConfigInformation: IMAGE_LOAD_CONFIG_DIRECTORY): BOOL; stdcall; {$EXTERNALSYM SetImageConfigInformation} // Image Integrity API's const CERT_PE_IMAGE_DIGEST_DEBUG_INFO = $01; {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_DEBUG_INFO} CERT_PE_IMAGE_DIGEST_RESOURCES = $02; {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_RESOURCES} CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = $04; {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO} CERT_PE_IMAGE_DIGEST_NON_PE_INFO = $08; // include data outside the PE image {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_NON_PE_INFO} CERT_SECTION_TYPE_ANY = $FF; // Any Certificate type {$EXTERNALSYM CERT_SECTION_TYPE_ANY} type DIGEST_HANDLE = PVOID; {$EXTERNALSYM DIGEST_HANDLE} TDigestHandle = DIGEST_HANDLE; DIGEST_FUNCTION = function(refdata: DIGEST_HANDLE; pData: PBYTE; dwLength: DWORD): BOOL; stdcall; {$EXTERNALSYM DIGEST_FUNCTION} TDigestFunction = DIGEST_FUNCTION; function ImageGetDigestStream(FileHandle: HANDLE; DigestLevel: DWORD; DigestFunction: DIGEST_FUNCTION; DigestHandle: DIGEST_HANDLE): BOOL; stdcall; {$EXTERNALSYM ImageGetDigestStream} function ImageAddCertificate(FileHandle: HANDLE; Certificate: PWinCertificate; var Index: DWORD): BOOL; stdcall; {$EXTERNALSYM ImageAddCertificate} function ImageRemoveCertificate(FileHandle: HANDLE; Index: DWORD): BOOL; stdcall; {$EXTERNALSYM ImageRemoveCertificate} function ImageEnumerateCertificates(FileHandle: HANDLE; TypeFilter: WORD; var CertificateCount: DWORD; Indices: PDWORD; IndexCount: DWORD): BOOL; stdcall; {$EXTERNALSYM ImageEnumerateCertificates} function ImageGetCertificateData(FileHandle: HANDLE; CertificateIndex: DWORD; Certificate: PWinCertificate; var RequiredLength: DWORD): BOOL; stdcall; {$EXTERNALSYM ImageGetCertificateData} function ImageGetCertificateHeader(FileHandle: HANDLE; CertificateIndex: DWORD; Certificateheader: PWinCertificate): BOOL; stdcall; {$EXTERNALSYM ImageGetCertificateHeader} function ImageLoad(DllName: PSTR; DllPath: PSTR): PLOADED_IMAGE; stdcall; {$EXTERNALSYM ImageLoad} function ImageUnload(const LoadedImage: LOADED_IMAGE): BOOL; stdcall; {$EXTERNALSYM ImageUnload} function MapAndLoad(ImageName, DllPath: PSTR; var LoadedImage: LOADED_IMAGE; DotDll: BOOL; ReadOnly: BOOL): BOOL; stdcall; {$EXTERNALSYM MapAndLoad} function UnMapAndLoad(const LoadedImage: LOADED_IMAGE): BOOL; stdcall; {$EXTERNALSYM UnMapAndLoad} function TouchFileTimes(FileHandle: HANDLE; pSystemTime: PSYSTEMTIME): BOOL; stdcall; {$EXTERNALSYM TouchFileTimes} function SplitSymbols(ImageName, SymbolsPath, SymbolFilePath: PSTR; Flags: DWORD): BOOL; stdcall; {$EXTERNALSYM SplitSymbols} function UpdateDebugInfoFile(ImageFileName, SymbolPath, DebugFilePath: PSTR; const NtHeaders: IMAGE_NT_HEADERS32): BOOL; stdcall; {$EXTERNALSYM UpdateDebugInfoFile} function UpdateDebugInfoFileEx(ImageFileName, SymbolPath, DebugFilePath: PSTR; const NtHeaders: IMAGE_NT_HEADERS32; OldChecksum: DWORD): BOOL; stdcall; {$EXTERNALSYM UpdateDebugInfoFileEx} function FindDebugInfoFile(FileName, SymbolPath, DebugFilePath: PSTR): HANDLE; stdcall; {$EXTERNALSYM FindDebugInfoFile} type PFIND_DEBUG_FILE_CALLBACK = function(FileHandle: HANDLE; FileName: PSTR; CallerData: PVOID): BOOL; stdcall; {$EXTERNALSYM PFIND_DEBUG_FILE_CALLBACK} PFindDebugFileCallback = PFIND_DEBUG_FILE_CALLBACK; function FindDebugInfoFileEx(FileName, SymbolPath, DebugFilePath: PSTR; Callback: PFIND_DEBUG_FILE_CALLBACK; CallerData: PVOID): HANDLE; stdcall; {$EXTERNALSYM FindDebugInfoFileEx} type PFINDFILEINPATHCALLBACK = function(filename: PSTR; context: PVOID): BOOL; stdcall; {$EXTERNALSYM PFINDFILEINPATHCALLBACK} function SymFindFileInPath(hprocess: HANDLE; SearchPath, FileName: LPSTR; id: PVOID; two, three, flags: DWORD; FoundFile: LPSTR; callback: PFINDFILEINPATHCALLBACK; context: PVOID): BOOL; stdcall; {$EXTERNALSYM SymFindFileInPath} function FindExecutableImage(FileName, SymbolPath, ImageFilePath: PSTR): HANDLE; stdcall; {$EXTERNALSYM FindExecutableImage} type PFIND_EXE_FILE_CALLBACK = function(FileHandle: HANDLE; FileName: PSTR; CallerData: PVOID): BOOL; stdcall; {$EXTERNALSYM PFIND_EXE_FILE_CALLBACK} PFindExeFileCallback = PFIND_EXE_FILE_CALLBACK; function FindExecutableImageEx(FileName, SymbolPath, ImageFilePath: PSTR; Callback: PFIND_EXE_FILE_CALLBACK; CallerData: PVOID): HANDLE; stdcall; {$EXTERNALSYM FindExecutableImageEx} function ImageNtHeader(Base: PVOID): PIMAGE_NT_HEADERS; stdcall; {$EXTERNALSYM ImageNtHeader} function ImageDirectoryEntryToDataEx(Base: PVOID; MappedAsImage: ByteBool; DirectoryEntry: USHORT; var Size: ULONG; var FoundHeader: PIMAGE_SECTION_HEADER): PVOID; stdcall; {$EXTERNALSYM ImageDirectoryEntryToDataEx} function ImageDirectoryEntryToData(Base: PVOID; MappedAsImage: ByteBool; DirectoryEntry: USHORT; var Size: ULONG): PVOID; stdcall; {$EXTERNALSYM ImageDirectoryEntryToData} function ImageRvaToSection(NtHeaders: PIMAGE_NT_HEADERS; Base: PVOID; Rva: ULONG): PIMAGE_SECTION_HEADER; stdcall; {$EXTERNALSYM ImageRvaToSection} function ImageRvaToVa(NtHeaders: PIMAGE_NT_HEADERS; Base: PVOID; Rva: ULONG; var LastRvaSection: PIMAGE_SECTION_HEADER): PVOID; stdcall; {$EXTERNALSYM ImageRvaToVa} // Symbol server exports type PSYMBOLSERVERPROC = function(a1, a2: LPCSTR; a3: PVOID; a4, a5: DWORD; a6: LPSTR): BOOL; stdcall; {$EXTERNALSYM PSYMBOLSERVERPROC} PSYMBOLSERVEROPENPROC = function: BOOL; stdcall; {$EXTERNALSYM PSYMBOLSERVEROPENPROC} PSYMBOLSERVERCLOSEPROC = function: BOOL; stdcall; {$EXTERNALSYM PSYMBOLSERVERCLOSEPROC} PSYMBOLSERVERSETOPTIONSPROC = function(a1: UINT_PTR; a2: ULONG64): BOOL; stdcall; {$EXTERNALSYM PSYMBOLSERVERSETOPTIONSPROC} PSYMBOLSERVERCALLBACKPROC = function(action: UINT_PTR; data: ULONG64; context: ULONG64): BOOL; stdcall; {$EXTERNALSYM PSYMBOLSERVERCALLBACKPROC} PSYMBOLSERVERGETOPTIONSPROC = function: UINT_PTR; stdcall; {$EXTERNALSYM PSYMBOLSERVERGETOPTIONSPROC} PSYMBOLSERVERPINGPROC = function(a1: LPCSTR): BOOL; stdcall; {$EXTERNALSYM PSYMBOLSERVERPINGPROC} const SSRVOPT_CALLBACK = $01; {$EXTERNALSYM SSRVOPT_CALLBACK} SSRVOPT_DWORD = $02; {$EXTERNALSYM SSRVOPT_DWORD} SSRVOPT_DWORDPTR = $04; {$EXTERNALSYM SSRVOPT_DWORDPTR} SSRVOPT_GUIDPTR = $08; {$EXTERNALSYM SSRVOPT_GUIDPTR} SSRVOPT_OLDGUIDPTR = $10; {$EXTERNALSYM SSRVOPT_OLDGUIDPTR} SSRVOPT_UNATTENDED = $20; {$EXTERNALSYM SSRVOPT_UNATTENDED} SSRVOPT_RESET = ULONG_PTR(-1); {$EXTERNALSYM SSRVOPT_RESET} SSRVACTION_TRACE = 1; {$EXTERNALSYM SSRVACTION_TRACE} // This api won't be ported to Win64 - Fix your code. type PIMAGE_DEBUG_INFORMATION = ^IMAGE_DEBUG_INFORMATION; {$EXTERNALSYM PIMAGE_DEBUG_INFORMATION} _IMAGE_DEBUG_INFORMATION = record List: LIST_ENTRY; ReservedSize: DWORD; ReservedMappedBase: PVOID; 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: PVOID; 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; {$EXTERNALSYM _IMAGE_DEBUG_INFORMATION} IMAGE_DEBUG_INFORMATION = _IMAGE_DEBUG_INFORMATION; {$EXTERNALSYM IMAGE_DEBUG_INFORMATION} TImageDebugInformation = IMAGE_DEBUG_INFORMATION; PImageDebugInformation = PIMAGE_DEBUG_INFORMATION; function MapDebugInformation(FileHandle: HANDLE; FileName, SymbolPath: PSTR; ImageBase: DWORD): PIMAGE_DEBUG_INFORMATION; stdcall; {$EXTERNALSYM MapDebugInformation} function UnmapDebugInformation(DebugInfo: PIMAGE_DEBUG_INFORMATION): BOOL; stdcall; {$EXTERNALSYM UnmapDebugInformation} function SearchTreeForFile(RootPath, InputPathName, OutputPathBuffer: PSTR): BOOL; stdcall; {$EXTERNALSYM SearchTreeForFile} type PENUMDIRTREE_CALLBACK = function(FilePath: LPCSTR; CallerData: PVOID): BOOL; stdcall; {$EXTERNALSYM PENUMDIRTREE_CALLBACK} PEnumDirTreeCallback = PENUMDIRTREE_CALLBACK; function EnumDirTree(hProcess: HANDLE; RootPath, InputPathName, OutputPathBuffer: PSTR; Callback: PENUMDIRTREE_CALLBACK; CallbackData: PVOID): BOOL; stdcall; {$EXTERNALSYM EnumDirTree} function MakeSureDirectoryPathExists(DirPath: PCSTR): BOOL; stdcall; {$EXTERNALSYM MakeSureDirectoryPathExists} // // UnDecorateSymbolName Flags // const UNDNAME_COMPLETE = $0000; // Enable full undecoration {$EXTERNALSYM UNDNAME_COMPLETE} UNDNAME_NO_LEADING_UNDERSCORES = $0001; // Remove leading underscores from MS extended keywords {$EXTERNALSYM UNDNAME_NO_LEADING_UNDERSCORES} UNDNAME_NO_MS_KEYWORDS = $0002; // Disable expansion of MS extended keywords {$EXTERNALSYM UNDNAME_NO_MS_KEYWORDS} UNDNAME_NO_FUNCTION_RETURNS = $0004; // Disable expansion of return type for primary declaration {$EXTERNALSYM UNDNAME_NO_FUNCTION_RETURNS} UNDNAME_NO_ALLOCATION_MODEL = $0008; // Disable expansion of the declaration model {$EXTERNALSYM UNDNAME_NO_ALLOCATION_MODEL} UNDNAME_NO_ALLOCATION_LANGUAGE = $0010; // Disable expansion of the declaration language specifier {$EXTERNALSYM UNDNAME_NO_ALLOCATION_LANGUAGE} UNDNAME_NO_MS_THISTYPE = $0020; // NYI Disable expansion of MS keywords on the 'this' type for primary declaration {$EXTERNALSYM UNDNAME_NO_MS_THISTYPE} UNDNAME_NO_CV_THISTYPE = $0040; // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration {$EXTERNALSYM UNDNAME_NO_CV_THISTYPE} UNDNAME_NO_THISTYPE = $0060; // Disable all modifiers on the 'this' type {$EXTERNALSYM UNDNAME_NO_THISTYPE} UNDNAME_NO_ACCESS_SPECIFIERS = $0080; // Disable expansion of access specifiers for members {$EXTERNALSYM UNDNAME_NO_ACCESS_SPECIFIERS} UNDNAME_NO_THROW_SIGNATURES = $0100; // Disable expansion of 'throw-signatures' for functions and pointers to functions {$EXTERNALSYM UNDNAME_NO_THROW_SIGNATURES} UNDNAME_NO_MEMBER_TYPE = $0200; // Disable expansion of 'static' or 'virtual'ness of members {$EXTERNALSYM UNDNAME_NO_MEMBER_TYPE} UNDNAME_NO_RETURN_UDT_MODEL = $0400; // Disable expansion of MS model for UDT returns {$EXTERNALSYM UNDNAME_NO_RETURN_UDT_MODEL} UNDNAME_32_BIT_DECODE = $0800; // Undecorate 32-bit decorated names {$EXTERNALSYM UNDNAME_32_BIT_DECODE} UNDNAME_NAME_ONLY = $1000; // Crack only the name for primary declaration; {$EXTERNALSYM UNDNAME_NAME_ONLY} // return just [scope::]name. Does expand template params UNDNAME_NO_ARGUMENTS = $2000; // Don't undecorate arguments to function {$EXTERNALSYM UNDNAME_NO_ARGUMENTS} UNDNAME_NO_SPECIAL_SYMS = $4000; // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc) {$EXTERNALSYM UNDNAME_NO_SPECIAL_SYMS} function UnDecorateSymbolName(DecoratedName: PCSTR; UnDecoratedName: PSTR; UndecoratedLength: DWORD; Flags: DWORD): DWORD; stdcall; {$EXTERNALSYM UnDecorateSymbolName} // // these values are used for synthesized file types // that can be passed in as image headers instead of // the standard ones from ntimage.h // const DBHHEADER_DEBUGDIRS = $1; {$EXTERNALSYM DBHHEADER_DEBUGDIRS} type _MODLOAD_DATA = record ssize: DWORD; // size of this struct ssig: DWORD; // signature identifying the passed data data: PVOID; // pointer to passed data size: DWORD; // size of passed data flags: DWORD; // options end; {$EXTERNALSYM _MODLOAD_DATA} MODLOAD_DATA = _MODLOAD_DATA; {$EXTERNALSYM MODLOAD_DATA} PMODLOAD_DATA = ^MODLOAD_DATA; {$EXTERNALSYM PMODLOAD_DATA} TModLoadData = MODLOAD_DATA; PModLoadData = PMODLOAD_DATA; // // StackWalking API // type ADDRESS_MODE = ( AddrMode1616, AddrMode1632, AddrModeReal, AddrModeFlat); {$EXTERNALSYM ADDRESS_MODE} TAddressMode = ADDRESS_MODE; LPADDRESS64 = ^ADDRESS64; {$EXTERNALSYM PADDRESS64} _tagADDRESS64 = record Offset: DWORD64; Segment: WORD; Mode: ADDRESS_MODE; end; {$EXTERNALSYM _tagADDRESS64} ADDRESS64 = _tagADDRESS64; {$EXTERNALSYM ADDRESS64} TAddress64 = ADDRESS64; PAddress64 = LPADDRESS64; LPADDRESS = ^ADDRESS; {$EXTERNALSYM PADDRESS} _tagADDRESS = record Offset: DWORD; Segment: WORD; Mode: ADDRESS_MODE; end; {$EXTERNALSYM _tagADDRESS} ADDRESS = _tagADDRESS; {$EXTERNALSYM ADDRESS} TAddress = ADDRESS; PAddress = LPADDRESS; procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64); {$EXTERNALSYM Address32To64} procedure Address64To32(a64: LPADDRESS64; a32: LPADDRESS); {$EXTERNALSYM Address64To32} // // This structure is included in the STACKFRAME structure, // and is used to trace through usermode callbacks in a thread's // kernel stack. The values must be copied by the kernel debugger // from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets. // // // New KDHELP structure for 64 bit system support. // This structure is preferred in new code. // type PKDHELP64 = ^KDHELP64; {$EXTERNALSYM PKDHELP64} _KDHELP64 = record // // address of kernel thread object, as provided in the // WAIT_STATE_CHANGE packet. // Thread: DWORD64; // // offset in thread object to pointer to the current callback frame // in kernel stack. // ThCallbackStack: DWORD; // // offset in thread object to pointer to the current callback backing // store frame in kernel stack. // ThCallbackBStore: DWORD; // // offsets to values in frame: // // address of next callback frame NextCallback: DWORD; // address of saved frame pointer (if applicable) FramePointer: DWORD; // // Address of the kernel function that calls out to user mode // KiCallUserMode: DWORD64; // // Address of the user mode dispatcher function // KeUserCallbackDispatcher: DWORD64; // // Lowest kernel mode address // SystemRangeStart: DWORD64; Reserved: array [0..7] of DWORD64; end; {$EXTERNALSYM _KDHELP64} KDHELP64 = _KDHELP64; {$EXTERNALSYM KDHELP64} TKdHelp64 = KDHELP64; //PKdHelp64 = PKDHELP64; PKDHELP = ^KDHELP; {$EXTERNALSYM PKDHELP} _KDHELP = record // // address of kernel thread object, as provided in the // WAIT_STATE_CHANGE packet. // Thread: DWORD; // // offset in thread object to pointer to the current callback frame // in kernel stack. // ThCallbackStack: DWORD; // // offsets to values in frame: // // address of next callback frame NextCallback: DWORD; // address of saved frame pointer (if applicable) FramePointer: DWORD; // // Address of the kernel function that calls out to user mode // KiCallUserMode: DWORD; // // Address of the user mode dispatcher function // KeUserCallbackDispatcher: DWORD; // // Lowest kernel mode address // SystemRangeStart: DWORD; // // offset in thread object to pointer to the current callback backing // store frame in kernel stack. // ThCallbackBStore: DWORD; Reserved: array [0..7] of DWORD; end; {$EXTERNALSYM _KDHELP} KDHELP = _KDHELP; {$EXTERNALSYM KDHELP} TKdHelp = KDHELP; //PKdHelp = PKDHELP; procedure KdHelp32To64(p32: PKDHELP; p64: PKDHELP64); {$EXTERNALSYM KdHelp32To64} type LPSTACKFRAME64 = ^STACKFRAME64; {$EXTERNALSYM LPSTACKFRAME64} _tagSTACKFRAME64 = record AddrPC: ADDRESS64; // program counter AddrReturn: ADDRESS64; // return address AddrFrame: ADDRESS64; // frame pointer AddrStack: ADDRESS64; // stack pointer AddrBStore: ADDRESS64; // backing store pointer FuncTableEntry: PVOID; // pointer to pdata/fpo or NULL Params: array [0..3] of DWORD64; // possible arguments to the function Far: BOOL; // WOW far call Virtual: BOOL; // is this a virtual frame? Reserved: array [0..2] of DWORD64; KdHelp: KDHELP64; end; {$EXTERNALSYM _tagSTACKFRAME64} STACKFRAME64 = _tagSTACKFRAME64; {$EXTERNALSYM STACKFRAME64} TStackFrame64 = STACKFRAME64; PStackFrame64 = LPSTACKFRAME64; LPSTACKFRAME = ^STACKFRAME; {$EXTERNALSYM LPSTACKFRAME} _tagSTACKFRAME = record AddrPC: ADDRESS; // program counter AddrReturn: ADDRESS; // return address AddrFrame: ADDRESS; // frame pointer AddrStack: ADDRESS; // stack pointer FuncTableEntry: PVOID; // pointer to pdata/fpo or NULL Params: array [0..3] of DWORD; // possible arguments to the function Far: BOOL; // WOW far call Virtual: BOOL; // is this a virtual frame? Reserved: array [0..2] of DWORD; KdHelp: KDHELP; AddrBStore: ADDRESS; // backing store pointer end; {$EXTERNALSYM _tagSTACKFRAME} STACKFRAME = _tagSTACKFRAME; {$EXTERNALSYM STACKFRAME} TStackFrame = STACKFRAME; PStackFrame = LPSTACKFRAME; PREAD_PROCESS_MEMORY_ROUTINE64 = function(hProcess: HANDLE; qwBaseAddress: DWORD64; lpBuffer: PVOID; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall; {$EXTERNALSYM PREAD_PROCESS_MEMORY_ROUTINE64} PReadProcessMemoryRoutine64 = PREAD_PROCESS_MEMORY_ROUTINE64; PFUNCTION_TABLE_ACCESS_ROUTINE64 = function(hProcess: HANDLE; AddrBase: DWORD64): PVOID; stdcall; {$EXTERNALSYM PFUNCTION_TABLE_ACCESS_ROUTINE64} PFunctionTableAccessRoutine64 = PFUNCTION_TABLE_ACCESS_ROUTINE64; PGET_MODULE_BASE_ROUTINE64 = function(hProcess: HANDLE; Address: DWORD64): DWORD64; stdcall; {$EXTERNALSYM PGET_MODULE_BASE_ROUTINE64} PGetModuleBaseRoutine64 = PGET_MODULE_BASE_ROUTINE64; PTRANSLATE_ADDRESS_ROUTINE64 = function(hProcess: HANDLE; hThread: HANDLE; const lpaddr: ADDRESS64): DWORD64; stdcall; {$EXTERNALSYM PTRANSLATE_ADDRESS_ROUTINE64} PTranslateAddressRoutine64 = PTRANSLATE_ADDRESS_ROUTINE64; function StackWalk64(MachineType: DWORD; hProcess: HANDLE; hThread: HANDLE; var StackFrame: STACKFRAME64; ContextRecord: PVOID; ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64; FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64; GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64; TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64): BOOL; stdcall; {$EXTERNALSYM StackWalk64} type PREAD_PROCESS_MEMORY_ROUTINE = function(hProcess: HANDLE; lpBaseAddress: DWORD; lpBuffer: PVOID; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall; {$EXTERNALSYM PREAD_PROCESS_MEMORY_ROUTINE} PreadProcessMemoryRoutine = PREAD_PROCESS_MEMORY_ROUTINE; PFUNCTION_TABLE_ACCESS_ROUTINE = function(hProcess: HANDLE; AddrBase: DWORD): PVOID; stdcall; {$EXTERNALSYM PFUNCTION_TABLE_ACCESS_ROUTINE} PFunctionTableAccessRoutine = PFUNCTION_TABLE_ACCESS_ROUTINE; PGET_MODULE_BASE_ROUTINE = function(hProcess: HANDLE; Address: DWORD): DWORD; stdcall; {$EXTERNALSYM PGET_MODULE_BASE_ROUTINE} PGetModuleBaseRoutine = PGET_MODULE_BASE_ROUTINE; PTRANSLATE_ADDRESS_ROUTINE = function(hProcess: HANDLE; hThread: HANDLE; const lpaddr: ADDRESS): DWORD; stdcall; {$EXTERNALSYM PTRANSLATE_ADDRESS_ROUTINE} PTranslateAddressRoutine = PTRANSLATE_ADDRESS_ROUTINE; function StackWalk(MachineType: DWORD; hProcess: HANDLE; hThread: HANDLE; var StackFrame: STACKFRAME; ContextRecord: PVOID; ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE; FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE; GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE; TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE): BOOL; stdcall; {$EXTERNALSYM StackWalk} const API_VERSION_NUMBER = 9; {$EXTERNALSYM API_VERSION_NUMBER} type LPAPI_VERSION = ^API_VERSION; {$EXTERNALSYM LPAPI_VERSION} API_VERSION = record MajorVersion: USHORT; MinorVersion: USHORT; Revision: USHORT; Reserved: USHORT; end; {$EXTERNALSYM API_VERSION} TApiVersion = API_VERSION; PApiVersion = LPAPI_VERSION; function ImagehlpApiVersion: LPAPI_VERSION; stdcall; {$EXTERNALSYM ImagehlpApiVersion} function ImagehlpApiVersionEx(const AppVersion: API_VERSION): LPAPI_VERSION; stdcall; {$EXTERNALSYM ImagehlpApiVersionEx} function GetTimestampForLoadedLibrary(Module: HMODULE): DWORD; stdcall; {$EXTERNALSYM GetTimestampForLoadedLibrary} // // typedefs for function pointers // type PSYM_ENUMMODULES_CALLBACK64 = function(ModuleName: PSTR; BaseOfDll: DWORD64; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK64} PSymEnummodulesCallback64 = PSYM_ENUMMODULES_CALLBACK64; PSYM_ENUMSYMBOLS_CALLBACK64 = function(SymbolName: PSTR; SymbolAddress: DWORD64; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64} PSymEnumsymbolsCallback64 = PSYM_ENUMSYMBOLS_CALLBACK64; PSYM_ENUMSYMBOLS_CALLBACK64W = function(SymbolName: PWSTR; SymbolAddress: DWORD64; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64W} PSymEnumsymbolsCallback64w = PSYM_ENUMSYMBOLS_CALLBACK64W; PENUMLOADED_MODULES_CALLBACK64 = function(ModuleName: PSTR; ModuleBase: DWORD64; ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK64} PSnumloadedModulesCallback64 = PENUMLOADED_MODULES_CALLBACK64; PSYMBOL_REGISTERED_CALLBACK64 = function(hProcess: HANDLE; ActionCode: ULONG; CallbackData: ULONG64; UserContext: ULONG64): BOOL; stdcall; {$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK64} PSymbolRegisteredCallback64 = PSYMBOL_REGISTERED_CALLBACK64; PSYMBOL_FUNCENTRY_CALLBACK = function(hProcess: HANDLE; AddrBase: DWORD; UserContext: PVOID): PVOID; stdcall; {$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK} PSymbolFuncentryCallback = PSYMBOL_FUNCENTRY_CALLBACK; PSYMBOL_FUNCENTRY_CALLBACK64 = function(hProcess: HANDLE; AddrBase: ULONG64; UserContext: ULONG64): PVOID; stdcall; {$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK64} PSymbolFuncentryCallback64 = PSYMBOL_FUNCENTRY_CALLBACK64; PSYM_ENUMMODULES_CALLBACK = function(ModuleName: PSTR; BaseOfDll: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK} PSymEnummodulesCallback = PSYM_ENUMMODULES_CALLBACK; PSYM_ENUMSYMBOLS_CALLBACK = function(SymbolName: PSTR; SymbolAddress: ULONG; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK} PSymEnumsymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK; PSYM_ENUMSYMBOLS_CALLBACKW = function(SymbolName: PWSTR; SymbolAddress: ULONG; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACKW} PSymEnumsymbolsCallbackw = PSYM_ENUMSYMBOLS_CALLBACKW; PENUMLOADED_MODULES_CALLBACK = function(ModuleName: PSTR; ModuleBase: ULONG; ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK} PEnumloadedModulesCallback = PENUMLOADED_MODULES_CALLBACK; PSYMBOL_REGISTERED_CALLBACK = function(hProcess: HANDLE; ActionCode: ULONG; CallbackData: PVOID; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK} PSymbolRegisteredCallback = PSYMBOL_REGISTERED_CALLBACK; // // flags found in SYMBOL_INFO.Flags // const SYMFLAG_VALUEPRESENT = $00000001; {$EXTERNALSYM SYMFLAG_VALUEPRESENT} SYMFLAG_REGISTER = $00000008; {$EXTERNALSYM SYMFLAG_REGISTER} SYMFLAG_REGREL = $00000010; {$EXTERNALSYM SYMFLAG_REGREL} SYMFLAG_FRAMEREL = $00000020; {$EXTERNALSYM SYMFLAG_FRAMEREL} SYMFLAG_PARAMETER = $00000040; {$EXTERNALSYM SYMFLAG_PARAMETER} SYMFLAG_LOCAL = $00000080; {$EXTERNALSYM SYMFLAG_LOCAL} SYMFLAG_CONSTANT = $00000100; {$EXTERNALSYM SYMFLAG_CONSTANT} SYMFLAG_EXPORT = $00000200; {$EXTERNALSYM SYMFLAG_EXPORT} SYMFLAG_FORWARDER = $00000400; {$EXTERNALSYM SYMFLAG_FORWARDER} SYMFLAG_FUNCTION = $00000800; {$EXTERNALSYM SYMFLAG_FUNCTION} SYMFLAG_VIRTUAL = $00001000; {$EXTERNALSYM SYMFLAG_VIRTUAL} SYMFLAG_THUNK = $00002000; {$EXTERNALSYM SYMFLAG_THUNK} SYMFLAG_TLSREL = $00004000; {$EXTERNALSYM SYMFLAG_TLSREL} // // symbol type enumeration // type SYM_TYPE = ( SymNone, SymCoff, SymCv, SymPdb, SymExport, SymDeferred, SymSym, // .sym file SymDia, SymVirtual, NumSymTypes); {$EXTERNALSYM SYM_TYPE} TSymType = SYM_TYPE; // // symbol data structure // PIMAGEHLP_SYMBOL64 = ^IMAGEHLP_SYMBOL64; {$EXTERNALSYM PIMAGEHLP_SYMBOL64} _IMAGEHLP_SYMBOL64 = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL64) Address: DWORD64; // virtual address including dll base address Size: DWORD; // estimated size of symbol, can be zero Flags: DWORD; // info about the symbols, see the SYMF defines MaxNameLength: DWORD; // maximum size of symbol name in 'Name' Name: array [0..0] of CHAR; // symbol name (null terminated string) end; {$EXTERNALSYM _IMAGEHLP_SYMBOL64} IMAGEHLP_SYMBOL64 = _IMAGEHLP_SYMBOL64; {$EXTERNALSYM IMAGEHLP_SYMBOL64} TImageHlpSymbol64 = IMAGEHLP_SYMBOL64; PImageHlpSymbol64 = PIMAGEHLP_SYMBOL64; _IMAGEHLP_SYMBOL64_PACKAGE = record sym: IMAGEHLP_SYMBOL64; name: array [0..MAX_SYM_NAME] of CHAR; end; {$EXTERNALSYM _IMAGEHLP_SYMBOL64_PACKAGE} IMAGEHLP_SYMBOL64_PACKAGE = _IMAGEHLP_SYMBOL64_PACKAGE; {$EXTERNALSYM IMAGEHLP_SYMBOL64_PACKAGE} PIMAGEHLP_SYMBOL64_PACKAGE = ^IMAGEHLP_SYMBOL64_PACKAGE; {$EXTERNALSYM PIMAGEHLP_SYMBOL64_PACKAGE} TImageHlpSymbol64Package = IMAGEHLP_SYMBOL64_PACKAGE; PImageHlpSymbol64Package = PIMAGEHLP_SYMBOL64_PACKAGE; //#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) // //#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64 //#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64 //#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE //#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE // //#else PIMAGEHLP_SYMBOL = ^IMAGEHLP_SYMBOL; {$EXTERNALSYM PIMAGEHLP_SYMBOL} _IMAGEHLP_SYMBOL = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL) Address: DWORD; // virtual address including dll base address Size: DWORD; // estimated size of symbol, can be zero Flags: DWORD; // info about the symbols, see the SYMF defines MaxNameLength: DWORD; // maximum size of symbol name in 'Name' Name: array [0..0] of CHAR; // symbol name (null terminated string) end; {$EXTERNALSYM _IMAGEHLP_SYMBOL} IMAGEHLP_SYMBOL = _IMAGEHLP_SYMBOL; {$EXTERNALSYM IMAGEHLP_SYMBOL} TImageHlpSymbol = IMAGEHLP_SYMBOL; PImageHlpSymbol = PIMAGEHLP_SYMBOL; _IMAGEHLP_SYMBOL_PACKAGE = record sym: IMAGEHLP_SYMBOL; name: array [0..MAX_SYM_NAME] of CHAR; end; {$EXTERNALSYM _IMAGEHLP_SYMBOL_PACKAGE} IMAGEHLP_SYMBOL_PACKAGE = _IMAGEHLP_SYMBOL_PACKAGE; {$EXTERNALSYM IMAGEHLP_SYMBOL_PACKAGE} PIMAGEHLP_SYMBOL_PACKAGE = ^IMAGEHLP_SYMBOL_PACKAGE; {$EXTERNALSYM PIMAGEHLP_SYMBOL_PACKAGE} TImageHlpSymbolPackage = IMAGEHLP_SYMBOL_PACKAGE; PImageHlpSymbolPackage = PIMAGEHLP_SYMBOL_PACKAGE; //#endif // // module data structure // PIMAGEHLP_MODULE64 = ^IMAGEHLP_MODULE64; {$EXTERNALSYM PIMAGEHLP_MODULE64} _IMAGEHLP_MODULE64 = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64) BaseOfImage: DWORD64; // base load address of module ImageSize: DWORD; // virtual size of the loaded module TimeDateStamp: DWORD; // date/time stamp from pe header CheckSum: DWORD; // checksum from the pe header NumSyms: DWORD; // number of symbols in the symbol table SymType: SYM_TYPE; // type of symbols loaded ModuleName: array [0..3] of CHAR; // module name ImageName: array [0..255] of CHAR; // image name LoadedImageName: array [0..255] of CHAR; // symbol file name end; {$EXTERNALSYM _IMAGEHLP_MODULE64} IMAGEHLP_MODULE64 = _IMAGEHLP_MODULE64; {$EXTERNALSYM IMAGEHLP_MODULE64} TImageHlpModule64 = IMAGEHLP_MODULE64; PImageHlpModule64 = PIMAGEHLP_MODULE64; PIMAGEHLP_MODULEW64 = ^IMAGEHLP_MODULEW64; {$EXTERNALSYM PIMAGEHLP_MODULEW64} _IMAGEHLP_MODULE64W = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64) BaseOfImage: DWORD64; // base load address of module ImageSize: DWORD; // virtual size of the loaded module TimeDateStamp: DWORD; // date/time stamp from pe header CheckSum: DWORD; // checksum from the pe header NumSyms: DWORD; // number of symbols in the symbol table SymType: SYM_TYPE; // type of symbols loaded ModuleName: array [0..31] of WCHAR; // module name ImageName: array [0..255] of WCHAR; // image name LoadedImageName: array [0..255] of WCHAR; // symbol file name end; {$EXTERNALSYM _IMAGEHLP_MODULE64W} IMAGEHLP_MODULEW64 = _IMAGEHLP_MODULE64W; {$EXTERNALSYM IMAGEHLP_MODULEW64} TImageHlpModuleW64 = IMAGEHLP_MODULEW64; PImageHlpModuleW64 = PIMAGEHLP_MODULEW64; PIMAGEHLP_MODULE = ^IMAGEHLP_MODULE; {$EXTERNALSYM PIMAGEHLP_MODULE} _IMAGEHLP_MODULE = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE) BaseOfImage: DWORD; // base load address of module ImageSize: DWORD; // virtual size of the loaded module TimeDateStamp: DWORD; // date/time stamp from pe header CheckSum: DWORD; // checksum from the pe header NumSyms: DWORD; // number of symbols in the symbol table SymType: SYM_TYPE; // type of symbols loaded ModuleName: array [0..31] of CHAR; // module name ImageName: array [0..255] of CHAR; // image name LoadedImageName: array [0..255] of CHAR; // symbol file name end; {$EXTERNALSYM _IMAGEHLP_MODULE} IMAGEHLP_MODULE = _IMAGEHLP_MODULE; {$EXTERNALSYM IMAGEHLP_MODULE} TImageHlpModule = IMAGEHLP_MODULE; PImageHlpModule = PIMAGEHLP_MODULE; PIMAGEHLP_MODULEW = ^IMAGEHLP_MODULEW; {$EXTERNALSYM PIMAGEHLP_MODULEW} _IMAGEHLP_MODULEW = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE) BaseOfImage: DWORD; // base load address of module ImageSize: DWORD; // virtual size of the loaded module TimeDateStamp: DWORD; // date/time stamp from pe header CheckSum: DWORD; // checksum from the pe header NumSyms: DWORD; // number of symbols in the symbol table SymType: SYM_TYPE; // type of symbols loaded ModuleName: array [0..31] of WCHAR; // module name ImageName: array [0..255] of WCHAR; // image name LoadedImageName: array [0..255] of WCHAR; // symbol file name end; {$EXTERNALSYM _IMAGEHLP_MODULEW} IMAGEHLP_MODULEW = _IMAGEHLP_MODULEW; {$EXTERNALSYM IMAGEHLP_MODULEW} TImageHlpModuleW = IMAGEHLP_MODULEW; PImageHlpModuleW = PIMAGEHLP_MODULEW; // // source file line data structure // PIMAGEHLP_LINE64 = ^IMAGEHLP_LINE64; {$EXTERNALSYM PIMAGEHLP_LINE64} _IMAGEHLP_LINE64 = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE64) Key: PVOID; // internal LineNumber: DWORD; // line number in file FileName: PCHAR; // full filename Address: DWORD64; // first instruction of line end; {$EXTERNALSYM _IMAGEHLP_LINE64} IMAGEHLP_LINE64 = _IMAGEHLP_LINE64; {$EXTERNALSYM IMAGEHLP_LINE64} TImageHlpLine64 = IMAGEHLP_LINE64; PImageHlpLine64 = PIMAGEHLP_LINE64; PIMAGEHLP_LINE = ^IMAGEHLP_LINE; {$EXTERNALSYM PIMAGEHLP_LINE} _IMAGEHLP_LINE = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE) Key: PVOID; // internal LineNumber: DWORD; // line number in file FileName: PCHAR; // full filename Address: DWORD; // first instruction of line end; {$EXTERNALSYM _IMAGEHLP_LINE} IMAGEHLP_LINE = _IMAGEHLP_LINE; {$EXTERNALSYM IMAGEHLP_LINE} TImageHlpLine = IMAGEHLP_LINE; PImageHlpLine = PIMAGEHLP_LINE; // // source file structure // type _SOURCEFILE = record ModBase: DWORD64; // base address of loaded module FileName: PCHAR; // full filename of source end; {$EXTERNALSYM _SOURCEFILE} SOURCEFILE = _SOURCEFILE; {$EXTERNALSYM SOURCEFILE} PSOURCEFILE = ^SOURCEFILE; {$EXTERNALSYM PSOURCEFILE} TSourceFile = SOURCEFILE; // // data structures used for registered symbol callbacks // const CBA_DEFERRED_SYMBOL_LOAD_START = $00000001; {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_START} CBA_DEFERRED_SYMBOL_LOAD_COMPLETE = $00000002; {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_COMPLETE} CBA_DEFERRED_SYMBOL_LOAD_FAILURE = $00000003; {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_FAILURE} CBA_SYMBOLS_UNLOADED = $00000004; {$EXTERNALSYM CBA_SYMBOLS_UNLOADED} CBA_DUPLICATE_SYMBOL = $00000005; {$EXTERNALSYM CBA_DUPLICATE_SYMBOL} CBA_READ_MEMORY = $00000006; {$EXTERNALSYM CBA_READ_MEMORY} CBA_DEFERRED_SYMBOL_LOAD_CANCEL = $00000007; {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_CANCEL} CBA_SET_OPTIONS = $00000008; {$EXTERNALSYM CBA_SET_OPTIONS} CBA_EVENT = $00000010; {$EXTERNALSYM CBA_EVENT} CBA_DEFERRED_SYMBOL_LOAD_PARTIAL = $00000020; {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_PARTIAL} CBA_DEBUG_INFO = $10000000; {$EXTERNALSYM CBA_DEBUG_INFO} type PIMAGEHLP_CBA_READ_MEMORY = ^IMAGEHLP_CBA_READ_MEMORY; {$EXTERNALSYM PIMAGEHLP_CBA_READ_MEMORY} _IMAGEHLP_CBA_READ_MEMORY = record addr: DWORD64; // address to read from buf: PVOID; // buffer to read to bytes: DWORD; // amount of bytes to read bytesread: LPDWORD; // pointer to store amount of bytes read end; {$EXTERNALSYM _IMAGEHLP_CBA_READ_MEMORY} IMAGEHLP_CBA_READ_MEMORY = _IMAGEHLP_CBA_READ_MEMORY; {$EXTERNALSYM IMAGEHLP_CBA_READ_MEMORY} TImageHlpCbaReadMemory = IMAGEHLP_CBA_READ_MEMORY; PImageHlpCbaReadMemory = PIMAGEHLP_CBA_READ_MEMORY; const sevInfo = 0; {$EXTERNALSYM sevInfo} sevProblem = 1; {$EXTERNALSYM sevProblem} sevAttn = 2; {$EXTERNALSYM sevAttn} sevFatal = 3; {$EXTERNALSYM sevFatal} sevMax = 4; // unused {$EXTERNALSYM sevMax} type _IMAGEHLP_CBA_EVENT = record severity: DWORD; // values from sevInfo to sevFatal code: DWORD; // numerical code IDs the error desc: PCHAR; // may contain a text description of the error object_: PVOID; // value dependant upon the error code end; {$EXTERNALSYM _IMAGEHLP_CBA_EVENT} IMAGEHLP_CBA_EVENT = _IMAGEHLP_CBA_EVENT; {$EXTERNALSYM IMAGEHLP_CBA_EVENT} PIMAGEHLP_CBA_EVENT = ^IMAGEHLP_CBA_EVENT; {$EXTERNALSYM PIMAGEHLP_CBA_EVENT} TImageHlpCbaEvent = IMAGEHLP_CBA_EVENT; PImageHlpCbaEvent = PIMAGEHLP_CBA_EVENT; PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD64; {$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD64} _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64) BaseOfImage: DWORD64; // base load address of module CheckSum: DWORD; // checksum from the pe header TimeDateStamp: DWORD; // date/time stamp from pe header FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name Reparse: ByteBool; // load failure reparse hFile: HANDLE; // file handle, if passed Flags: DWORD; // end; {$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD64} IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = _IMAGEHLP_DEFERRED_SYMBOL_LOAD64; {$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD64} TImageHlpDeferredSymbolLoad64 = IMAGEHLP_DEFERRED_SYMBOL_LOAD64; PImageHlpDeferredSymbolLoad64 = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; const DSLFLAG_MISMATCHED_PDB = $1; {$EXTERNALSYM DSLFLAG_MISMATCHED_PDB} DSLFLAG_MISMATCHED_DBG = $2; {$EXTERNALSYM DSLFLAG_MISMATCHED_DBG} type PIMAGEHLP_DEFERRED_SYMBOL_LOAD = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD; {$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD} _IMAGEHLP_DEFERRED_SYMBOL_LOAD = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD) BaseOfImage: DWORD; // base load address of module CheckSum: DWORD; // checksum from the pe header TimeDateStamp: DWORD; // date/time stamp from pe header FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name Reparse: ByteBool; // load failure reparse hFile: HANDLE; // file handle, if passed end; {$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD} IMAGEHLP_DEFERRED_SYMBOL_LOAD = _IMAGEHLP_DEFERRED_SYMBOL_LOAD; {$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD} TImageHlpDeferredSymbolLoad = IMAGEHLP_DEFERRED_SYMBOL_LOAD; PImageHlpDeferredSymbolLoad = PIMAGEHLP_DEFERRED_SYMBOL_LOAD; PIMAGEHLP_DUPLICATE_SYMBOL64 = ^IMAGEHLP_DUPLICATE_SYMBOL64; {$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL64} _IMAGEHLP_DUPLICATE_SYMBOL64 = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64) NumberOfDups: DWORD; // number of duplicates in the Symbol array Symbol: PIMAGEHLP_SYMBOL64; // array of duplicate symbols SelectedSymbol: DWORD; // symbol selected (-1 to start) end; {$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL64} IMAGEHLP_DUPLICATE_SYMBOL64 = _IMAGEHLP_DUPLICATE_SYMBOL64; {$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL64} TImageHlpDuplicateSymbol64 = IMAGEHLP_DUPLICATE_SYMBOL64; PImageHlpDuplicateSymbol64 = PIMAGEHLP_DUPLICATE_SYMBOL64; PIMAGEHLP_DUPLICATE_SYMBOL = ^IMAGEHLP_DUPLICATE_SYMBOL; {$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL} _IMAGEHLP_DUPLICATE_SYMBOL = record SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL) NumberOfDups: DWORD; // number of duplicates in the Symbol array Symbol: PIMAGEHLP_SYMBOL; // array of duplicate symbols SelectedSymbol: DWORD; // symbol selected (-1 to start) end; {$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL} IMAGEHLP_DUPLICATE_SYMBOL = _IMAGEHLP_DUPLICATE_SYMBOL; {$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL} TImageHlpDuplicateSymbol = IMAGEHLP_DUPLICATE_SYMBOL; PImageHlpDuplicateSymbol = PIMAGEHLP_DUPLICATE_SYMBOL; // If dbghelp ever needs to display graphical UI, it will use this as the parent window. //BOOL //SymSetParentWindow( // HWND hwnd // ); // // options that are set/returned by SymSetOptions() & SymGetOptions() // these are used as a mask // const SYMOPT_CASE_INSENSITIVE = $00000001; {$EXTERNALSYM SYMOPT_CASE_INSENSITIVE} SYMOPT_UNDNAME = $00000002; {$EXTERNALSYM SYMOPT_UNDNAME} SYMOPT_DEFERRED_LOADS = $00000004; {$EXTERNALSYM SYMOPT_DEFERRED_LOADS} SYMOPT_NO_CPP = $00000008; {$EXTERNALSYM SYMOPT_NO_CPP} SYMOPT_LOAD_LINES = $00000010; {$EXTERNALSYM SYMOPT_LOAD_LINES} SYMOPT_OMAP_FIND_NEAREST = $00000020; {$EXTERNALSYM SYMOPT_OMAP_FIND_NEAREST} SYMOPT_LOAD_ANYTHING = $00000040; {$EXTERNALSYM SYMOPT_LOAD_ANYTHING} SYMOPT_IGNORE_CVREC = $00000080; {$EXTERNALSYM SYMOPT_IGNORE_CVREC} SYMOPT_NO_UNQUALIFIED_LOADS = $00000100; {$EXTERNALSYM SYMOPT_NO_UNQUALIFIED_LOADS} SYMOPT_FAIL_CRITICAL_ERRORS = $00000200; {$EXTERNALSYM SYMOPT_FAIL_CRITICAL_ERRORS} SYMOPT_EXACT_SYMBOLS = $00000400; {$EXTERNALSYM SYMOPT_EXACT_SYMBOLS} SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = $00000800; {$EXTERNALSYM SYMOPT_ALLOW_ABSOLUTE_SYMBOLS} SYMOPT_IGNORE_NT_SYMPATH = $00001000; {$EXTERNALSYM SYMOPT_IGNORE_NT_SYMPATH} SYMOPT_INCLUDE_32BIT_MODULES = $00002000; {$EXTERNALSYM SYMOPT_INCLUDE_32BIT_MODULES} SYMOPT_PUBLICS_ONLY = $00004000; {$EXTERNALSYM SYMOPT_PUBLICS_ONLY} SYMOPT_NO_PUBLICS = $00008000; {$EXTERNALSYM SYMOPT_NO_PUBLICS} SYMOPT_AUTO_PUBLICS = $00010000; {$EXTERNALSYM SYMOPT_AUTO_PUBLICS} SYMOPT_NO_IMAGE_SEARCH = $00020000; {$EXTERNALSYM SYMOPT_NO_IMAGE_SEARCH} SYMOPT_SECURE = $00040000; {$EXTERNALSYM SYMOPT_SECURE} SYMOPT_DEBUG = DWORD($80000000); {$EXTERNALSYM SYMOPT_DEBUG} function SymSetOptions(SymOptions: DWORD): DWORD; stdcall; {$EXTERNALSYM SymSetOptions} function SymGetOptions: DWORD; stdcall; {$EXTERNALSYM SymGetOptions} function SymCleanup(hProcess: HANDLE): BOOL; stdcall; {$EXTERNALSYM SymCleanup} function SymMatchString(string_, expression: LPSTR; fCase: BOOL): BOOL; stdcall; {$EXTERNALSYM SymMatchString} type PSYM_ENUMSOURCFILES_CALLBACK = function(pSourceFile: PSOURCEFILE; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMSOURCFILES_CALLBACK} PSymEnumSourceFilesCallback = PSYM_ENUMSOURCFILES_CALLBACK; function SymEnumSourceFiles(hProcess: HANDLE; ModBase: ULONG64; Mask: LPSTR; cbSrcFiles: PSYM_ENUMSOURCFILES_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumSourceFiles} function SymEnumerateModules64(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK64; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumerateModules64} function SymEnumerateModules(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumerateModules} function SymEnumerateSymbols64(hProcess: HANDLE; BaseOfDll: DWORD64; EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK64; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumerateSymbols64} function SymEnumerateSymbolsW64(hProcess: HANDLE; BaseOfDll: DWORD64; EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK64W; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumerateSymbolsW64} function SymEnumerateSymbols(hProcess: HANDLE; BaseOfDll: DWORD; EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumerateSymbols} function SymEnumerateSymbolsW(hProcess: HANDLE; BaseOfDll: DWORD; EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACKW; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumerateSymbolsW} function EnumerateLoadedModules64(hProcess: HANDLE; EnumLoadedModulesCallback: PENUMLOADED_MODULES_CALLBACK64; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM EnumerateLoadedModules64} function EnumerateLoadedModules(hProcess: HANDLE; EnumLoadedModulesCallback: PENUMLOADED_MODULES_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM EnumerateLoadedModules} function SymFunctionTableAccess64(hProcess: HANDLE; AddrBase: DWORD64): PVOID; stdcall; {$EXTERNALSYM SymFunctionTableAccess64} function SymFunctionTableAccess(hProcess: HANDLE; AddrBase: DWORD): PVOID; stdcall; {$EXTERNALSYM SymFunctionTableAccess} function SymGetModuleInfo64(hProcess: HANDLE; qwAddr: DWORD64; var ModuleInfo: IMAGEHLP_MODULE64): BOOL; stdcall; {$EXTERNALSYM SymGetModuleInfo64} function SymGetModuleInfoW64(hProcess: HANDLE; qwAddr: DWORD64; var ModuleInfo: IMAGEHLP_MODULEW64): BOOL; stdcall; {$EXTERNALSYM SymGetModuleInfoW64} function SymGetModuleInfo(hProcess: HANDLE; dwAddr: DWORD; var ModuleInfo: IMAGEHLP_MODULE): BOOL; stdcall; {$EXTERNALSYM SymGetModuleInfo} function SymGetModuleInfoW(hProcess: HANDLE; dwAddr: DWORD; var ModuleInfo: IMAGEHLP_MODULEW): BOOL; stdcall; {$EXTERNALSYM SymGetModuleInfoW} function SymGetModuleBase64(hProcess: HANDLE; qwAddr: DWORD64): DWORD64; stdcall; {$EXTERNALSYM SymGetModuleBase64} function SymGetModuleBase(hProcess: HANDLE; dwAddr: DWORD): DWORD; stdcall; {$EXTERNALSYM SymGetModuleBase} function SymGetSymNext64(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL64): BOOL; stdcall; {$EXTERNALSYM SymGetSymNext64} function SymGetSymNext(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL): BOOL; stdcall; {$EXTERNALSYM SymGetSymNext} function SymGetSymPrev64(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL64): BOOL; stdcall; {$EXTERNALSYM SymGetSymPrev64} function SymGetSymPrev(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL): BOOL; stdcall; {$EXTERNALSYM SymGetSymPrev} function SymGetLineFromAddr64(hProcess: HANDLE; qwAddr: DWORD64; var pdwDisplacement: DWORD; var Line64: IMAGEHLP_LINE64): BOOL; stdcall; {$EXTERNALSYM SymGetLineFromAddr64} function SymGetLineFromAddr(hProcess: HANDLE; dwAddr: DWORD; var pdwDisplacement: DWORD; var Line: IMAGEHLP_LINE): BOOL; stdcall; {$EXTERNALSYM SymGetLineFromAddr} function SymGetLineFromName64(hProcess: HANDLE; ModuleName: PSTR; FileName: PSTR; dwLineNumber: DWORD; var plDisplacement: LONG; var Line: IMAGEHLP_LINE64): BOOL; stdcall; {$EXTERNALSYM SymGetLineFromName64} function SymGetLineFromName(hProcess: HANDLE; ModuleName: PSTR; FileName: PSTR; dwLineNumber: DWORD; var plDisplacement: LONG; var Line: IMAGEHLP_LINE): BOOL; stdcall; {$EXTERNALSYM SymGetLineFromName} function SymGetLineNext64(hProcess: HANDLE; var Line: IMAGEHLP_LINE64): BOOL; stdcall; {$EXTERNALSYM SymGetLineNext64} function SymGetLineNext(hProcess: HANDLE; var Line: IMAGEHLP_LINE): BOOL; stdcall; {$EXTERNALSYM SymGetLineNext} function SymGetLinePrev64(hProcess: HANDLE; var Line: IMAGEHLP_LINE64): BOOL; stdcall; {$EXTERNALSYM SymGetLinePrev64} function SymGetLinePrev(hProcess: HANDLE; var Line: IMAGEHLP_LINE): BOOL; stdcall; {$EXTERNALSYM SymGetLinePrev} function SymMatchFileName(FileName, Match: PSTR; var FileNameStop, MatchStop: PSTR): BOOL; stdcall; {$EXTERNALSYM SymMatchFileName} function SymInitialize(hProcess: HANDLE; UserSearchPath: PSTR; fInvadeProcess: BOOL): BOOL; stdcall; {$EXTERNALSYM SymInitialize} function SymGetSearchPath(hProcess: HANDLE; SearchPath: PSTR; SearchPathLength: DWORD): BOOL; stdcall; {$EXTERNALSYM SymGetSearchPath} function SymSetSearchPath(hProcess: HANDLE; SearchPath: PSTR): BOOL; stdcall; {$EXTERNALSYM SymSetSearchPath} function SymLoadModule64(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR; BaseOfDll: DWORD64; SizeOfDll: DWORD): DWORD64; stdcall; {$EXTERNALSYM SymLoadModule64} const SLMFLAG_VIRTUAL = $1; {$EXTERNALSYM SLMFLAG_VIRTUAL} function SymLoadModuleEx(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR; BaseOfDll: DWORD64; DllSize: DWORD; Data: PMODLOAD_DATA; Flag: DWORD): DWORD64; stdcall; {$EXTERNALSYM SymLoadModuleEx} function SymLoadModule(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR; BaseOfDll: DWORD; SizeOfDll: DWORD): DWORD; stdcall; {$EXTERNALSYM SymLoadModule} function SymUnloadModule64(hProcess: HANDLE; BaseOfDll: DWORD64): BOOL; stdcall; {$EXTERNALSYM SymUnloadModule64} function SymUnloadModule(hProcess: HANDLE; BaseOfDll: DWORD): BOOL; stdcall; {$EXTERNALSYM SymUnloadModule} function SymUnDName64(const sym: IMAGEHLP_SYMBOL64; UnDecName: PSTR; UnDecNameLength: DWORD): BOOL; stdcall; {$EXTERNALSYM SymUnDName64} function SymUnDName(const sym: IMAGEHLP_SYMBOL; UnDecName: PSTR; UnDecNameLength: DWORD): BOOL; stdcall; {$EXTERNALSYM SymUnDName} function SymRegisterCallback64(hProcess: HANDLE; CallbackFunction: PSYMBOL_REGISTERED_CALLBACK64; UserContext: ULONG64): BOOL; stdcall; {$EXTERNALSYM SymRegisterCallback64} function SymRegisterFunctionEntryCallback64(hProcess: HANDLE; CallbackFunction: PSYMBOL_FUNCENTRY_CALLBACK64; UserContext: ULONG64): BOOL; stdcall; {$EXTERNALSYM SymRegisterFunctionEntryCallback64} function SymRegisterCallback(hProcess: HANDLE; CallbackFunction: PSYMBOL_REGISTERED_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymRegisterCallback} function SymRegisterFunctionEntryCallback(hProcess: HANDLE; CallbackFunction: PSYMBOL_FUNCENTRY_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymRegisterFunctionEntryCallback} type PIMAGEHLP_SYMBOL_SRC = ^IMAGEHLP_SYMBOL_SRC; {$EXTERNALSYM PIMAGEHLP_SYMBOL_SRC} _IMAGEHLP_SYMBOL_SRC = record sizeofstruct: DWORD; type_: DWORD; file_: array [0..MAX_PATH - 1] of Char; end; {$EXTERNALSYM _IMAGEHLP_SYMBOL_SRC} IMAGEHLP_SYMBOL_SRC = _IMAGEHLP_SYMBOL_SRC; {$EXTERNALSYM IMAGEHLP_SYMBOL_SRC} TImageHlpSymbolSrc = IMAGEHLP_SYMBOL_SRC; PImageHlpSymbolSrc = PIMAGEHLP_SYMBOL_SRC; PMODULE_TYPE_INFO = ^MODULE_TYPE_INFO; {$EXTERNALSYM PMODULE_TYPE_INFO} _MODULE_TYPE_INFO = record dataLength: USHORT; leaf: USHORT; data: array [0..0] of BYTE; end; {$EXTERNALSYM _MODULE_TYPE_INFO} MODULE_TYPE_INFO = _MODULE_TYPE_INFO; {$EXTERNALSYM MODULE_TYPE_INFO} TModuleTypeInfo = MODULE_TYPE_INFO; PModuleTypeInfo = PMODULE_TYPE_INFO; type PSYMBOL_INFO = ^SYMBOL_INFO; {$EXTERNALSYM PSYMBOL_INFO} _SYMBOL_INFO = record SizeOfStruct: ULONG; TypeIndex: ULONG; // Type Index of symbol Reserved: array [0..1] of ULONG64; Info: ULONG; Size: ULONG; ModBase: ULONG64; // Base Address of module comtaining this symbol Flags: ULONG; Value: ULONG64; // Value of symbol, ValuePresent should be 1 Address: ULONG64; // Address of symbol including base address of module Register_: ULONG; // register holding value or pointer to value Scope: ULONG; // scope of the symbol Tag: ULONG; // pdb classification NameLen: ULONG; // Actual length of name MaxNameLen: ULONG; Name: array [0..0] of CHAR; // Name of symbol end; {$EXTERNALSYM _SYMBOL_INFO} SYMBOL_INFO = _SYMBOL_INFO; {$EXTERNALSYM SYMBOL_INFO} TSymbolInfo = SYMBOL_INFO; PSymbolInfo = PSYMBOL_INFO; _SYMBOL_INFO_PACKAGE = record si: SYMBOL_INFO; name: array [0..MAX_SYM_NAME] of CHAR; end; {$EXTERNALSYM _SYMBOL_INFO_PACKAGE} SYMBOL_INFO_PACKAGE = _SYMBOL_INFO_PACKAGE; {$EXTERNALSYM SYMBOL_INFO_PACKAGE} PSYMBOL_INFO_PACKAGE = ^SYMBOL_INFO_PACKAGE; {$EXTERNALSYM PSYMBOL_INFO_PACKAGE} TSymbolInfoPackage = SYMBOL_INFO_PACKAGE; PSymbolInfoPackage = PSYMBOL_INFO_PACKAGE; PIMAGEHLP_STACK_FRAME = ^IMAGEHLP_STACK_FRAME; {$EXTERNALSYM PIMAGEHLP_STACK_FRAME} _IMAGEHLP_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; {$EXTERNALSYM _IMAGEHLP_STACK_FRAME} IMAGEHLP_STACK_FRAME = _IMAGEHLP_STACK_FRAME; {$EXTERNALSYM IMAGEHLP_STACK_FRAME} TImageHlpStackFrame = IMAGEHLP_STACK_FRAME; PImageHlpStackFrame = PIMAGEHLP_STACK_FRAME; IMAGEHLP_CONTEXT = LPVOID; {$EXTERNALSYM IMAGEHLP_CONTEXT} PIMAGEHLP_CONTEXT = ^IMAGEHLP_CONTEXT; {$EXTERNALSYM PIMAGEHLP_CONTEXT} TImageHlpContext = IMAGEHLP_CONTEXT; PImageHlpContext = PIMAGEHLP_CONTEXT; function SymSetContext(hProcess: HANDLE; StackFrame: PIMAGEHLP_STACK_FRAME; Context: PIMAGEHLP_CONTEXT): BOOL; stdcall; {$EXTERNALSYM SymSetContext} function SymFromAddr(hProcess: HANDLE; Address: DWORD64; Displacement: PDWORD64; Symbol: PSYMBOL_INFO): BOOL; stdcall; {$EXTERNALSYM SymFromAddr} // While SymFromName will provide a symbol from a name, // SymEnumSymbols can provide the same matching information // for ALL symbols with a matching name, even regular // expressions. That way you can search across modules // and differentiate between identically named symbols. function SymFromName(hProcess: HANDLE; Name: LPSTR; Symbol: PSYMBOL_INFO): BOOL; stdcall; {$EXTERNALSYM SymFromName} type PSYM_ENUMERATESYMBOLS_CALLBACK = function(pSymInfo: PSYMBOL_INFO; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM PSYM_ENUMERATESYMBOLS_CALLBACK} PSymEnumerateSymbolsCallback = PSYM_ENUMERATESYMBOLS_CALLBACK; function SymEnumSymbols(hProcess: HANDLE; BaseOfDll: ULONG64; Mask: PCSTR; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumSymbols} function SymEnumSymbolsForAddr(hProcess: HANDLE; Address: DWORD64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumSymbolsForAddr} 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); {$EXTERNALSYM _IMAGEHLP_SYMBOL_TYPE_INFO} IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO; {$EXTERNALSYM IMAGEHLP_SYMBOL_TYPE_INFO} TImageHlpSymbolTypeInfo = IMAGEHLP_SYMBOL_TYPE_INFO; PTI_FINDCHILDREN_PARAMS = ^TI_FINDCHILDREN_PARAMS; {$EXTERNALSYM PTI_FINDCHILDREN_PARAMS} _TI_FINDCHILDREN_PARAMS = record Count: ULONG; Start: ULONG; ChildId: array [0..0] of ULONG; end; {$EXTERNALSYM _TI_FINDCHILDREN_PARAMS} TI_FINDCHILDREN_PARAMS = _TI_FINDCHILDREN_PARAMS; {$EXTERNALSYM TI_FINDCHILDREN_PARAMS} TTiFindChildrenParams = TI_FINDCHILDREN_PARAMS; PTiFindChildrenParams = PTI_FINDCHILDREN_PARAMS; function SymGetTypeInfo(hProcess: HANDLE; ModBase: DWORD64; TypeId: ULONG; GetType: IMAGEHLP_SYMBOL_TYPE_INFO; pInfo: PVOID): BOOL; stdcall; {$EXTERNALSYM SymGetTypeInfo} function SymEnumTypes(hProcess: HANDLE; BaseOfDll: ULONG64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumTypes} function SymGetTypeFromName(hProcess: HANDLE; BaseOfDll: ULONG64; Name: LPSTR; Symbol: PSYMBOL_INFO): BOOL; stdcall; {$EXTERNALSYM SymGetTypeFromName} function SymAddSymbol(hProcess: HANDLE; BaseOfDll: ULONG64; Name: PCSTR; Address: DWORD64; Size, Flags: DWORD): BOOL; stdcall; {$EXTERNALSYM SymAddSymbol} function SymDeleteSymbol(hProcess: HANDLE; BaseOfDll: ULONG64; Name: PCSTR; Address: DWORD64; Flags: DWORD): BOOL; stdcall; {$EXTERNALSYM SymDeleteSymbol} // // Full user-mode dump creation. // type PDBGHELP_CREATE_USER_DUMP_CALLBACK = function(DataType: DWORD; var Data: PVOID; DataLength: LPDWORD; UserData: PVOID): BOOL; stdcall; {$EXTERNALSYM PDBGHELP_CREATE_USER_DUMP_CALLBACK} PDbgHelpCreateUserDumpCallback = PDBGHELP_CREATE_USER_DUMP_CALLBACK; function DbgHelpCreateUserDump(FileName: LPSTR; Callback: PDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData: PVOID): BOOL; stdcall; {$EXTERNALSYM DbgHelpCreateUserDump} function DbgHelpCreateUserDumpW(FileName: LPWSTR; Callback: PDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData: PVOID): BOOL; stdcall; {$EXTERNALSYM DbgHelpCreateUserDumpW} // ----------------------------------------------------------------- // The following 4 legacy APIs are fully supported, but newer // ones are recommended. SymFromName and SymFromAddr provide // much more detailed info on the returned symbol. function SymGetSymFromAddr64(hProcess: HANDLE; qwAddr: DWORD64; pdwDisplacement: PDWORD64; Symbol: PIMAGEHLP_SYMBOL64): BOOL; stdcall; {$EXTERNALSYM SymGetSymFromAddr64} function SymGetSymFromAddr(hProcess: HANDLE; dwAddr: DWORD; pdwDisplacement: PDWORD; Symbol: PIMAGEHLP_SYMBOL): BOOL; stdcall; {$EXTERNALSYM SymGetSymFromAddr} // While following two APIs will provide a symbol from a name, // SymEnumSymbols can provide the same matching information // for ALL symbols with a matching name, even regular // expressions. That way you can search across modules // and differentiate between identically named symbols. function SymGetSymFromName64(hProcess: HANDLE; Name: PSTR; Symbol: PIMAGEHLP_SYMBOL64): BOOL; stdcall; {$EXTERNALSYM SymGetSymFromName64} function SymGetSymFromName(hProcess: HANDLE; Name: PSTR; Symbol: PIMAGEHLP_SYMBOL): BOOL; stdcall; {$EXTERNALSYM SymGetSymFromName} // ----------------------------------------------------------------- // The following APIs exist only for backwards compatibility // with a pre-release version documented in an MSDN release. // You should use SymFindFileInPath if you want to maintain // future compatibility. function FindFileInPath(hprocess: HANDLE; SearchPath: LPSTR; FileName: LPSTR; id: PVOID; two: DWORD; three: DWORD; flags: DWORD; FilePath: LPSTR): BOOL; stdcall; {$EXTERNALSYM FindFileInPath} // You should use SymFindFileInPath if you want to maintain // future compatibility. function FindFileInSearchPath(hprocess: HANDLE; SearchPath: LPSTR; FileName: LPSTR; one: DWORD; two: DWORD; three: DWORD; FilePath: LPSTR): BOOL; stdcall; {$EXTERNALSYM FindFileInSearchPath} function SymEnumSym(hProcess: HANDLE; BaseOfDll: ULONG64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall; {$EXTERNALSYM SymEnumSym} // These values should not be used. // They have been replaced by SYMFLAG_ values. const 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; // 0x0008 IMAGEHLP_SYMBOL_INFO_REGRELATIVE = SYMF_REGREL; // 0x0010 IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE = SYMF_FRAMEREL; // 0x0020 IMAGEHLP_SYMBOL_INFO_PARAMETER = SYMF_PARAMETER; // 0x0040 IMAGEHLP_SYMBOL_INFO_LOCAL = SYMF_LOCAL; // 0x0080 IMAGEHLP_SYMBOL_INFO_CONSTANT = SYMF_CONSTANT; // 0x0100 IMAGEHLP_SYMBOL_FUNCTION = SYMF_FUNCTION; // 0x0800 IMAGEHLP_SYMBOL_VIRTUAL = SYMF_VIRTUAL; // 0x1000 IMAGEHLP_SYMBOL_THUNK = SYMF_THUNK; // 0x2000 IMAGEHLP_SYMBOL_INFO_TLSRELATIVE = SYMF_TLSREL; // 0x4000 const MINIDUMP_SIGNATURE = 'PMDM'; {$EXTERNALSYM MINIDUMP_SIGNATURE} MINIDUMP_VERSION = 42899; {$EXTERNALSYM MINIDUMP_VERSION} type RVA = DWORD; {$EXTERNALSYM RVA} RVA64 = ULONG64; {$EXTERNALSYM RVA64} _MINIDUMP_LOCATION_DESCRIPTOR = record DataSize: ULONG32; Rva: RVA; end; {$EXTERNALSYM _MINIDUMP_LOCATION_DESCRIPTOR} MINIDUMP_LOCATION_DESCRIPTOR = _MINIDUMP_LOCATION_DESCRIPTOR; {$EXTERNALSYM MINIDUMP_LOCATION_DESCRIPTOR} TMinidumpLocationDescriptor = MINIDUMP_LOCATION_DESCRIPTOR; PMinidumpLocationDescriptor = ^MINIDUMP_LOCATION_DESCRIPTOR; _MINIDUMP_LOCATION_DESCRIPTOR64 = record DataSize: ULONG64; Rva: RVA64; end; {$EXTERNALSYM _MINIDUMP_LOCATION_DESCRIPTOR64} MINIDUMP_LOCATION_DESCRIPTOR64 = _MINIDUMP_LOCATION_DESCRIPTOR64; {$EXTERNALSYM MINIDUMP_LOCATION_DESCRIPTOR64} TMinidumpLocationDescriptor64 = MINIDUMP_LOCATION_DESCRIPTOR64; PMinidumpLocationDescriptor64 = ^MINIDUMP_LOCATION_DESCRIPTOR64; PMINIDUMP_MEMORY_DESCRIPTOR = ^MINIDUMP_MEMORY_DESCRIPTOR; {$EXTERNALSYM PMINIDUMP_MEMORY_DESCRIPTOR} _MINIDUMP_MEMORY_DESCRIPTOR = record StartOfMemoryRange: ULONG64; Memory: MINIDUMP_LOCATION_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_MEMORY_DESCRIPTOR} MINIDUMP_MEMORY_DESCRIPTOR = _MINIDUMP_MEMORY_DESCRIPTOR; {$EXTERNALSYM MINIDUMP_MEMORY_DESCRIPTOR} TMinidumpMemoryDescriptor = MINIDUMP_MEMORY_DESCRIPTOR; PMinidumpMemoryDescriptor = PMINIDUMP_MEMORY_DESCRIPTOR; // DESCRIPTOR64 is used for full-memory minidumps where // all of the raw memory is laid out sequentially at the // end of the dump. There is no need for individual RVAs // as the RVA is the base RVA plus the sum of the preceeding // data blocks. PMINIDUMP_MEMORY_DESCRIPTOR64 = ^MINIDUMP_MEMORY_DESCRIPTOR64; {$EXTERNALSYM PMINIDUMP_MEMORY_DESCRIPTOR64} _MINIDUMP_MEMORY_DESCRIPTOR64 = record StartOfMemoryRange: ULONG64; DataSize: ULONG64; end; {$EXTERNALSYM _MINIDUMP_MEMORY_DESCRIPTOR64} MINIDUMP_MEMORY_DESCRIPTOR64 = _MINIDUMP_MEMORY_DESCRIPTOR64; {$EXTERNALSYM MINIDUMP_MEMORY_DESCRIPTOR64} TMinidumpMemoryDescriptor64 = MINIDUMP_MEMORY_DESCRIPTOR64; PMinidumpMemoryDescriptor64 = PMINIDUMP_MEMORY_DESCRIPTOR64; PMINIDUMP_HEADER = ^MINIDUMP_HEADER; {$EXTERNALSYM PMINIDUMP_HEADER} _MINIDUMP_HEADER = record Signature: ULONG32; Version: ULONG32; NumberOfStreams: ULONG32; StreamDirectoryRva: RVA; CheckSum: ULONG32; U: record case Integer of 0: (Reserved: ULONG32); 1: (TimeDateStamp: ULONG32); end; Flags: ULONG64; end; {$EXTERNALSYM _MINIDUMP_HEADER} MINIDUMP_HEADER = _MINIDUMP_HEADER; {$EXTERNALSYM MINIDUMP_HEADER} TMinidumpHeader = MINIDUMP_HEADER; PMinidumpHeader = PMINIDUMP_HEADER; // // The MINIDUMP_HEADER field StreamDirectoryRva points to // an array of MINIDUMP_DIRECTORY structures. // PMINIDUMP_DIRECTORY = ^MINIDUMP_DIRECTORY; {$EXTERNALSYM PMINIDUMP_DIRECTORY} _MINIDUMP_DIRECTORY = record StreamType: ULONG32; Location: MINIDUMP_LOCATION_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_DIRECTORY} MINIDUMP_DIRECTORY = _MINIDUMP_DIRECTORY; {$EXTERNALSYM MINIDUMP_DIRECTORY} TMinidumpDirectory = MINIDUMP_DIRECTORY; PMinidumpDirectory = PMINIDUMP_DIRECTORY; PMINIDUMP_STRING = ^MINIDUMP_STRING; {$EXTERNALSYM PMINIDUMP_STRING} _MINIDUMP_STRING = record Length: ULONG32; // Length in bytes of the string Buffer: PWCHAR; // Variable size buffer end; {$EXTERNALSYM _MINIDUMP_STRING} MINIDUMP_STRING = _MINIDUMP_STRING; {$EXTERNALSYM MINIDUMP_STRING} TMinidumpString = MINIDUMP_STRING; PMinidumpString = PMINIDUMP_STRING; // // The MINIDUMP_DIRECTORY field StreamType may be one of the following types. // Types will be added in the future, so if a program reading the minidump // header encounters a stream type it does not understand it should ignore // the data altogether. Any tag above LastReservedStream will not be used by // the system and is reserved for program-specific information. // const UnusedStream = 0; {$EXTERNALSYM UnusedStream} ReservedStream0 = 1; {$EXTERNALSYM ReservedStream0} ReservedStream1 = 2; {$EXTERNALSYM ReservedStream1} ThreadListStream = 3; {$EXTERNALSYM ThreadListStream} ModuleListStream = 4; {$EXTERNALSYM ModuleListStream} MemoryListStream = 5; {$EXTERNALSYM MemoryListStream} ExceptionStream = 6; {$EXTERNALSYM ExceptionStream} SystemInfoStream = 7; {$EXTERNALSYM SystemInfoStream} ThreadExListStream = 8; {$EXTERNALSYM ThreadExListStream} Memory64ListStream = 9; {$EXTERNALSYM Memory64ListStream} CommentStreamA = 10; {$EXTERNALSYM CommentStreamA} CommentStreamW = 11; {$EXTERNALSYM CommentStreamW} HandleDataStream = 12; {$EXTERNALSYM HandleDataStream} FunctionTableStream = 13; {$EXTERNALSYM FunctionTableStream} UnloadedModuleListStream = 14; {$EXTERNALSYM UnloadedModuleListStream} MiscInfoStream = 15; {$EXTERNALSYM MiscInfoStream} LastReservedStream = $ffff; {$EXTERNALSYM LastReservedStream} type _MINIDUMP_STREAM_TYPE = DWORD; {$EXTERNALSYM MINIDUMP_STREAM_TYPE} MINIDUMP_STREAM_TYPE = _MINIDUMP_STREAM_TYPE; {$EXTERNALSYM _MINIDUMP_STREAM_TYPE} TMinidumpStreamType = MINIDUMP_STREAM_TYPE; // // The minidump system information contains processor and // Operating System specific information. // type _CPU_INFORMATION = record case Integer of // // X86 platforms use CPUID function to obtain processor information. // 0: ( // // CPUID Subfunction 0, register EAX (VendorId [0]), // EBX (VendorId [1]) and ECX (VendorId [2]). // VendorId: array [0..2] of ULONG32; // // CPUID Subfunction 1, register EAX // VersionInformation: ULONG32; // // CPUID Subfunction 1, register EDX // FeatureInformation: ULONG32; // // CPUID, Subfunction 80000001, register EBX. This will only // be obtained if the vendor id is "AuthenticAMD". // AMDExtendedCpuFeatures: ULONG32); // // Non-x86 platforms use processor feature flags. // 1: ( ProcessorFeatures: array [0..1] of ULONG64); end; _MINIDUMP_SYSTEM_INFO = record // // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ). // ProcessorArchitecture: USHORT; ProcessorLevel: USHORT; ProcessorRevision: USHORT; U: record case Integer of 0: (Reserved0: USHORT); 1: ( NumberOfProcessors: UCHAR; ProductType: UCHAR); end; // // MajorVersion, MinorVersion, BuildNumber, PlatformId and // CSDVersion are all taken from the OSVERSIONINFO structure // returned by GetVersionEx( ). // MajorVersion: ULONG32; MinorVersion: ULONG32; BuildNumber: ULONG32; PlatformId: ULONG32; // // RVA to a CSDVersion string in the string table. // CSDVersionRva: RVA; U2: record case Integer of 0: (Reserved1: ULONG32); 1: ( SuiteMask: USHORT; Reserved2: USHORT); end; // // CPU information is obtained from one of two places. // // 1) On x86 computers, CPU_INFORMATION is obtained from the CPUID // instruction. You must use the X86 portion of the union for X86 // computers. // // 2) On non-x86 architectures, CPU_INFORMATION is obtained by calling // IsProcessorFeatureSupported(). // Cpu: _CPU_INFORMATION; end; {$EXTERNALSYM _MINIDUMP_SYSTEM_INFO} MINIDUMP_SYSTEM_INFO = _MINIDUMP_SYSTEM_INFO; {$EXTERNALSYM MINIDUMP_SYSTEM_INFO} PMINIDUMP_SYSTEM_INFO = ^MINIDUMP_SYSTEM_INFO; {$EXTERNALSYM PMINIDUMP_SYSTEM_INFO} TMinidumpSystemInfo = MINIDUMP_SYSTEM_INFO; PMinidumpSystemInfo = PMINIDUMP_SYSTEM_INFO; CPU_INFORMATION = _CPU_INFORMATION; {$EXTERNALSYM CPU_INFORMATION} PCPU_INFORMATION = CPU_INFORMATION; {$EXTERNALSYM PCPU_INFORMATION} // // The minidump thread contains standard thread // information plus an RVA to the memory for this // thread and an RVA to the CONTEXT structure for // this thread. // // // ThreadId must be 4 bytes on all architectures. // // C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4); type PMINIDUMP_THREAD = ^MINIDUMP_THREAD; {$EXTERNALSYM PMINIDUMP_THREAD} _MINIDUMP_THREAD = record ThreadId: ULONG32; SuspendCount: ULONG32; PriorityClass: ULONG32; Priority: ULONG32; Teb: ULONG64; Stack: MINIDUMP_MEMORY_DESCRIPTOR; ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_THREAD} MINIDUMP_THREAD = _MINIDUMP_THREAD; {$EXTERNALSYM MINIDUMP_THREAD} TMinidumpThread = MINIDUMP_THREAD; PMinidumpThread = PMINIDUMP_THREAD; // // The thread list is a container of threads. // PMINIDUMP_THREAD_LIST = ^MINIDUMP_THREAD_LIST; {$EXTERNALSYM PMINIDUMP_THREAD_LIST} _MINIDUMP_THREAD_LIST = record NumberOfThreads: ULONG32; Threads: array [0..0] of MINIDUMP_THREAD; end; {$EXTERNALSYM _MINIDUMP_THREAD_LIST} MINIDUMP_THREAD_LIST = _MINIDUMP_THREAD_LIST; {$EXTERNALSYM MINIDUMP_THREAD_LIST} TMinidumpThreadList = MINIDUMP_THREAD_LIST; PMinidumpThreadList = PMINIDUMP_THREAD_LIST; PMINIDUMP_THREAD_EX = ^MINIDUMP_THREAD_EX; {$EXTERNALSYM PMINIDUMP_THREAD_EX} _MINIDUMP_THREAD_EX = record ThreadId: ULONG32; SuspendCount: ULONG32; PriorityClass: ULONG32; Priority: ULONG32; Teb: ULONG64; Stack: MINIDUMP_MEMORY_DESCRIPTOR; ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR; BackingStore: MINIDUMP_MEMORY_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_THREAD_EX} MINIDUMP_THREAD_EX = _MINIDUMP_THREAD_EX; {$EXTERNALSYM MINIDUMP_THREAD_EX} TMinidumpThreadEx = MINIDUMP_THREAD_EX; PMinidumpThreadEx = PMINIDUMP_THREAD_EX; // // The thread list is a container of threads. // PMINIDUMP_THREAD_EX_LIST = ^MINIDUMP_THREAD_EX_LIST; {$EXTERNALSYM PMINIDUMP_THREAD_EX_LIST} _MINIDUMP_THREAD_EX_LIST = record NumberOfThreads: ULONG32; Threads: array [0..0] of MINIDUMP_THREAD_EX; end; {$EXTERNALSYM _MINIDUMP_THREAD_EX_LIST} MINIDUMP_THREAD_EX_LIST = _MINIDUMP_THREAD_EX_LIST; {$EXTERNALSYM MINIDUMP_THREAD_EX_LIST} TMinidumpThreadExList = MINIDUMP_THREAD_EX_LIST; PMinidumpThreadExList = PMINIDUMP_THREAD_EX_LIST; // // The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64. // PMINIDUMP_EXCEPTION = ^MINIDUMP_EXCEPTION; {$EXTERNALSYM PMINIDUMP_EXCEPTION} _MINIDUMP_EXCEPTION = record ExceptionCode: ULONG32; ExceptionFlags: ULONG32; ExceptionRecord: ULONG64; ExceptionAddress: ULONG64; NumberParameters: ULONG32; __unusedAlignment: ULONG32; ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of ULONG64; end; {$EXTERNALSYM _MINIDUMP_EXCEPTION} MINIDUMP_EXCEPTION = _MINIDUMP_EXCEPTION; {$EXTERNALSYM MINIDUMP_EXCEPTION} TMinidumpException = MINIDUMP_EXCEPTION; PMinidumpException = PMINIDUMP_EXCEPTION; // // The exception information stream contains the id of the thread that caused // the exception (ThreadId), the exception record for the exception // (ExceptionRecord) and an RVA to the thread context where the exception // occured. // PMINIDUMP_EXCEPTION_STREAM = ^MINIDUMP_EXCEPTION_STREAM; {$EXTERNALSYM PMINIDUMP_EXCEPTION_STREAM} _MINIDUMP_EXCEPTION_STREAM = record ThreadId: ULONG32; __alignment: ULONG32; ExceptionRecord: MINIDUMP_EXCEPTION; ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_EXCEPTION_STREAM} MINIDUMP_EXCEPTION_STREAM = _MINIDUMP_EXCEPTION_STREAM; {$EXTERNALSYM MINIDUMP_EXCEPTION_STREAM} TMinidumpExceptionStream = MINIDUMP_EXCEPTION_STREAM; PMinidumpExceptionStream = PMINIDUMP_EXCEPTION_STREAM; // // The MINIDUMP_MODULE contains information about a // a specific module. It includes the CheckSum and // the TimeDateStamp for the module so the module // can be reloaded during the analysis phase. // PMINIDUMP_MODULE = ^MINIDUMP_MODULE; {$EXTERNALSYM PMINIDUMP_MODULE} _MINIDUMP_MODULE = record BaseOfImage: ULONG64; SizeOfImage: ULONG32; CheckSum: ULONG32; TimeDateStamp: ULONG32; ModuleNameRva: RVA; VersionInfo: VS_FIXEDFILEINFO; CvRecord: MINIDUMP_LOCATION_DESCRIPTOR; MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR; Reserved0: ULONG64; // Reserved for future use. Reserved1: ULONG64; // Reserved for future use. end; {$EXTERNALSYM _MINIDUMP_MODULE} MINIDUMP_MODULE = _MINIDUMP_MODULE; {$EXTERNALSYM MINIDUMP_MODULE} TMinidumpModule = MINIDUMP_MODULE; PMinidumpModule = PMINIDUMP_MODULE; // // The minidump module list is a container for modules. // PMINIDUMP_MODULE_LIST = ^MINIDUMP_MODULE_LIST; {$EXTERNALSYM PMINIDUMP_MODULE_LIST} _MINIDUMP_MODULE_LIST = record NumberOfModules: ULONG32; Modules: array [0..0] of MINIDUMP_MODULE; end; {$EXTERNALSYM _MINIDUMP_MODULE_LIST} MINIDUMP_MODULE_LIST = _MINIDUMP_MODULE_LIST; {$EXTERNALSYM MINIDUMP_MODULE_LIST} TMinidumpModuleList = MINIDUMP_MODULE_LIST; PMinidumpModuleList = PMINIDUMP_MODULE_LIST; // // Memory Ranges // PMINIDUMP_MEMORY_LIST = ^MINIDUMP_MEMORY_LIST; {$EXTERNALSYM PMINIDUMP_MEMORY_LIST} _MINIDUMP_MEMORY_LIST = record NumberOfMemoryRanges: ULONG32; MemoryRanges: array [0..0] of MINIDUMP_MEMORY_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_MEMORY_LIST} MINIDUMP_MEMORY_LIST = _MINIDUMP_MEMORY_LIST; {$EXTERNALSYM MINIDUMP_MEMORY_LIST} TMinidumpMemoryList = MINIDUMP_MEMORY_LIST; PMinidumpMemoryList = PMINIDUMP_MEMORY_LIST; PMINIDUMP_MEMORY64_LIST = ^MINIDUMP_MEMORY64_LIST; {$EXTERNALSYM PMINIDUMP_MEMORY64_LIST} _MINIDUMP_MEMORY64_LIST = record NumberOfMemoryRanges: ULONG64; BaseRva: RVA64; MemoryRanges: array [0..0] of MINIDUMP_MEMORY_DESCRIPTOR64; end; {$EXTERNALSYM _MINIDUMP_MEMORY64_LIST} MINIDUMP_MEMORY64_LIST = _MINIDUMP_MEMORY64_LIST; {$EXTERNALSYM MINIDUMP_MEMORY64_LIST} TMinidumpMemory64List = MINIDUMP_MEMORY64_LIST; PMinidumpMemory64List = PMINIDUMP_MEMORY64_LIST; // // Support for user supplied exception information. // PMINIDUMP_EXCEPTION_INFORMATION = ^MINIDUMP_EXCEPTION_INFORMATION; {$EXTERNALSYM PMINIDUMP_EXCEPTION_INFORMATION} _MINIDUMP_EXCEPTION_INFORMATION = record ThreadId: DWORD; ExceptionPointers: PEXCEPTION_POINTERS; ClientPointers: BOOL; end; {$EXTERNALSYM _MINIDUMP_EXCEPTION_INFORMATION} MINIDUMP_EXCEPTION_INFORMATION = _MINIDUMP_EXCEPTION_INFORMATION; {$EXTERNALSYM MINIDUMP_EXCEPTION_INFORMATION} TMinidumpExceptionInformation = MINIDUMP_EXCEPTION_INFORMATION; PMinidumpExceptionInformation = PMINIDUMP_EXCEPTION_INFORMATION; // // Support for capturing system handle state at the time of the dump. // PMINIDUMP_HANDLE_DESCRIPTOR = ^MINIDUMP_HANDLE_DESCRIPTOR; {$EXTERNALSYM PMINIDUMP_HANDLE_DESCRIPTOR} _MINIDUMP_HANDLE_DESCRIPTOR = record Handle: ULONG64; TypeNameRva: RVA; ObjectNameRva: RVA; Attributes: ULONG32; GrantedAccess: ULONG32; HandleCount: ULONG32; PointerCount: ULONG32; end; {$EXTERNALSYM _MINIDUMP_HANDLE_DESCRIPTOR} MINIDUMP_HANDLE_DESCRIPTOR = _MINIDUMP_HANDLE_DESCRIPTOR; {$EXTERNALSYM MINIDUMP_HANDLE_DESCRIPTOR} TMinidumpHandleDescriptor = MINIDUMP_HANDLE_DESCRIPTOR; PMinidumpHandleDescriptor = PMINIDUMP_HANDLE_DESCRIPTOR; PMINIDUMP_HANDLE_DATA_STREAM = ^MINIDUMP_HANDLE_DATA_STREAM; {$EXTERNALSYM PMINIDUMP_HANDLE_DATA_STREAM} _MINIDUMP_HANDLE_DATA_STREAM = record SizeOfHeader: ULONG32; SizeOfDescriptor: ULONG32; NumberOfDescriptors: ULONG32; Reserved: ULONG32; end; {$EXTERNALSYM _MINIDUMP_HANDLE_DATA_STREAM} MINIDUMP_HANDLE_DATA_STREAM = _MINIDUMP_HANDLE_DATA_STREAM; {$EXTERNALSYM MINIDUMP_HANDLE_DATA_STREAM} TMinidumpHandleDataStream = MINIDUMP_HANDLE_DATA_STREAM; PMinidumpHandleDataStream = PMINIDUMP_HANDLE_DATA_STREAM; // // Support for capturing dynamic function table state at the time of the dump. // PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = ^MINIDUMP_FUNCTION_TABLE_DESCRIPTOR; {$EXTERNALSYM PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR} _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = record MinimumAddress: ULONG64; MaximumAddress: ULONG64; BaseAddress: ULONG64; EntryCount: ULONG32; SizeOfAlignPad: ULONG32; end; {$EXTERNALSYM _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR} MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR; {$EXTERNALSYM MINIDUMP_FUNCTION_TABLE_DESCRIPTOR} TMinidumpFunctionTableDescriptor = MINIDUMP_FUNCTION_TABLE_DESCRIPTOR; PMinidumpFunctionTableDescriptor = PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; PMINIDUMP_FUNCTION_TABLE_STREAM = ^MINIDUMP_FUNCTION_TABLE_STREAM; {$EXTERNALSYM PMINIDUMP_FUNCTION_TABLE_STREAM} _MINIDUMP_FUNCTION_TABLE_STREAM = record SizeOfHeader: ULONG32; SizeOfDescriptor: ULONG32; SizeOfNativeDescriptor: ULONG32; SizeOfFunctionEntry: ULONG32; NumberOfDescriptors: ULONG32; SizeOfAlignPad: ULONG32; end; {$EXTERNALSYM _MINIDUMP_FUNCTION_TABLE_STREAM} MINIDUMP_FUNCTION_TABLE_STREAM = _MINIDUMP_FUNCTION_TABLE_STREAM; {$EXTERNALSYM MINIDUMP_FUNCTION_TABLE_STREAM} TMinidumpFunctionTableStream = MINIDUMP_FUNCTION_TABLE_STREAM; PMinidumpFunctionTableStream = PMINIDUMP_FUNCTION_TABLE_STREAM; // // The MINIDUMP_UNLOADED_MODULE contains information about a // a specific module that was previously loaded but no // longer is. This can help with diagnosing problems where // callers attempt to call code that is no longer loaded. // _MINIDUMP_UNLOADED_MODULE = record BaseOfImage: ULONG64; SizeOfImage: ULONG32; CheckSum: ULONG32; TimeDateStamp: ULONG32; ModuleNameRva: RVA; end; {$EXTERNALSYM _MINIDUMP_UNLOADED_MODULE} MINIDUMP_UNLOADED_MODULE = _MINIDUMP_UNLOADED_MODULE; {$EXTERNALSYM MINIDUMP_UNLOADED_MODULE} PMINIDUMP_UNLOADED_MODULE = ^MINIDUMP_UNLOADED_MODULE; {$EXTERNALSYM PMINIDUMP_UNLOADED_MODULE} TMiniDumpUnloadedModule = MINIDUMP_UNLOADED_MODULE; PMiniDumpUnloadedModule = PMINIDUMP_UNLOADED_MODULE; // // The minidump unloaded module list is a container for unloaded modules. // _MINIDUMP_UNLOADED_MODULE_LIST = record SizeOfHeader: ULONG32; SizeOfEntry: ULONG32; NumberOfEntries: ULONG32; end; {$EXTERNALSYM _MINIDUMP_UNLOADED_MODULE_LIST} MINIDUMP_UNLOADED_MODULE_LIST = _MINIDUMP_UNLOADED_MODULE_LIST; {$EXTERNALSYM MINIDUMP_UNLOADED_MODULE_LIST} PMINIDUMP_UNLOADED_MODULE_LIST = ^MINIDUMP_UNLOADED_MODULE_LIST; {$EXTERNALSYM PMINIDUMP_UNLOADED_MODULE_LIST} TMiniDumpUnloadedModuleList = MINIDUMP_UNLOADED_MODULE_LIST; PMiniDumpUnloadedModuleList = PMINIDUMP_UNLOADED_MODULE_LIST; // // The miscellaneous information stream contains a variety // of small pieces of information. A member is valid if // it's within the available size and its corresponding // bit is set. // const MINIDUMP_MISC1_PROCESS_ID = $00000001; {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_ID} MINIDUMP_MISC1_PROCESS_TIMES = $00000002; {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_TIMES} type _MINIDUMP_MISC_INFO = record SizeOfInfo: ULONG32; Flags1: ULONG32; ProcessId: ULONG32; ProcessCreateTime: ULONG32; ProcessUserTime: ULONG32; ProcessKernelTime: ULONG32; end; {$EXTERNALSYM _MINIDUMP_MISC_INFO} MINIDUMP_MISC_INFO = _MINIDUMP_MISC_INFO; {$EXTERNALSYM MINIDUMP_MISC_INFO} PMINIDUMP_MISC_INFO = ^MINIDUMP_MISC_INFO; {$EXTERNALSYM PMINIDUMP_MISC_INFO} TMiniDumpMiscInfo = MINIDUMP_MISC_INFO; PMiniDumpMiscInfo = PMINIDUMP_MISC_INFO; // // Support for arbitrary user-defined information. // PMINIDUMP_USER_RECORD = ^MINIDUMP_USER_RECORD; {$EXTERNALSYM PMINIDUMP_USER_RECORD} _MINIDUMP_USER_RECORD = record Type_: ULONG32; Memory: MINIDUMP_LOCATION_DESCRIPTOR; end; {$EXTERNALSYM _MINIDUMP_USER_RECORD} MINIDUMP_USER_RECORD = _MINIDUMP_USER_RECORD; {$EXTERNALSYM MINIDUMP_USER_RECORD} TMinidumpUserRecord = MINIDUMP_USER_RECORD; PMinidumpUserRecord = PMINIDUMP_USER_RECORD; PMINIDUMP_USER_STREAM = ^MINIDUMP_USER_STREAM; {$EXTERNALSYM PMINIDUMP_USER_STREAM} _MINIDUMP_USER_STREAM = record Type_: ULONG32; BufferSize: ULONG; Buffer: PVOID; end; {$EXTERNALSYM _MINIDUMP_USER_STREAM} MINIDUMP_USER_STREAM = _MINIDUMP_USER_STREAM; {$EXTERNALSYM MINIDUMP_USER_STREAM} TMinidumpUserStream = MINIDUMP_USER_STREAM; PMinidumpUserStream = PMINIDUMP_USER_STREAM; PMINIDUMP_USER_STREAM_INFORMATION = ^MINIDUMP_USER_STREAM_INFORMATION; {$EXTERNALSYM PMINIDUMP_USER_STREAM_INFORMATION} _MINIDUMP_USER_STREAM_INFORMATION = record UserStreamCount: ULONG; UserStreamArray: PMINIDUMP_USER_STREAM; end; {$EXTERNALSYM _MINIDUMP_USER_STREAM_INFORMATION} MINIDUMP_USER_STREAM_INFORMATION = _MINIDUMP_USER_STREAM_INFORMATION; {$EXTERNALSYM MINIDUMP_USER_STREAM_INFORMATION} TMinidumpUserStreamInformation = MINIDUMP_USER_STREAM_INFORMATION; PMinidumpUserStreamInformation = PMINIDUMP_USER_STREAM_INFORMATION; // // Callback support. // _MINIDUMP_CALLBACK_TYPE = ( ModuleCallback, ThreadCallback, ThreadExCallback, IncludeThreadCallback, IncludeModuleCallback); {$EXTERNALSYM _MINIDUMP_CALLBACK_TYPE} MINIDUMP_CALLBACK_TYPE = _MINIDUMP_CALLBACK_TYPE; {$EXTERNALSYM MINIDUMP_CALLBACK_TYPE} TMinidumpCallbackType = MINIDUMP_CALLBACK_TYPE; PMINIDUMP_THREAD_CALLBACK = ^MINIDUMP_THREAD_CALLBACK; {$EXTERNALSYM PMINIDUMP_THREAD_CALLBACK} _MINIDUMP_THREAD_CALLBACK = record ThreadId: ULONG; ThreadHandle: HANDLE; Context: CONTEXT; SizeOfContext: ULONG; StackBase: ULONG64; StackEnd: ULONG64; end; {$EXTERNALSYM _MINIDUMP_THREAD_CALLBACK} MINIDUMP_THREAD_CALLBACK = _MINIDUMP_THREAD_CALLBACK; {$EXTERNALSYM MINIDUMP_THREAD_CALLBACK} TMinidumpThreadCallback = MINIDUMP_THREAD_CALLBACK; PMinidumpThreadCallback = PMINIDUMP_THREAD_CALLBACK; PMINIDUMP_THREAD_EX_CALLBACK = ^MINIDUMP_THREAD_EX_CALLBACK; {$EXTERNALSYM PMINIDUMP_THREAD_EX_CALLBACK} _MINIDUMP_THREAD_EX_CALLBACK = record ThreadId: ULONG; ThreadHandle: HANDLE; Context: CONTEXT; SizeOfContext: ULONG; StackBase: ULONG64; StackEnd: ULONG64; BackingStoreBase: ULONG64; BackingStoreEnd: ULONG64; end; {$EXTERNALSYM _MINIDUMP_THREAD_EX_CALLBACK} MINIDUMP_THREAD_EX_CALLBACK = _MINIDUMP_THREAD_EX_CALLBACK; {$EXTERNALSYM MINIDUMP_THREAD_EX_CALLBACK} TMinidumpThreadExCallback = MINIDUMP_THREAD_EX_CALLBACK; PMinidumpThreadExCallback = PMINIDUMP_THREAD_EX_CALLBACK; PMINIDUMP_INCLUDE_THREAD_CALLBACK = ^MINIDUMP_INCLUDE_THREAD_CALLBACK; {$EXTERNALSYM PMINIDUMP_INCLUDE_THREAD_CALLBACK} _MINIDUMP_INCLUDE_THREAD_CALLBACK = record ThreadId: ULONG; end; {$EXTERNALSYM _MINIDUMP_INCLUDE_THREAD_CALLBACK} MINIDUMP_INCLUDE_THREAD_CALLBACK = _MINIDUMP_INCLUDE_THREAD_CALLBACK; {$EXTERNALSYM MINIDUMP_INCLUDE_THREAD_CALLBACK} TMinidumpIncludeThreadCallback = MINIDUMP_INCLUDE_THREAD_CALLBACK; PMinidumpIncludeThreadCallback = PMINIDUMP_INCLUDE_THREAD_CALLBACK; const ThreadWriteThread = $0001; {$EXTERNALSYM ThreadWriteThread} ThreadWriteStack = $0002; {$EXTERNALSYM ThreadWriteStack} ThreadWriteContext = $0004; {$EXTERNALSYM ThreadWriteContext} ThreadWriteBackingStore = $0008; {$EXTERNALSYM ThreadWriteBackingStore} ThreadWriteInstructionWindow = $0010; {$EXTERNALSYM ThreadWriteInstructionWindow} ThreadWriteThreadData = $0020; {$EXTERNALSYM ThreadWriteThreadData} type _THREAD_WRITE_FLAGS = DWORD; {$EXTERNALSYM _THREAD_WRITE_FLAGS} THREAD_WRITE_FLAGS = _THREAD_WRITE_FLAGS; {$EXTERNALSYM THREAD_WRITE_FLAGS} TThreadWriteFlags = THREAD_WRITE_FLAGS; type PMINIDUMP_MODULE_CALLBACK = ^MINIDUMP_MODULE_CALLBACK; {$EXTERNALSYM PMINIDUMP_MODULE_CALLBACK} _MINIDUMP_MODULE_CALLBACK = record FullPath: PWCHAR; BaseOfImage: ULONG64; SizeOfImage: ULONG; CheckSum: ULONG; TimeDateStamp: ULONG; VersionInfo: VS_FIXEDFILEINFO; CvRecord: PVOID; SizeOfCvRecord: ULONG; MiscRecord: PVOID; SizeOfMiscRecord: ULONG; end; {$EXTERNALSYM _MINIDUMP_MODULE_CALLBACK} MINIDUMP_MODULE_CALLBACK = _MINIDUMP_MODULE_CALLBACK; {$EXTERNALSYM MINIDUMP_MODULE_CALLBACK} TMinidumpModuleCallback = MINIDUMP_MODULE_CALLBACK; PMinidumpModuleCallback = PMINIDUMP_MODULE_CALLBACK; PMINIDUMP_INCLUDE_MODULE_CALLBACK = ^MINIDUMP_INCLUDE_MODULE_CALLBACK; {$EXTERNALSYM PMINIDUMP_INCLUDE_MODULE_CALLBACK} _MINIDUMP_INCLUDE_MODULE_CALLBACK = record BaseOfImage: ULONG64; end; {$EXTERNALSYM _MINIDUMP_INCLUDE_MODULE_CALLBACK} MINIDUMP_INCLUDE_MODULE_CALLBACK = _MINIDUMP_INCLUDE_MODULE_CALLBACK; {$EXTERNALSYM MINIDUMP_INCLUDE_MODULE_CALLBACK} TMinidumpIncludeModuleCallback = MINIDUMP_INCLUDE_MODULE_CALLBACK; PMinidumpIncludeModuleCallback = PMINIDUMP_INCLUDE_MODULE_CALLBACK; const ModuleWriteModule = $0001; {$EXTERNALSYM ModuleWriteModule} ModuleWriteDataSeg = $0002; {$EXTERNALSYM ModuleWriteDataSeg} ModuleWriteMiscRecord = $0004; {$EXTERNALSYM ModuleWriteMiscRecord} ModuleWriteCvRecord = $0008; {$EXTERNALSYM ModuleWriteCvRecord} ModuleReferencedByMemory = $0010; {$EXTERNALSYM ModuleReferencedByMemory} type _MODULE_WRITE_FLAGS = DWORD; {$EXTERNALSYM _MODULE_WRITE_FLAGS} MODULE_WRITE_FLAGS = _MODULE_WRITE_FLAGS; {$EXTERNALSYM MODULE_WRITE_FLAGS} TModuleWriteFlags = MODULE_WRITE_FLAGS; _MINIDUMP_CALLBACK_INPUT = record ProcessId: ULONG; ProcessHandle: HANDLE; CallbackType: ULONG; case Integer of 0: (Thread: MINIDUMP_THREAD_CALLBACK); 1: (ThreadEx: MINIDUMP_THREAD_EX_CALLBACK); 2: (Module: MINIDUMP_MODULE_CALLBACK); 3: (IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK); 4: (IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK); end; {$EXTERNALSYM _MINIDUMP_CALLBACK_INPUT} MINIDUMP_CALLBACK_INPUT = _MINIDUMP_CALLBACK_INPUT; {$EXTERNALSYM MINIDUMP_CALLBACK_INPUT} PMINIDUMP_CALLBACK_INPUT = ^MINIDUMP_CALLBACK_INPUT; {$EXTERNALSYM PMINIDUMP_CALLBACK_INPUT} TminidumpCallbackInput = MINIDUMP_CALLBACK_INPUT; PMINIDUMP_CALLBACK_OUTPUT = ^MINIDUMP_CALLBACK_OUTPUT; {$EXTERNALSYM PMINIDUMP_CALLBACK_OUTPUT} _MINIDUMP_CALLBACK_OUTPUT = record case Integer of 0: (ModuleWriteFlags: ULONG); 1: (ThreadWriteFlags: ULONG); end; {$EXTERNALSYM _MINIDUMP_CALLBACK_OUTPUT} MINIDUMP_CALLBACK_OUTPUT = _MINIDUMP_CALLBACK_OUTPUT; {$EXTERNALSYM MINIDUMP_CALLBACK_OUTPUT} TMinidumpCallbackOutput = MINIDUMP_CALLBACK_OUTPUT; PMinidumpCallbackOutput = PMINIDUMP_CALLBACK_OUTPUT; // // A normal minidump contains just the information // necessary to capture stack traces for all of the // existing threads in a process. // // A minidump with data segments includes all of the data // sections from loaded modules in order to capture // global variable contents. This can make the dump much // larger if many modules have global data. // // A minidump with full memory includes all of the accessible // memory in the process and can be very large. A minidump // with full memory always has the raw memory data at the end // of the dump so that the initial structures in the dump can // be mapped directly without having to include the raw // memory information. // // Stack and backing store memory can be filtered to remove // data unnecessary for stack walking. This can improve // compression of stacks and also deletes data that may // be private and should not be stored in a dump. // Memory can also be scanned to see what modules are // referenced by stack and backing store memory to allow // omission of other modules to reduce dump size. // In either of these modes the ModuleReferencedByMemory flag // is set for all modules referenced before the base // module callbacks occur. // // On some operating systems a list of modules that were // recently unloaded is kept in addition to the currently // loaded module list. This information can be saved in // the dump if desired. // // Stack and backing store memory can be scanned for referenced // pages in order to pick up data referenced by locals or other // stack memory. This can increase the size of a dump significantly. // // Module paths may contain undesired information such as user names // or other important directory names so they can be stripped. This // option reduces the ability to locate the proper image later // and should only be used in certain situations. // // Complete operating system per-process and per-thread information can // be gathered and stored in the dump. // // The virtual address space can be scanned for various types // of memory to be included in the dump. // const MiniDumpNormal = $0000; {$EXTERNALSYM MiniDumpNormal} MiniDumpWithDataSegs = $0001; {$EXTERNALSYM MiniDumpWithDataSegs} MiniDumpWithFullMemory = $0002; {$EXTERNALSYM MiniDumpWithFullMemory} MiniDumpWithHandleData = $0004; {$EXTERNALSYM MiniDumpWithHandleData} MiniDumpFilterMemory = $0008; {$EXTERNALSYM MiniDumpFilterMemory} MiniDumpScanMemory = $0010; {$EXTERNALSYM MiniDumpScanMemory} MiniDumpWithUnloadedModules = $0020; {$EXTERNALSYM MiniDumpWithUnloadedModules} MiniDumpWithIndirectlyReferencedMemory = $0040; {$EXTERNALSYM MiniDumpWithIndirectlyReferencedMemory} MiniDumpFilterModulePaths = $0080; {$EXTERNALSYM MiniDumpFilterModulePaths} MiniDumpWithProcessThreadData = $0100; {$EXTERNALSYM MiniDumpWithProcessThreadData} MiniDumpWithPrivateReadWriteMemory = $0200; {$EXTERNALSYM MiniDumpWithPrivateReadWriteMemory} type _MINIDUMP_TYPE = DWORD; {$EXTERNALSYM _MINIDUMP_TYPE} MINIDUMP_TYPE = _MINIDUMP_TYPE; {$EXTERNALSYM MINIDUMP_TYPE} TMinidumpType = MINIDUMP_TYPE; // // The minidump callback should modify the FieldsToWrite parameter to reflect // what portions of the specified thread or module should be written to the // file. // MINIDUMP_CALLBACK_ROUTINE = function(CallbackParam: PVOID; CallbackInput: PMINIDUMP_CALLBACK_INPUT; CallbackOutput: PMINIDUMP_CALLBACK_OUTPUT): BOOL; stdcall; {$EXTERNALSYM MINIDUMP_CALLBACK_ROUTINE} TMinidumpCallbackRoutine = MINIDUMP_CALLBACK_ROUTINE; PMINIDUMP_CALLBACK_INFORMATION = ^MINIDUMP_CALLBACK_INFORMATION; {$EXTERNALSYM PMINIDUMP_CALLBACK_INFORMATION} _MINIDUMP_CALLBACK_INFORMATION = record CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE; CallbackParam: PVOID; end; {$EXTERNALSYM _MINIDUMP_CALLBACK_INFORMATION} MINIDUMP_CALLBACK_INFORMATION = _MINIDUMP_CALLBACK_INFORMATION; {$EXTERNALSYM MINIDUMP_CALLBACK_INFORMATION} TMinidumpCallbackInformation = MINIDUMP_CALLBACK_INFORMATION; PMinidumpCallbackInformation = PMINIDUMP_CALLBACK_INFORMATION; //++ // // PVOID // RVA_TO_ADDR( // PVOID Mapping, // ULONG Rva // ) // // Routine Description: // // Map an RVA that is contained within a mapped file to it's associated // flat address. // // Arguments: // // Mapping - Base address of mapped file containing the RVA. // // Rva - An Rva to fixup. // // Return Values: // // A pointer to the desired data. // //-- function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer; {$EXTERNALSYM RVA_TO_ADDR} function MiniDumpWriteDump(hProcess: HANDLE; ProcessId: DWORD; hFile: HANDLE; DumpType: MINIDUMP_TYPE; ExceptionParam: PMINIDUMP_EXCEPTION_INFORMATION; UserStreamParam: PMINIDUMP_USER_STREAM_INFORMATION; CallbackParam: PMINIDUMP_CALLBACK_INFORMATION): BOOL; stdcall; {$EXTERNALSYM MiniDumpWriteDump} function MiniDumpReadDumpStream(BaseOfDump: PVOID; StreamNumber: ULONG; var Dir: PMINIDUMP_DIRECTORY; var StreamPointer: PVOID; var StreamSize: ULONG): BOOL; stdcall; {$EXTERNALSYM MiniDumpReadDumpStream} {$ENDIF JWA_IMPLEMENTATIONSECTION} {$IFNDEF JWA_OMIT_SECTIONS} implementation //uses ... {$ENDIF JWA_OMIT_SECTIONS} {$IFNDEF JWA_INTERFACESECTION} {$IFNDEF JWA_INCLUDEMODE} const ImageHlpLib = 'imagehlp.dll'; {$IFDEF UNICODE} AWSuffix = 'W'; {$ELSE} AWSuffix = 'A'; {$ENDIF UNICODE} {$ENDIF JWA_INCLUDEMODE} procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64); begin a64^.Offset := {ULONG64(LONG64(LONG(}a32^.Offset{)))}; 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; function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer; begin Result := Pointer(Cardinal(Mapping) + Cardinal(Rva)); end; {$IFDEF DYNAMIC_LINK} var _BindImage: Pointer; function BindImage; begin GetProcedureAddress(_BindImage, ImageHlpLib, 'BindImage'); asm MOV ESP, EBP POP EBP JMP [_BindImage] end; end; var _BindImageEx: Pointer; function BindImageEx; begin GetProcedureAddress(_BindImageEx, ImageHlpLib, 'BindImageEx'); asm MOV ESP, EBP POP EBP JMP [_BindImageEx] end; end; var _ReBaseImage: Pointer; function ReBaseImage; begin GetProcedureAddress(_ReBaseImage, ImageHlpLib, 'ReBaseImage'); asm MOV ESP, EBP POP EBP JMP [_ReBaseImage] end; end; var _ReBaseImage64: Pointer; function ReBaseImage64; begin GetProcedureAddress(_ReBaseImage64, ImageHlpLib, 'ReBaseImage64'); asm MOV ESP, EBP POP EBP JMP [_ReBaseImage64] end; end; var _CheckSumMappedFile: Pointer; function CheckSumMappedFile; begin GetProcedureAddress(_CheckSumMappedFile, ImageHlpLib, 'CheckSumMappedFile'); asm MOV ESP, EBP POP EBP JMP [_CheckSumMappedFile] end; end; var _MapFileAndCheckSumA: Pointer; function MapFileAndCheckSumA; begin GetProcedureAddress(_MapFileAndCheckSumA, ImageHlpLib, 'MapFileAndCheckSumA'); asm MOV ESP, EBP POP EBP JMP [_MapFileAndCheckSumA] end; end; var _MapFileAndCheckSumW: Pointer; function MapFileAndCheckSumW; begin GetProcedureAddress(_MapFileAndCheckSumW, ImageHlpLib, 'MapFileAndCheckSumW'); asm MOV ESP, EBP POP EBP JMP [_MapFileAndCheckSumW] end; end; var _MapFileAndCheckSum: Pointer; function MapFileAndCheckSum; begin GetProcedureAddress(_MapFileAndCheckSum, ImageHlpLib, 'MapFileAndCheckSum' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_MapFileAndCheckSum] end; end; var _GetImageConfigInformation: Pointer; function GetImageConfigInformation; begin GetProcedureAddress(_GetImageConfigInformation, ImageHlpLib, 'GetImageConfigInformation'); asm MOV ESP, EBP POP EBP JMP [_GetImageConfigInformation] end; end; var _GetImageUnusedHeaderBytes: Pointer; function GetImageUnusedHeaderBytes; begin GetProcedureAddress(_GetImageUnusedHeaderBytes, ImageHlpLib, 'GetImageUnusedHeaderBytes'); asm MOV ESP, EBP POP EBP JMP [_GetImageUnusedHeaderBytes] end; end; var _SetImageConfigInformation: Pointer; function SetImageConfigInformation; begin GetProcedureAddress(_SetImageConfigInformation, ImageHlpLib, 'SetImageConfigInformation'); asm MOV ESP, EBP POP EBP JMP [_SetImageConfigInformation] end; end; var _ImageGetDigestStream: Pointer; function ImageGetDigestStream; begin GetProcedureAddress(_ImageGetDigestStream, ImageHlpLib, 'ImageGetDigestStream'); asm MOV ESP, EBP POP EBP JMP [_ImageGetDigestStream] end; end; var _ImageAddCertificate: Pointer; function ImageAddCertificate; begin GetProcedureAddress(_ImageAddCertificate, ImageHlpLib, 'ImageAddCertificate'); asm MOV ESP, EBP POP EBP JMP [_ImageAddCertificate] end; end; var _ImageRemoveCertificate: Pointer; function ImageRemoveCertificate; begin GetProcedureAddress(_ImageRemoveCertificate, ImageHlpLib, 'ImageRemoveCertificate'); asm MOV ESP, EBP POP EBP JMP [_ImageRemoveCertificate] end; end; var _ImageEnumerateCertificates: Pointer; function ImageEnumerateCertificates; begin GetProcedureAddress(_ImageEnumerateCertificates, ImageHlpLib, 'ImageEnumerateCertificates'); asm MOV ESP, EBP POP EBP JMP [_ImageEnumerateCertificates] end; end; var _ImageGetCertificateData: Pointer; function ImageGetCertificateData; begin GetProcedureAddress(_ImageGetCertificateData, ImageHlpLib, 'ImageGetCertificateData'); asm MOV ESP, EBP POP EBP JMP [_ImageGetCertificateData] end; end; var _ImageGetCertificateHeader: Pointer; function ImageGetCertificateHeader; begin GetProcedureAddress(_ImageGetCertificateHeader, ImageHlpLib, 'ImageGetCertificateHeader'); asm MOV ESP, EBP POP EBP JMP [_ImageGetCertificateHeader] end; end; var _ImageLoad: Pointer; function ImageLoad; begin GetProcedureAddress(_ImageLoad, ImageHlpLib, 'ImageLoad'); asm MOV ESP, EBP POP EBP JMP [_ImageLoad] end; end; var _ImageUnload: Pointer; function ImageUnload; begin GetProcedureAddress(_ImageUnload, ImageHlpLib, 'ImageUnload'); asm MOV ESP, EBP POP EBP JMP [_ImageUnload] end; end; var _MapAndLoad: Pointer; function MapAndLoad; begin GetProcedureAddress(_MapAndLoad, ImageHlpLib, 'MapAndLoad'); asm MOV ESP, EBP POP EBP JMP [_MapAndLoad] end; end; var _UnMapAndLoad: Pointer; function UnMapAndLoad; begin GetProcedureAddress(_UnMapAndLoad, ImageHlpLib, 'UnMapAndLoad'); asm MOV ESP, EBP POP EBP JMP [_UnMapAndLoad] end; end; var _TouchFileTimes: Pointer; function TouchFileTimes; begin GetProcedureAddress(_TouchFileTimes, ImageHlpLib, 'TouchFileTimes'); asm MOV ESP, EBP POP EBP JMP [_TouchFileTimes] end; end; var _SplitSymbols: Pointer; function SplitSymbols; begin GetProcedureAddress(_SplitSymbols, ImageHlpLib, 'SplitSymbols'); asm MOV ESP, EBP POP EBP JMP [_SplitSymbols] end; end; var _UpdateDebugInfoFile: Pointer; function UpdateDebugInfoFile; begin GetProcedureAddress(_UpdateDebugInfoFile, ImageHlpLib, 'UpdateDebugInfoFile'); asm MOV ESP, EBP POP EBP JMP [_UpdateDebugInfoFile] end; end; var _UpdateDebugInfoFileEx: Pointer; function UpdateDebugInfoFileEx; begin GetProcedureAddress(_UpdateDebugInfoFileEx, ImageHlpLib, 'UpdateDebugInfoFileEx'); asm MOV ESP, EBP POP EBP JMP [_UpdateDebugInfoFileEx] end; end; var _FindDebugInfoFile: Pointer; function FindDebugInfoFile; begin GetProcedureAddress(_FindDebugInfoFile, ImageHlpLib, 'FindDebugInfoFile'); asm MOV ESP, EBP POP EBP JMP [_FindDebugInfoFile] end; end; var _FindDebugInfoFileEx: Pointer; function FindDebugInfoFileEx; begin GetProcedureAddress(_FindDebugInfoFileEx, ImageHlpLib, 'FindDebugInfoFileEx'); asm MOV ESP, EBP POP EBP JMP [_FindDebugInfoFileEx] end; end; var _SymFindFileInPath: Pointer; function SymFindFileInPath; begin GetProcedureAddress(_SymFindFileInPath, ImageHlpLib, 'SymFindFileInPath'); asm MOV ESP, EBP POP EBP JMP [_SymFindFileInPath] end; end; var _FindExecutableImage: Pointer; function FindExecutableImage; begin GetProcedureAddress(_FindExecutableImage, ImageHlpLib, 'FindExecutableImage'); asm MOV ESP, EBP POP EBP JMP [_FindExecutableImage] end; end; var _FindExecutableImageEx: Pointer; function FindExecutableImageEx; begin GetProcedureAddress(_FindExecutableImageEx, ImageHlpLib, 'FindExecutableImageEx'); asm MOV ESP, EBP POP EBP JMP [_FindExecutableImageEx] end; end; var _ImageNtHeader: Pointer; function ImageNtHeader; begin GetProcedureAddress(_ImageNtHeader, ImageHlpLib, 'ImageNtHeader'); asm MOV ESP, EBP POP EBP JMP [_ImageNtHeader] end; end; var _ImageDirectoryEntryToDataEx: Pointer; function ImageDirectoryEntryToDataEx; begin GetProcedureAddress(_ImageDirectoryEntryToDataEx, ImageHlpLib, 'ImageDirectoryEntryToDataEx'); asm MOV ESP, EBP POP EBP JMP [_ImageDirectoryEntryToDataEx] end; end; var _ImageDirectoryEntryToData: Pointer; function ImageDirectoryEntryToData; begin GetProcedureAddress(_ImageDirectoryEntryToData, ImageHlpLib, 'ImageDirectoryEntryToData'); asm MOV ESP, EBP POP EBP JMP [_ImageDirectoryEntryToData] end; end; var _ImageRvaToSection: Pointer; function ImageRvaToSection; begin GetProcedureAddress(_ImageRvaToSection, ImageHlpLib, 'ImageRvaToSection'); asm MOV ESP, EBP POP EBP JMP [_ImageRvaToSection] end; end; var _ImageRvaToVa: Pointer; function ImageRvaToVa; begin GetProcedureAddress(_ImageRvaToVa, ImageHlpLib, 'ImageRvaToVa'); asm MOV ESP, EBP POP EBP JMP [_ImageRvaToVa] end; end; var _MapDebugInformation: Pointer; function MapDebugInformation; begin GetProcedureAddress(_MapDebugInformation, ImageHlpLib, 'MapDebugInformation'); asm MOV ESP, EBP POP EBP JMP [_MapDebugInformation] end; end; var _UnmapDebugInformation: Pointer; function UnmapDebugInformation; begin GetProcedureAddress(_UnmapDebugInformation, ImageHlpLib, 'UnmapDebugInformation'); asm MOV ESP, EBP POP EBP JMP [_UnmapDebugInformation] end; end; var _SearchTreeForFile: Pointer; function SearchTreeForFile; begin GetProcedureAddress(_SearchTreeForFile, ImageHlpLib, 'SearchTreeForFile'); asm MOV ESP, EBP POP EBP JMP [_SearchTreeForFile] end; end; var _EnumDirTree: Pointer; function EnumDirTree; begin GetProcedureAddress(_EnumDirTree, ImageHlpLib, 'EnumDirTree'); asm MOV ESP, EBP POP EBP JMP [_EnumDirTree] end; end; var _MakeSureDirectoryPathExists: Pointer; function MakeSureDirectoryPathExists; begin GetProcedureAddress(_MakeSureDirectoryPathExists, ImageHlpLib, 'MakeSureDirectoryPathExists'); asm MOV ESP, EBP POP EBP JMP [_MakeSureDirectoryPathExists] end; end; var _UnDecorateSymbolName: Pointer; function UnDecorateSymbolName; begin GetProcedureAddress(_UnDecorateSymbolName, ImageHlpLib, 'UnDecorateSymbolName'); asm MOV ESP, EBP POP EBP JMP [_UnDecorateSymbolName] end; end; var _StackWalk64: Pointer; function StackWalk64; begin GetProcedureAddress(_StackWalk64, ImageHlpLib, 'StackWalk64'); asm MOV ESP, EBP POP EBP JMP [_StackWalk64] end; end; var _StackWalk: Pointer; function StackWalk; begin GetProcedureAddress(_StackWalk, ImageHlpLib, 'StackWalk'); asm MOV ESP, EBP POP EBP JMP [_StackWalk] end; end; var _ImagehlpApiVersion: Pointer; function ImagehlpApiVersion; begin GetProcedureAddress(_ImagehlpApiVersion, ImageHlpLib, 'ImagehlpApiVersion'); asm MOV ESP, EBP POP EBP JMP [_ImagehlpApiVersion] end; end; var _ImagehlpApiVersionEx: Pointer; function ImagehlpApiVersionEx; begin GetProcedureAddress(_ImagehlpApiVersionEx, ImageHlpLib, 'ImagehlpApiVersionEx'); asm MOV ESP, EBP POP EBP JMP [_ImagehlpApiVersionEx] end; end; var _GetTimestampForLoadedLibrary: Pointer; function GetTimestampForLoadedLibrary; begin GetProcedureAddress(_GetTimestampForLoadedLibrary, ImageHlpLib, 'GetTimestampForLoadedLibrary'); asm MOV ESP, EBP POP EBP JMP [_GetTimestampForLoadedLibrary] end; end; var _SymSetOptions: Pointer; function SymSetOptions; begin GetProcedureAddress(_SymSetOptions, ImageHlpLib, 'SymSetOptions'); asm MOV ESP, EBP POP EBP JMP [_SymSetOptions] end; end; var _SymGetOptions: Pointer; function SymGetOptions; begin GetProcedureAddress(_SymGetOptions, ImageHlpLib, 'SymGetOptions'); asm MOV ESP, EBP POP EBP JMP [_SymGetOptions] end; end; var _SymCleanup: Pointer; function SymCleanup; begin GetProcedureAddress(_SymCleanup, ImageHlpLib, 'SymCleanup'); asm MOV ESP, EBP POP EBP JMP [_SymCleanup] end; end; var _SymMatchString: Pointer; function SymMatchString; begin GetProcedureAddress(_SymMatchString, ImageHlpLib, 'SymMatchString'); asm MOV ESP, EBP POP EBP JMP [_SymMatchString] end; end; var _SymEnumSourceFiles: Pointer; function SymEnumSourceFiles; begin GetProcedureAddress(_SymEnumSourceFiles, ImageHlpLib, 'SymEnumSourceFiles'); asm MOV ESP, EBP POP EBP JMP [_SymEnumSourceFiles] end; end; var _SymEnumerateModules64: Pointer; function SymEnumerateModules64; begin GetProcedureAddress(_SymEnumerateModules64, ImageHlpLib, 'SymEnumerateModules64'); asm MOV ESP, EBP POP EBP JMP [_SymEnumerateModules64] end; end; var _SymEnumerateModules: Pointer; function SymEnumerateModules; begin GetProcedureAddress(_SymEnumerateModules, ImageHlpLib, 'SymEnumerateModules'); asm MOV ESP, EBP POP EBP JMP [_SymEnumerateModules] end; end; var _SymEnumerateSymbols64: Pointer; function SymEnumerateSymbols64; begin GetProcedureAddress(_SymEnumerateSymbols64, ImageHlpLib, 'SymEnumerateSymbols64'); asm MOV ESP, EBP POP EBP JMP [_SymEnumerateSymbols64] end; end; var _SymEnumerateSymbolsW64: Pointer; function SymEnumerateSymbolsW64; begin GetProcedureAddress(_SymEnumerateSymbolsW64, ImageHlpLib, 'SymEnumerateSymbolsW64'); asm MOV ESP, EBP POP EBP JMP [_SymEnumerateSymbolsW64] end; end; var _SymEnumerateSymbols: Pointer; function SymEnumerateSymbols; begin GetProcedureAddress(_SymEnumerateSymbols, ImageHlpLib, 'SymEnumerateSymbols'); asm MOV ESP, EBP POP EBP JMP [_SymEnumerateSymbols] end; end; var _SymEnumerateSymbolsW: Pointer; function SymEnumerateSymbolsW; begin GetProcedureAddress(_SymEnumerateSymbolsW, ImageHlpLib, 'SymEnumerateSymbolsW'); asm MOV ESP, EBP POP EBP JMP [_SymEnumerateSymbolsW] end; end; var _EnumerateLoadedModules64: Pointer; function EnumerateLoadedModules64; begin GetProcedureAddress(_EnumerateLoadedModules64, ImageHlpLib, 'EnumerateLoadedModules64'); asm MOV ESP, EBP POP EBP JMP [_EnumerateLoadedModules64] end; end; var _EnumerateLoadedModules: Pointer; function EnumerateLoadedModules; begin GetProcedureAddress(_EnumerateLoadedModules, ImageHlpLib, 'EnumerateLoadedModules'); asm MOV ESP, EBP POP EBP JMP [_EnumerateLoadedModules] end; end; var _SymFunctionTableAccess64: Pointer; function SymFunctionTableAccess64; begin GetProcedureAddress(_SymFunctionTableAccess64, ImageHlpLib, 'SymFunctionTableAccess64'); asm MOV ESP, EBP POP EBP JMP [_SymFunctionTableAccess64] end; end; var _SymFunctionTableAccess: Pointer; function SymFunctionTableAccess; begin GetProcedureAddress(_SymFunctionTableAccess, ImageHlpLib, 'SymFunctionTableAccess'); asm MOV ESP, EBP POP EBP JMP [_SymFunctionTableAccess] end; end; var _SymGetModuleInfo64: Pointer; function SymGetModuleInfo64; begin GetProcedureAddress(_SymGetModuleInfo64, ImageHlpLib, 'SymGetModuleInfo64'); asm MOV ESP, EBP POP EBP JMP [_SymGetModuleInfo64] end; end; var _SymGetModuleInfoW64: Pointer; function SymGetModuleInfoW64; begin GetProcedureAddress(_SymGetModuleInfoW64, ImageHlpLib, 'SymGetModuleInfoW64'); asm MOV ESP, EBP POP EBP JMP [_SymGetModuleInfoW64] end; end; var _SymGetModuleInfo: Pointer; function SymGetModuleInfo; begin GetProcedureAddress(_SymGetModuleInfo, ImageHlpLib, 'SymGetModuleInfo'); asm MOV ESP, EBP POP EBP JMP [_SymGetModuleInfo] end; end; var _SymGetModuleInfoW: Pointer; function SymGetModuleInfoW; begin GetProcedureAddress(_SymGetModuleInfoW, ImageHlpLib, 'SymGetModuleInfoW'); asm MOV ESP, EBP POP EBP JMP [_SymGetModuleInfoW] end; end; var _SymGetModuleBase64: Pointer; function SymGetModuleBase64; begin GetProcedureAddress(_SymGetModuleBase64, ImageHlpLib, 'SymGetModuleBase64'); asm MOV ESP, EBP POP EBP JMP [_SymGetModuleBase64] end; end; var _SymGetModuleBase: Pointer; function SymGetModuleBase; begin GetProcedureAddress(_SymGetModuleBase, ImageHlpLib, 'SymGetModuleBase'); asm MOV ESP, EBP POP EBP JMP [_SymGetModuleBase] end; end; var _SymGetSymNext64: Pointer; function SymGetSymNext64; begin GetProcedureAddress(_SymGetSymNext64, ImageHlpLib, 'SymGetSymNext64'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymNext64] end; end; var _SymGetSymNext: Pointer; function SymGetSymNext; begin GetProcedureAddress(_SymGetSymNext, ImageHlpLib, 'SymGetSymNext'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymNext] end; end; var _SymGetSymPrev64: Pointer; function SymGetSymPrev64; begin GetProcedureAddress(_SymGetSymPrev64, ImageHlpLib, 'SymGetSymPrev64'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymPrev64] end; end; var _SymGetSymPrev: Pointer; function SymGetSymPrev; begin GetProcedureAddress(_SymGetSymPrev, ImageHlpLib, 'SymGetSymPrev'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymPrev] end; end; var _SymGetLineFromAddr64: Pointer; function SymGetLineFromAddr64; begin GetProcedureAddress(_SymGetLineFromAddr64, ImageHlpLib, 'SymGetLineFromAddr64'); asm MOV ESP, EBP POP EBP JMP [_SymGetLineFromAddr64] end; end; var _SymGetLineFromAddr: Pointer; function SymGetLineFromAddr; begin GetProcedureAddress(_SymGetLineFromAddr, ImageHlpLib, 'SymGetLineFromAddr'); asm MOV ESP, EBP POP EBP JMP [_SymGetLineFromAddr] end; end; var _SymGetLineFromName64: Pointer; function SymGetLineFromName64; begin GetProcedureAddress(_SymGetLineFromName64, ImageHlpLib, 'SymGetLineFromName64'); asm MOV ESP, EBP POP EBP JMP [_SymGetLineFromName64] end; end; var _SymGetLineFromName: Pointer; function SymGetLineFromName; begin GetProcedureAddress(_SymGetLineFromName, ImageHlpLib, 'SymGetLineFromName'); asm MOV ESP, EBP POP EBP JMP [_SymGetLineFromName] end; end; var _SymGetLineNext64: Pointer; function SymGetLineNext64; begin GetProcedureAddress(_SymGetLineNext64, ImageHlpLib, 'SymGetLineNext64'); asm MOV ESP, EBP POP EBP JMP [_SymGetLineNext64] end; end; var _SymGetLineNext: Pointer; function SymGetLineNext; begin GetProcedureAddress(_SymGetLineNext, ImageHlpLib, 'SymGetLineNext'); asm MOV ESP, EBP POP EBP JMP [_SymGetLineNext] end; end; var _SymGetLinePrev64: Pointer; function SymGetLinePrev64; begin GetProcedureAddress(_SymGetLinePrev64, ImageHlpLib, 'SymGetLinePrev64'); asm MOV ESP, EBP POP EBP JMP [_SymGetLinePrev64] end; end; var _SymGetLinePrev: Pointer; function SymGetLinePrev; begin GetProcedureAddress(_SymGetLinePrev, ImageHlpLib, 'SymGetLinePrev'); asm MOV ESP, EBP POP EBP JMP [_SymGetLinePrev] end; end; var _SymMatchFileName: Pointer; function SymMatchFileName; begin GetProcedureAddress(_SymMatchFileName, ImageHlpLib, 'SymMatchFileName'); asm MOV ESP, EBP POP EBP JMP [_SymMatchFileName] end; end; var _SymInitialize: Pointer; function SymInitialize; begin GetProcedureAddress(_SymInitialize, ImageHlpLib, 'SymInitialize'); asm MOV ESP, EBP POP EBP JMP [_SymInitialize] end; end; var _SymGetSearchPath: Pointer; function SymGetSearchPath; begin GetProcedureAddress(_SymGetSearchPath, ImageHlpLib, 'SymGetSearchPath'); asm MOV ESP, EBP POP EBP JMP [_SymGetSearchPath] end; end; var _SymSetSearchPath: Pointer; function SymSetSearchPath; begin GetProcedureAddress(_SymSetSearchPath, ImageHlpLib, 'SymSetSearchPath'); asm MOV ESP, EBP POP EBP JMP [_SymSetSearchPath] end; end; var _SymLoadModuleEx: Pointer; function SymLoadModuleEx; begin GetProcedureAddress(_SymLoadModuleEx, ImageHlpLib, 'SymLoadModuleEx'); asm MOV ESP, EBP POP EBP JMP [_SymLoadModuleEx] end; end; var _SymLoadModule64: Pointer; function SymLoadModule64; begin GetProcedureAddress(_SymLoadModule64, ImageHlpLib, 'SymLoadModule64'); asm MOV ESP, EBP POP EBP JMP [_SymLoadModule64] end; end; var _SymLoadModule: Pointer; function SymLoadModule; begin GetProcedureAddress(_SymLoadModule, ImageHlpLib, 'SymLoadModule'); asm MOV ESP, EBP POP EBP JMP [_SymLoadModule] end; end; var _SymUnloadModule64: Pointer; function SymUnloadModule64; begin GetProcedureAddress(_SymUnloadModule64, ImageHlpLib, 'SymUnloadModule64'); asm MOV ESP, EBP POP EBP JMP [_SymUnloadModule64] end; end; var _SymUnloadModule: Pointer; function SymUnloadModule; begin GetProcedureAddress(_SymUnloadModule, ImageHlpLib, 'SymUnloadModule'); asm MOV ESP, EBP POP EBP JMP [_SymUnloadModule] end; end; var _SymUnDName64: Pointer; function SymUnDName64; begin GetProcedureAddress(_SymUnDName64, ImageHlpLib, 'SymUnDName64'); asm MOV ESP, EBP POP EBP JMP [_SymUnDName64] end; end; var _SymUnDName: Pointer; function SymUnDName; begin GetProcedureAddress(_SymUnDName, ImageHlpLib, 'SymUnDName'); asm MOV ESP, EBP POP EBP JMP [_SymUnDName] end; end; var _SymRegisterCallback64: Pointer; function SymRegisterCallback64; begin GetProcedureAddress(_SymRegisterCallback64, ImageHlpLib, 'SymRegisterCallback64'); asm MOV ESP, EBP POP EBP JMP [_SymRegisterCallback64] end; end; var _SymRegFuncEntryCallback64: Pointer; function SymRegisterFunctionEntryCallback64; begin GetProcedureAddress(_SymRegFuncEntryCallback64, ImageHlpLib, 'SymRegisterFunctionEntryCallback64'); asm MOV ESP, EBP POP EBP JMP [_SymRegFuncEntryCallback64] end; end; var _SymRegisterCallback: Pointer; function SymRegisterCallback; begin GetProcedureAddress(_SymRegisterCallback, ImageHlpLib, 'SymRegisterCallback'); asm MOV ESP, EBP POP EBP JMP [_SymRegisterCallback] end; end; var _SymRegisterFuncEntryCallback: Pointer; function SymRegisterFunctionEntryCallback; begin GetProcedureAddress(_SymRegisterFuncEntryCallback, ImageHlpLib, 'SymRegisterFunctionEntryCallback'); asm MOV ESP, EBP POP EBP JMP [_SymRegisterFuncEntryCallback] end; end; var _SymSetContext: Pointer; function SymSetContext; begin GetProcedureAddress(_SymSetContext, ImageHlpLib, 'SymSetContext'); asm MOV ESP, EBP POP EBP JMP [_SymSetContext] end; end; var _SymFromAddr: Pointer; function SymFromAddr; begin GetProcedureAddress(_SymFromAddr, ImageHlpLib, 'SymFromAddr'); asm MOV ESP, EBP POP EBP JMP [_SymFromAddr] end; end; var _SymFromName: Pointer; function SymFromName; begin GetProcedureAddress(_SymFromName, ImageHlpLib, 'SymFromName'); asm MOV ESP, EBP POP EBP JMP [_SymFromName] end; end; var _SymEnumSymbolsForAddr: Pointer; function SymEnumSymbolsForAddr; begin GetProcedureAddress(_SymEnumSymbolsForAddr, ImageHlpLib, 'SymEnumSymbolsForAddr'); asm MOV ESP, EBP POP EBP JMP [_SymEnumSymbolsForAddr] end; end; var _SymEnumSymbols: Pointer; function SymEnumSymbols; begin GetProcedureAddress(_SymEnumSymbols, ImageHlpLib, 'SymEnumSymbols'); asm MOV ESP, EBP POP EBP JMP [_SymEnumSymbols] end; end; var _SymGetTypeInfo: Pointer; function SymGetTypeInfo; begin GetProcedureAddress(_SymGetTypeInfo, ImageHlpLib, 'SymGetTypeInfo'); asm MOV ESP, EBP POP EBP JMP [_SymGetTypeInfo] end; end; var _SymEnumTypes: Pointer; function SymEnumTypes; begin GetProcedureAddress(_SymEnumTypes, ImageHlpLib, 'SymEnumTypes'); asm MOV ESP, EBP POP EBP JMP [_SymEnumTypes] end; end; var _SymGetTypeFromName: Pointer; function SymGetTypeFromName; begin GetProcedureAddress(_SymGetTypeFromName, ImageHlpLib, 'SymGetTypeFromName'); asm MOV ESP, EBP POP EBP JMP [_SymGetTypeFromName] end; end; var _SymAddSymbol: Pointer; function SymAddSymbol; begin GetProcedureAddress(_SymAddSymbol, ImageHlpLib, 'SymAddSymbol'); asm MOV ESP, EBP POP EBP JMP [_SymAddSymbol] end; end; var _SymDeleteSymbol: Pointer; function SymDeleteSymbol; begin GetProcedureAddress(_SymDeleteSymbol, ImageHlpLib, 'SymDeleteSymbol'); asm MOV ESP, EBP POP EBP JMP [_SymDeleteSymbol] end; end; var _DbgHelpCreateUserDump: Pointer; function DbgHelpCreateUserDump; begin GetProcedureAddress(_DbgHelpCreateUserDump, ImageHlpLib, 'DbgHelpCreateUserDump'); asm MOV ESP, EBP POP EBP JMP [_DbgHelpCreateUserDump] end; end; var _DbgHelpCreateUserDumpW: Pointer; function DbgHelpCreateUserDumpW; begin GetProcedureAddress(_DbgHelpCreateUserDumpW, ImageHlpLib, 'DbgHelpCreateUserDumpW'); asm MOV ESP, EBP POP EBP JMP [_DbgHelpCreateUserDumpW] end; end; var _SymGetSymFromAddr64: Pointer; function SymGetSymFromAddr64; begin GetProcedureAddress(_SymGetSymFromAddr64, ImageHlpLib, 'SymGetSymFromAddr64'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymFromAddr64] end; end; var _SymGetSymFromAddr: Pointer; function SymGetSymFromAddr; begin GetProcedureAddress(_SymGetSymFromAddr, ImageHlpLib, 'SymGetSymFromAddr'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymFromAddr] end; end; var _SymGetSymFromName64: Pointer; function SymGetSymFromName64; begin GetProcedureAddress(_SymGetSymFromName64, ImageHlpLib, 'SymGetSymFromName64'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymFromName64] end; end; var _SymGetSymFromName: Pointer; function SymGetSymFromName; begin GetProcedureAddress(_SymGetSymFromName, ImageHlpLib, 'SymGetSymFromName'); asm MOV ESP, EBP POP EBP JMP [_SymGetSymFromName] end; end; var _FindFileInPath: Pointer; function FindFileInPath; begin GetProcedureAddress(_FindFileInPath, ImageHlpLib, 'FindFileInPath'); asm MOV ESP, EBP POP EBP JMP [_FindFileInPath] end; end; var _FindFileInSearchPath: Pointer; function FindFileInSearchPath; begin GetProcedureAddress(_FindFileInSearchPath, ImageHlpLib, 'FindFileInSearchPath'); asm MOV ESP, EBP POP EBP JMP [_FindFileInSearchPath] end; end; var _SymEnumSym: Pointer; function SymEnumSym; begin GetProcedureAddress(_SymEnumSym, ImageHlpLib, 'SymEnumSym'); asm MOV ESP, EBP POP EBP JMP [_SymEnumSym] end; end; var _MiniDumpWriteDump: Pointer; function MiniDumpWriteDump; begin GetProcedureAddress(_MiniDumpWriteDump, ImageHlpLib, 'MiniDumpWriteDump'); asm MOV ESP, EBP POP EBP JMP [_MiniDumpWriteDump] end; end; var _MiniDumpReadDumpStream: Pointer; function MiniDumpReadDumpStream; begin GetProcedureAddress(_MiniDumpReadDumpStream, ImageHlpLib, 'MiniDumpReadDumpStream'); asm MOV ESP, EBP POP EBP JMP [_MiniDumpReadDumpStream] end; end; {$ELSE} function BindImage; external ImageHlpLib name 'BindImage'; function BindImageEx; external ImageHlpLib name 'BindImageEx'; function ReBaseImage; external ImageHlpLib name 'ReBaseImage'; function ReBaseImage64; external ImageHlpLib name 'ReBaseImage64'; function CheckSumMappedFile; external ImageHlpLib name 'CheckSumMappedFile'; function MapFileAndCheckSumA; external ImageHlpLib name 'MapFileAndCheckSumA'; function MapFileAndCheckSumW; external ImageHlpLib name 'MapFileAndCheckSumW'; function MapFileAndCheckSum; external ImageHlpLib name 'MapFileAndCheckSum' + AWSuffix; function GetImageConfigInformation; external ImageHlpLib name 'GetImageConfigInformation'; function GetImageUnusedHeaderBytes; external ImageHlpLib name 'GetImageUnusedHeaderBytes'; function SetImageConfigInformation; external ImageHlpLib name 'SetImageConfigInformation'; function ImageGetDigestStream; external ImageHlpLib name 'ImageGetDigestStream'; function ImageAddCertificate; external ImageHlpLib name 'ImageAddCertificate'; function ImageRemoveCertificate; external ImageHlpLib name 'ImageRemoveCertificate'; function ImageEnumerateCertificates; external ImageHlpLib name 'ImageEnumerateCertificates'; function ImageGetCertificateData; external ImageHlpLib name 'ImageGetCertificateData'; function ImageGetCertificateHeader; external ImageHlpLib name 'ImageGetCertificateHeader'; function ImageLoad; external ImageHlpLib name 'ImageLoad'; function ImageUnload; external ImageHlpLib name 'ImageUnload'; function MapAndLoad; external ImageHlpLib name 'MapAndLoad'; function UnMapAndLoad; external ImageHlpLib name 'UnMapAndLoad'; function TouchFileTimes; external ImageHlpLib name 'TouchFileTimes'; function SplitSymbols; external ImageHlpLib name 'SplitSymbols'; function UpdateDebugInfoFile; external ImageHlpLib name 'UpdateDebugInfoFile'; function UpdateDebugInfoFileEx; external ImageHlpLib name 'UpdateDebugInfoFileEx'; function FindDebugInfoFile; external ImageHlpLib name 'FindDebugInfoFile'; function FindDebugInfoFileEx; external ImageHlpLib name 'FindDebugInfoFileEx'; function SymFindFileInPath; external ImageHlpLib name 'SymFindFileInPath'; function FindExecutableImage; external ImageHlpLib name 'FindExecutableImage'; function FindExecutableImageEx; external ImageHlpLib name 'FindExecutableImageEx'; function ImageNtHeader; external ImageHlpLib name 'ImageNtHeader'; function ImageDirectoryEntryToDataEx; external ImageHlpLib name 'ImageDirectoryEntryToDataEx'; function ImageDirectoryEntryToData; external ImageHlpLib name 'ImageDirectoryEntryToData'; function ImageRvaToSection; external ImageHlpLib name 'ImageRvaToSection'; function ImageRvaToVa; external ImageHlpLib name 'ImageRvaToVa'; function MapDebugInformation; external ImageHlpLib name 'MapDebugInformation'; function UnmapDebugInformation; external ImageHlpLib name 'UnmapDebugInformation'; function SearchTreeForFile; external ImageHlpLib name 'SearchTreeForFile'; function EnumDirTree; external ImageHlpLib name 'EnumDirTree'; function MakeSureDirectoryPathExists; external ImageHlpLib name 'MakeSureDirectoryPathExists'; function UnDecorateSymbolName; external ImageHlpLib name 'UnDecorateSymbolName'; function StackWalk64; external ImageHlpLib name 'StackWalk64'; function StackWalk; external ImageHlpLib name 'StackWalk'; function ImagehlpApiVersion; external ImageHlpLib name 'ImagehlpApiVersion'; function ImagehlpApiVersionEx; external ImageHlpLib name 'ImagehlpApiVersionEx'; function GetTimestampForLoadedLibrary; external ImageHlpLib name 'GetTimestampForLoadedLibrary'; function SymSetOptions; external ImageHlpLib name 'SymSetOptions'; function SymGetOptions; external ImageHlpLib name 'SymGetOptions'; function SymCleanup; external ImageHlpLib name 'SymCleanup'; function SymMatchString; external ImageHlpLib name 'SymMatchString'; function SymEnumSourceFiles; external ImageHlpLib name 'SymEnumSourceFiles'; function SymEnumerateModules64; external ImageHlpLib name 'SymEnumerateModules64'; function SymEnumerateModules; external ImageHlpLib name 'SymEnumerateModules'; function SymEnumerateSymbols64; external ImageHlpLib name 'SymEnumerateSymbols64'; function SymEnumerateSymbolsW64; external ImageHlpLib name 'SymEnumerateSymbolsW64'; function SymEnumerateSymbols; external ImageHlpLib name 'SymEnumerateSymbols'; function SymEnumerateSymbolsW; external ImageHlpLib name 'SymEnumerateSymbolsW'; function EnumerateLoadedModules64; external ImageHlpLib name 'EnumerateLoadedModules64'; function EnumerateLoadedModules; external ImageHlpLib name 'EnumerateLoadedModules'; function SymFunctionTableAccess64; external ImageHlpLib name 'SymFunctionTableAccess64'; function SymFunctionTableAccess; external ImageHlpLib name 'SymFunctionTableAccess'; function SymGetModuleInfo64; external ImageHlpLib name 'SymGetModuleInfo64'; function SymGetModuleInfoW64; external ImageHlpLib name 'SymGetModuleInfoW64'; function SymGetModuleInfo; external ImageHlpLib name 'SymGetModuleInfo'; function SymGetModuleInfoW; external ImageHlpLib name 'SymGetModuleInfoW'; function SymGetModuleBase64; external ImageHlpLib name 'SymGetModuleBase64'; function SymGetModuleBase; external ImageHlpLib name 'SymGetModuleBase'; function SymGetSymNext64; external ImageHlpLib name 'SymGetSymNext64'; function SymGetSymNext; external ImageHlpLib name 'SymGetSymNext'; function SymGetSymPrev64; external ImageHlpLib name 'SymGetSymPrev64'; function SymGetSymPrev; external ImageHlpLib name 'SymGetSymPrev'; function SymGetLineFromAddr64; external ImageHlpLib name 'SymGetLineFromAddr64'; function SymGetLineFromAddr; external ImageHlpLib name 'SymGetLineFromAddr'; function SymGetLineFromName64; external ImageHlpLib name 'SymGetLineFromName64'; function SymGetLineFromName; external ImageHlpLib name 'SymGetLineFromName'; function SymGetLineNext64; external ImageHlpLib name 'SymGetLineNext64'; function SymGetLineNext; external ImageHlpLib name 'SymGetLineNext'; function SymGetLinePrev64; external ImageHlpLib name 'SymGetLinePrev64'; function SymGetLinePrev; external ImageHlpLib name 'SymGetLinePrev'; function SymMatchFileName; external ImageHlpLib name 'SymMatchFileName'; function SymInitialize; external ImageHlpLib name 'SymInitialize'; function SymGetSearchPath; external ImageHlpLib name 'SymGetSearchPath'; function SymSetSearchPath; external ImageHlpLib name 'SymSetSearchPath'; function SymLoadModuleEx; external ImageHlpLib name 'SymLoadModuleEx'; function SymLoadModule64; external ImageHlpLib name 'SymLoadModule64'; function SymLoadModule; external ImageHlpLib name 'SymLoadModule'; function SymUnloadModule64; external ImageHlpLib name 'SymUnloadModule64'; function SymUnloadModule; external ImageHlpLib name 'SymUnloadModule'; function SymUnDName64; external ImageHlpLib name 'SymUnDName64'; function SymUnDName; external ImageHlpLib name 'SymUnDName'; function SymRegisterCallback64; external ImageHlpLib name 'SymRegisterCallback64'; function SymRegisterFunctionEntryCallback64; external ImageHlpLib name 'SymRegisterFunctionEntryCallback64'; function SymRegisterCallback; external ImageHlpLib name 'SymRegisterCallback'; function SymRegisterFunctionEntryCallback; external ImageHlpLib name 'SymRegisterFunctionEntryCallback'; function SymSetContext; external ImageHlpLib name 'SymSetContext'; function SymFromAddr; external ImageHlpLib name 'SymFromAddr'; function SymFromName; external ImageHlpLib name 'SymFromName'; function SymEnumSymbolsForAddr; external ImageHlpLib name 'SymEnumSymbolsForAddr'; function SymEnumSymbols; external ImageHlpLib name 'SymEnumSymbols'; function SymGetTypeInfo; external ImageHlpLib name 'SymGetTypeInfo'; function SymEnumTypes; external ImageHlpLib name 'SymEnumTypes'; function SymGetTypeFromName; external ImageHlpLib name 'SymGetTypeFromName'; function SymAddSymbol; external ImageHlpLib name 'SymAddSymbol'; function SymDeleteSymbol; external ImageHlpLib name 'SymDeleteSymbol'; function DbgHelpCreateUserDump; external ImageHlpLib name 'DbgHelpCreateUserDump'; function DbgHelpCreateUserDumpW; external ImageHlpLib name 'DbgHelpCreateUserDumpW'; function SymGetSymFromAddr64; external ImageHlpLib name 'SymGetSymFromAddr64'; function SymGetSymFromAddr; external ImageHlpLib name 'SymGetSymFromAddr'; function SymGetSymFromName64; external ImageHlpLib name 'SymGetSymFromName64'; function SymGetSymFromName; external ImageHlpLib name 'SymGetSymFromName'; function FindFileInPath; external ImageHlpLib name 'FindFileInPath'; function FindFileInSearchPath; external ImageHlpLib name 'FindFileInSearchPath'; function SymEnumSym; external ImageHlpLib name 'SymEnumSym'; function MiniDumpWriteDump; external ImageHlpLib name 'MiniDumpWriteDump'; function MiniDumpReadDumpStream; external ImageHlpLib name 'MiniDumpReadDumpStream'; {$ENDIF DYNAMIC_LINK} {$ENDIF JWA_INTERFACESECTION} {$IFNDEF JWA_OMIT_SECTIONS} end. {$ENDIF JWA_OMIT_SECTIONS}