~ubuntu-branches/ubuntu/feisty/fpc/feisty

« back to all changes in this revision

Viewing changes to packages/extra/winunits/jwaimagehlp.pas

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2007-01-27 20:08:50 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070127200850-9mrptaqqjsx9nwa7
Tags: 2.0.4-5
* Fixed Build-Depends.
* Add myself to Uploaders in debian/control.
* Make sure that the sources are really patched before building them.
* Build unit 'libc' on powerpc too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
{******************************************************************************}
2
 
{                                                                              }
3
 
{ Image Help API interface Unit for Object Pascal                              }
4
 
{                                                                              }
5
 
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
6
 
{ Corporation. All Rights Reserved.                                            }
7
 
{                                                                              }
8
 
{ The original file is: imagehlp.h, released August 2001. The original Pascal  }
9
 
{ code is: ImageHelp.pas, released December 2000. The initial developer of the }
10
 
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl).               }
11
 
{                                                                              }
12
 
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
13
 
{ Marcel van Brakel. All Rights Reserved.                                      }
14
 
{                                                                              }
15
 
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
16
 
{                                                                              }
17
 
{ You may retrieve the latest version of this file at the Project JEDI         }
18
 
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
19
 
{                                                                              }
20
 
{ The contents of this file are used with permission, subject to the Mozilla   }
21
 
{ Public License Version 1.1 (the "License"); you may not use this file except }
22
 
{ in compliance with the License. You may obtain a copy of the License at      }
23
 
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
24
 
{                                                                              }
25
 
{ Software distributed under the License is distributed on an "AS IS" basis,   }
26
 
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
27
 
{ the specific language governing rights and limitations under the License.    }
28
 
{                                                                              }
29
 
{ Alternatively, the contents of this file may be used under the terms of the  }
30
 
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
31
 
{ provisions of the LGPL License are applicable instead of those above.        }
32
 
{ If you wish to allow use of your version of this file only under the terms   }
33
 
{ of the LGPL License and not to allow others to use your version of this file }
34
 
{ under the MPL, indicate your decision by deleting  the provisions above and  }
35
 
{ replace  them with the notice and other provisions required by the LGPL      }
36
 
{ License.  If you do not delete the provisions above, a recipient may use     }
37
 
{ your version of this file under either the MPL or the LGPL License.          }
38
 
{                                                                              }
39
 
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
40
 
{                                                                              }
41
 
{******************************************************************************}
42
 
 
43
 
// $Id: jwaimagehlp.pas,v 1.1 2005/04/04 07:56:10 marco Exp $
44
 
 
45
 
unit JwaImageHlp;
46
 
 
47
 
{$WEAKPACKAGEUNIT}
48
 
 
49
 
{$HPPEMIT ''}
50
 
{$HPPEMIT '#include "ImageHlp.h"'}
51
 
{$HPPEMIT ''}
52
 
 
53
 
{$I jediapilib.inc}
54
 
 
55
 
interface
56
 
 
57
 
uses
58
 
  Windows, JwaWinBase, JwaWinNT, JwaWinType;
59
 
 
60
 
const
61
 
  IMAGE_SEPARATION = 64*1024;
62
 
  {$EXTERNALSYM IMAGE_SEPARATION}
63
 
 
64
 
type
65
 
  PLOADED_IMAGE = ^LOADED_IMAGE;
66
 
  {$EXTERNALSYM PLOADED_IMAGE}
67
 
  _LOADED_IMAGE = record
68
 
    ModuleName: PSTR;
69
 
    hFile: HANDLE;
70
 
    MappedAddress: PUCHAR;
71
 
    FileHeader: PIMAGE_NT_HEADERS32;
72
 
    LastRvaSection: PIMAGE_SECTION_HEADER;
73
 
    NumberOfSections: ULONG;
74
 
    Sections: PIMAGE_SECTION_HEADER;
75
 
    Characteristics: ULONG;
76
 
    fSystemImage: ByteBool;
77
 
    fDOSImage: ByteBool;
78
 
    Links: LIST_ENTRY;
79
 
    SizeOfImage: ULONG;
80
 
  end;
81
 
  {$EXTERNALSYM _LOADED_IMAGE}
82
 
  LOADED_IMAGE = _LOADED_IMAGE;
83
 
  {$EXTERNALSYM LOADED_IMAGE}
84
 
  TLoadedImage = LOADED_IMAGE;
85
 
  PLoadedImage = PLOADED_IMAGE;
86
 
 
87
 
const
88
 
  MAX_SYM_NAME = 2000;
89
 
  {$EXTERNALSYM MAX_SYM_NAME}
90
 
 
91
 
function BindImage(ImageName, DllPath, SymbolPath: PSTR): BOOL; stdcall;
92
 
{$EXTERNALSYM BindImage}
93
 
 
94
 
type
95
 
  _IMAGEHLP_STATUS_REASON = (
96
 
    BindOutOfMemory,
97
 
    BindRvaToVaFailed,
98
 
    BindNoRoomInImage,
99
 
    BindImportModuleFailed,
100
 
    BindImportProcedureFailed,
101
 
    BindImportModule,
102
 
    BindImportProcedure,
103
 
    BindForwarder,
104
 
    BindForwarderNOT,
105
 
    BindImageModified,
106
 
    BindExpandFileHeaders,
107
 
    BindImageComplete,
108
 
    BindMismatchedSymbols,
109
 
    BindSymbolsNotUpdated,
110
 
    BindImportProcedure32,
111
 
    BindImportProcedure64,
112
 
    BindForwarder32,
113
 
    BindForwarder64,
114
 
    BindForwarderNOT32,
115
 
    BindForwarderNOT64);
116
 
  {$EXTERNALSYM _IMAGEHLP_STATUS_REASON}
117
 
  IMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON;
118
 
  {$EXTERNALSYM IMAGEHLP_STATUS_REASON}
119
 
  TImageHlpStatusReason = IMAGEHLP_STATUS_REASON;
120
 
 
121
 
  PIMAGEHLP_STATUS_ROUTINE = function(Reason: IMAGEHLP_STATUS_REASON;
122
 
    ImageName, DllName: PSTR; Va, Parameter: ULONG_PTR): BOOL; stdcall;
123
 
  {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE}
124
 
  PImageHlpStatusRoutine = PIMAGEHLP_STATUS_ROUTINE;
125
 
 
126
 
  PIMAGEHLP_STATUS_ROUTINE32 = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR;
127
 
    Va: ULONG; Parameter: ULONG_PTR): BOOL; stdcall;
128
 
  {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE32}
129
 
  PImageHlpStatusRoutine23 = PIMAGEHLP_STATUS_ROUTINE32;
130
 
 
131
 
  PIMAGEHLP_STATUS_ROUTINE64 = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR;
132
 
    Va: ULONG64; Parameter: ULONG_PTR): BOOL; stdcall;
133
 
  {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE64}
134
 
  PImageHlpStatusRoutine64 = PIMAGEHLP_STATUS_ROUTINE64;
135
 
 
136
 
function BindImageEx(Flags: DWORD; ImageName, DllPath, SymbolPath: PSTR;
137
 
  StatusRoutine: PIMAGEHLP_STATUS_ROUTINE): BOOL; stdcall;
138
 
{$EXTERNALSYM BindImageEx}
139
 
 
140
 
const
141
 
  BIND_NO_BOUND_IMPORTS  = $00000001;
142
 
  {$EXTERNALSYM BIND_NO_BOUND_IMPORTS}
143
 
  BIND_NO_UPDATE         = $00000002;
144
 
  {$EXTERNALSYM BIND_NO_UPDATE}
145
 
  BIND_ALL_IMAGES        = $00000004;
146
 
  {$EXTERNALSYM BIND_ALL_IMAGES}
147
 
  BIND_CACHE_IMPORT_DLLS = $00000008; // Cache dll's across calls to BindImageEx (same as NT 3.1->NT 4.0)
148
 
  {$EXTERNALSYM BIND_CACHE_IMPORT_DLLS}
149
 
 
150
 
  BIND_REPORT_64BIT_VA   = $00000010;
151
 
  {$EXTERNALSYM BIND_REPORT_64BIT_VA}
152
 
 
153
 
function ReBaseImage(CurrentImageName: PSTR; SymbolPath: PSTR; fReBase: BOOL;
154
 
  fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
155
 
  var OldImageSize: ULONG; var OldImageBase: ULONG_PTR; var NewImageSize: ULONG;
156
 
  var NewImageBase: ULONG_PTR; TimeStamp: ULONG): BOOL; stdcall;
157
 
{$EXTERNALSYM ReBaseImage}
158
 
 
159
 
function ReBaseImage64(CurrentImageName: PSTR; SymbolPath: PSTR; fReBase: BOOL;
160
 
  fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
161
 
  var OldImageSize: ULONG; var OldImageBase: ULONG64; var NewImageSize: ULONG;
162
 
  var NewImageBase: ULONG64; TimeStamp: ULONG): BOOL; stdcall;
163
 
{$EXTERNALSYM ReBaseImage64}
164
 
 
165
 
//
166
 
// Define checksum return codes.
167
 
//
168
 
 
169
 
const
170
 
  CHECKSUM_SUCCESS         = 0;
171
 
  {$EXTERNALSYM CHECKSUM_SUCCESS}
172
 
  CHECKSUM_OPEN_FAILURE    = 1;
173
 
  {$EXTERNALSYM CHECKSUM_OPEN_FAILURE}
174
 
  CHECKSUM_MAP_FAILURE     = 2;
175
 
  {$EXTERNALSYM CHECKSUM_MAP_FAILURE}
176
 
  CHECKSUM_MAPVIEW_FAILURE = 3;
177
 
  {$EXTERNALSYM CHECKSUM_MAPVIEW_FAILURE}
178
 
  CHECKSUM_UNICODE_FAILURE = 4;
179
 
  {$EXTERNALSYM CHECKSUM_UNICODE_FAILURE}
180
 
 
181
 
// Define Splitsym flags.
182
 
 
183
 
  SPLITSYM_REMOVE_PRIVATE = $00000001; // Remove CV types/symbols and Fixup debug
184
 
  {$EXTERNALSYM SPLITSYM_REMOVE_PRIVATE}
185
 
                                                    //  Used for creating .dbg files that ship
186
 
                                                    //  as part of the product.
187
 
 
188
 
  SPLITSYM_EXTRACT_ALL = $00000002; // Extract all debug info from image.
189
 
  {$EXTERNALSYM SPLITSYM_EXTRACT_ALL}
190
 
                                                    //  Normally, FPO is left in the image
191
 
                                                    //  to allow stack traces through the code.
192
 
                                                    //  Using this switch is similar to linking
193
 
                                                    //  with -debug:none except the .dbg file
194
 
                                                    //  exists...
195
 
 
196
 
  SPLITSYM_SYMBOLPATH_IS_SRC = $00000004; // The SymbolFilePath contains an alternate
197
 
  {$EXTERNALSYM SPLITSYM_SYMBOLPATH_IS_SRC}
198
 
                                                    //  path to locate the pdb.
199
 
 
200
 
//
201
 
// Define checksum function prototypes.
202
 
//
203
 
 
204
 
function CheckSumMappedFile(BaseAddress: PVOID; FileLength: DWORD;
205
 
  var HeaderSum, CheckSum: DWORD): PIMAGE_NT_HEADERS; stdcall;
206
 
{$EXTERNALSYM CheckSumMappedFile}
207
 
 
208
 
function MapFileAndCheckSumA(Filename: PSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall;
209
 
{$EXTERNALSYM MapFileAndCheckSumA}
210
 
function MapFileAndCheckSumW(Filename: PWSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall;
211
 
{$EXTERNALSYM MapFileAndCheckSumW}
212
 
function MapFileAndCheckSum(Filename: PTSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall;
213
 
{$EXTERNALSYM MapFileAndCheckSum}
214
 
 
215
 
function GetImageConfigInformation(const LoadedImage: LOADED_IMAGE;
216
 
  var ImageConfigInformation: IMAGE_LOAD_CONFIG_DIRECTORY): BOOL; stdcall;
217
 
{$EXTERNALSYM GetImageConfigInformation}
218
 
 
219
 
function GetImageUnusedHeaderBytes(const LoadedImage: LOADED_IMAGE;
220
 
  var SizeUnusedHeaderBytes: DWORD): DWORD; stdcall;
221
 
{$EXTERNALSYM GetImageUnusedHeaderBytes}
222
 
 
223
 
function SetImageConfigInformation(const LoadedImage: LOADED_IMAGE;
224
 
  const ImageConfigInformation: IMAGE_LOAD_CONFIG_DIRECTORY): BOOL; stdcall;
225
 
{$EXTERNALSYM SetImageConfigInformation}
226
 
 
227
 
// Image Integrity API's
228
 
 
229
 
const
230
 
  CERT_PE_IMAGE_DIGEST_DEBUG_INFO      = $01;
231
 
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_DEBUG_INFO}
232
 
  CERT_PE_IMAGE_DIGEST_RESOURCES       = $02;
233
 
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_RESOURCES}
234
 
  CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = $04;
235
 
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO}
236
 
  CERT_PE_IMAGE_DIGEST_NON_PE_INFO     = $08; // include data outside the PE image
237
 
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_NON_PE_INFO}
238
 
 
239
 
  CERT_SECTION_TYPE_ANY = $FF; // Any Certificate type
240
 
  {$EXTERNALSYM CERT_SECTION_TYPE_ANY}
241
 
 
242
 
type
243
 
  DIGEST_HANDLE = PVOID;
244
 
  {$EXTERNALSYM DIGEST_HANDLE}
245
 
  TDigestHandle = DIGEST_HANDLE;
246
 
 
247
 
  DIGEST_FUNCTION = function(refdata: DIGEST_HANDLE; pData: PBYTE; dwLength: DWORD): BOOL; stdcall;
248
 
  {$EXTERNALSYM DIGEST_FUNCTION}
249
 
  TDigestFunction = DIGEST_FUNCTION;
250
 
 
251
 
function ImageGetDigestStream(FileHandle: HANDLE; DigestLevel: DWORD;
252
 
  DigestFunction: DIGEST_FUNCTION; DigestHandle: DIGEST_HANDLE): BOOL; stdcall;
253
 
{$EXTERNALSYM ImageGetDigestStream}
254
 
 
255
 
function ImageAddCertificate(FileHandle: HANDLE; Certificate: PWinCertificate;
256
 
  var Index: DWORD): BOOL; stdcall;
257
 
{$EXTERNALSYM ImageAddCertificate}
258
 
 
259
 
function ImageRemoveCertificate(FileHandle: HANDLE; Index: DWORD): BOOL; stdcall;
260
 
{$EXTERNALSYM ImageRemoveCertificate}
261
 
 
262
 
function ImageEnumerateCertificates(FileHandle: HANDLE; TypeFilter: WORD;
263
 
  var CertificateCount: DWORD; Indices: PDWORD; IndexCount: DWORD): BOOL; stdcall;
264
 
{$EXTERNALSYM ImageEnumerateCertificates}
265
 
 
266
 
function ImageGetCertificateData(FileHandle: HANDLE; CertificateIndex: DWORD;
267
 
  Certificate: PWinCertificate; var RequiredLength: DWORD): BOOL; stdcall;
268
 
{$EXTERNALSYM ImageGetCertificateData}
269
 
 
270
 
function ImageGetCertificateHeader(FileHandle: HANDLE; CertificateIndex: DWORD;
271
 
  Certificateheader: PWinCertificate): BOOL; stdcall;
272
 
{$EXTERNALSYM ImageGetCertificateHeader}
273
 
 
274
 
function ImageLoad(DllName: PSTR; DllPath: PSTR): PLOADED_IMAGE; stdcall;
275
 
{$EXTERNALSYM ImageLoad}
276
 
 
277
 
function ImageUnload(const LoadedImage: LOADED_IMAGE): BOOL; stdcall;
278
 
{$EXTERNALSYM ImageUnload}
279
 
 
280
 
function MapAndLoad(ImageName, DllPath: PSTR; var LoadedImage: LOADED_IMAGE;
281
 
  DotDll: BOOL; ReadOnly: BOOL): BOOL; stdcall;
282
 
{$EXTERNALSYM MapAndLoad}
283
 
 
284
 
function UnMapAndLoad(const LoadedImage: LOADED_IMAGE): BOOL; stdcall;
285
 
{$EXTERNALSYM UnMapAndLoad}
286
 
 
287
 
function TouchFileTimes(FileHandle: HANDLE; pSystemTime: PSYSTEMTIME): BOOL; stdcall;
288
 
{$EXTERNALSYM TouchFileTimes}
289
 
 
290
 
function SplitSymbols(ImageName, SymbolsPath, SymbolFilePath: PSTR; Flags: DWORD): BOOL; stdcall;
291
 
{$EXTERNALSYM SplitSymbols}
292
 
 
293
 
function UpdateDebugInfoFile(ImageFileName, SymbolPath, DebugFilePath: PSTR;
294
 
  const NtHeaders: IMAGE_NT_HEADERS32): BOOL; stdcall;
295
 
{$EXTERNALSYM UpdateDebugInfoFile}
296
 
 
297
 
function UpdateDebugInfoFileEx(ImageFileName, SymbolPath, DebugFilePath: PSTR;
298
 
  const NtHeaders: IMAGE_NT_HEADERS32; OldChecksum: DWORD): BOOL; stdcall;
299
 
{$EXTERNALSYM UpdateDebugInfoFileEx}
300
 
 
301
 
function FindDebugInfoFile(FileName, SymbolPath, DebugFilePath: PSTR): HANDLE; stdcall;
302
 
{$EXTERNALSYM FindDebugInfoFile}
303
 
 
304
 
type
305
 
  PFIND_DEBUG_FILE_CALLBACK = function(FileHandle: HANDLE; FileName: PSTR;
306
 
    CallerData: PVOID): BOOL; stdcall;
307
 
  {$EXTERNALSYM PFIND_DEBUG_FILE_CALLBACK}
308
 
  PFindDebugFileCallback = PFIND_DEBUG_FILE_CALLBACK;
309
 
 
310
 
function FindDebugInfoFileEx(FileName, SymbolPath, DebugFilePath: PSTR;
311
 
  Callback: PFIND_DEBUG_FILE_CALLBACK; CallerData: PVOID): HANDLE; stdcall;
312
 
{$EXTERNALSYM FindDebugInfoFileEx}
313
 
 
314
 
type
315
 
  PFINDFILEINPATHCALLBACK = function(filename: PSTR; context: PVOID): BOOL; stdcall;
316
 
  {$EXTERNALSYM PFINDFILEINPATHCALLBACK}
317
 
 
318
 
function SymFindFileInPath(hprocess: HANDLE; SearchPath, FileName: LPSTR; id: PVOID; two, three, flags: DWORD;
319
 
  FoundFile: LPSTR; callback: PFINDFILEINPATHCALLBACK; context: PVOID): BOOL; stdcall;
320
 
{$EXTERNALSYM SymFindFileInPath}
321
 
 
322
 
function FindExecutableImage(FileName, SymbolPath, ImageFilePath: PSTR): HANDLE; stdcall;
323
 
{$EXTERNALSYM FindExecutableImage}
324
 
 
325
 
type
326
 
  PFIND_EXE_FILE_CALLBACK = function(FileHandle: HANDLE; FileName: PSTR;
327
 
    CallerData: PVOID): BOOL; stdcall;
328
 
  {$EXTERNALSYM PFIND_EXE_FILE_CALLBACK}
329
 
  PFindExeFileCallback = PFIND_EXE_FILE_CALLBACK;
330
 
 
331
 
function FindExecutableImageEx(FileName, SymbolPath, ImageFilePath: PSTR;
332
 
  Callback: PFIND_EXE_FILE_CALLBACK; CallerData: PVOID): HANDLE; stdcall;
333
 
{$EXTERNALSYM FindExecutableImageEx}
334
 
 
335
 
function ImageNtHeader(Base: PVOID): PIMAGE_NT_HEADERS; stdcall;
336
 
{$EXTERNALSYM ImageNtHeader}
337
 
 
338
 
function ImageDirectoryEntryToDataEx(Base: PVOID; MappedAsImage: ByteBool;
339
 
  DirectoryEntry: USHORT; var Size: ULONG; var FoundHeader: PIMAGE_SECTION_HEADER): PVOID; stdcall;
340
 
{$EXTERNALSYM ImageDirectoryEntryToDataEx}
341
 
 
342
 
function ImageDirectoryEntryToData(Base: PVOID; MappedAsImage: ByteBool;
343
 
  DirectoryEntry: USHORT; var Size: ULONG): PVOID; stdcall;
344
 
{$EXTERNALSYM ImageDirectoryEntryToData}
345
 
 
346
 
function ImageRvaToSection(NtHeaders: PIMAGE_NT_HEADERS; Base: PVOID; Rva: ULONG): PIMAGE_SECTION_HEADER; stdcall;
347
 
{$EXTERNALSYM ImageRvaToSection}
348
 
 
349
 
function ImageRvaToVa(NtHeaders: PIMAGE_NT_HEADERS; Base: PVOID; Rva: ULONG;
350
 
  var LastRvaSection: PIMAGE_SECTION_HEADER): PVOID; stdcall;
351
 
{$EXTERNALSYM ImageRvaToVa}
352
 
 
353
 
// Symbol server exports
354
 
 
355
 
type
356
 
  PSYMBOLSERVERPROC = function(a1, a2: LPCSTR; a3: PVOID; a4, a5: DWORD; a6: LPSTR): BOOL; stdcall;
357
 
  {$EXTERNALSYM PSYMBOLSERVERPROC}
358
 
  PSYMBOLSERVEROPENPROC = function: BOOL; stdcall;
359
 
  {$EXTERNALSYM PSYMBOLSERVEROPENPROC}
360
 
  PSYMBOLSERVERCLOSEPROC = function: BOOL; stdcall;
361
 
  {$EXTERNALSYM PSYMBOLSERVERCLOSEPROC}
362
 
  PSYMBOLSERVERSETOPTIONSPROC = function(a1: UINT_PTR; a2: ULONG64): BOOL; stdcall;
363
 
  {$EXTERNALSYM PSYMBOLSERVERSETOPTIONSPROC}
364
 
  PSYMBOLSERVERCALLBACKPROC = function(action: UINT_PTR; data: ULONG64; context: ULONG64): BOOL; stdcall;
365
 
  {$EXTERNALSYM PSYMBOLSERVERCALLBACKPROC}
366
 
  PSYMBOLSERVERGETOPTIONSPROC = function: UINT_PTR; stdcall;
367
 
  {$EXTERNALSYM PSYMBOLSERVERGETOPTIONSPROC}
368
 
  PSYMBOLSERVERPINGPROC = function(a1: LPCSTR): BOOL; stdcall;
369
 
  {$EXTERNALSYM PSYMBOLSERVERPINGPROC}
370
 
 
371
 
const
372
 
  SSRVOPT_CALLBACK   = $01;
373
 
  {$EXTERNALSYM SSRVOPT_CALLBACK}
374
 
  SSRVOPT_DWORD      = $02;
375
 
  {$EXTERNALSYM SSRVOPT_DWORD}
376
 
  SSRVOPT_DWORDPTR   = $04;
377
 
  {$EXTERNALSYM SSRVOPT_DWORDPTR}
378
 
  SSRVOPT_GUIDPTR    = $08;
379
 
  {$EXTERNALSYM SSRVOPT_GUIDPTR}
380
 
  SSRVOPT_OLDGUIDPTR = $10;
381
 
  {$EXTERNALSYM SSRVOPT_OLDGUIDPTR}
382
 
  SSRVOPT_UNATTENDED = $20;
383
 
  {$EXTERNALSYM SSRVOPT_UNATTENDED}
384
 
  SSRVOPT_RESET      = ULONG_PTR(-1);
385
 
  {$EXTERNALSYM SSRVOPT_RESET}
386
 
 
387
 
  SSRVACTION_TRACE   = 1;
388
 
  {$EXTERNALSYM SSRVACTION_TRACE}
389
 
 
390
 
// This api won't be ported to Win64 - Fix your code.
391
 
 
392
 
type
393
 
  PIMAGE_DEBUG_INFORMATION = ^IMAGE_DEBUG_INFORMATION;
394
 
  {$EXTERNALSYM PIMAGE_DEBUG_INFORMATION}
395
 
  _IMAGE_DEBUG_INFORMATION = record
396
 
    List: LIST_ENTRY;
397
 
    ReservedSize: DWORD;
398
 
    ReservedMappedBase: PVOID;
399
 
    ReservedMachine: USHORT;
400
 
    ReservedCharacteristics: USHORT;
401
 
    ReservedCheckSum: DWORD;
402
 
    ImageBase: DWORD;
403
 
    SizeOfImage: DWORD;
404
 
    ReservedNumberOfSections: DWORD;
405
 
    ReservedSections: PIMAGE_SECTION_HEADER;
406
 
    ReservedExportedNamesSize: DWORD;
407
 
    ReservedExportedNames: PSTR;
408
 
    ReservedNumberOfFunctionTableEntries: DWORD;
409
 
    ReservedFunctionTableEntries: PIMAGE_FUNCTION_ENTRY;
410
 
    ReservedLowestFunctionStartingAddress: DWORD;
411
 
    ReservedHighestFunctionEndingAddress: DWORD;
412
 
    ReservedNumberOfFpoTableEntries: DWORD;
413
 
    ReservedFpoTableEntries: PFPO_DATA;
414
 
    SizeOfCoffSymbols: DWORD;
415
 
    CoffSymbols: PIMAGE_COFF_SYMBOLS_HEADER;
416
 
    ReservedSizeOfCodeViewSymbols: DWORD;
417
 
    ReservedCodeViewSymbols: PVOID;
418
 
    ImageFilePath: PSTR;
419
 
    ImageFileName: PSTR;
420
 
    ReservedDebugFilePath: PSTR;
421
 
    ReservedTimeDateStamp: DWORD;
422
 
    ReservedRomImage: BOOL;
423
 
    ReservedDebugDirectory: PIMAGE_DEBUG_DIRECTORY;
424
 
    ReservedNumberOfDebugDirectories: DWORD;
425
 
    ReservedOriginalFunctionTableBaseAddress: DWORD;
426
 
    Reserved: array [0..1] of DWORD;
427
 
  end;
428
 
  {$EXTERNALSYM _IMAGE_DEBUG_INFORMATION}
429
 
  IMAGE_DEBUG_INFORMATION = _IMAGE_DEBUG_INFORMATION;
430
 
  {$EXTERNALSYM IMAGE_DEBUG_INFORMATION}
431
 
  TImageDebugInformation = IMAGE_DEBUG_INFORMATION;
432
 
  PImageDebugInformation = PIMAGE_DEBUG_INFORMATION;
433
 
 
434
 
function MapDebugInformation(FileHandle: HANDLE; FileName, SymbolPath: PSTR;
435
 
  ImageBase: DWORD): PIMAGE_DEBUG_INFORMATION; stdcall;
436
 
{$EXTERNALSYM MapDebugInformation}
437
 
 
438
 
function UnmapDebugInformation(DebugInfo: PIMAGE_DEBUG_INFORMATION): BOOL; stdcall;
439
 
{$EXTERNALSYM UnmapDebugInformation}
440
 
 
441
 
function SearchTreeForFile(RootPath, InputPathName, OutputPathBuffer: PSTR): BOOL; stdcall;
442
 
{$EXTERNALSYM SearchTreeForFile}
443
 
 
444
 
type
445
 
  PENUMDIRTREE_CALLBACK = function(FilePath: LPCSTR; CallerData: PVOID): BOOL; stdcall;
446
 
  {$EXTERNALSYM PENUMDIRTREE_CALLBACK}
447
 
  PEnumDirTreeCallback = PENUMDIRTREE_CALLBACK;
448
 
 
449
 
function EnumDirTree(hProcess: HANDLE; RootPath, InputPathName, OutputPathBuffer: PSTR;
450
 
  Callback: PENUMDIRTREE_CALLBACK; CallbackData: PVOID): BOOL; stdcall;
451
 
{$EXTERNALSYM EnumDirTree}
452
 
 
453
 
function MakeSureDirectoryPathExists(DirPath: PCSTR): BOOL; stdcall;
454
 
{$EXTERNALSYM MakeSureDirectoryPathExists}
455
 
 
456
 
//
457
 
// UnDecorateSymbolName Flags
458
 
//
459
 
 
460
 
const
461
 
  UNDNAME_COMPLETE               = $0000; // Enable full undecoration
462
 
  {$EXTERNALSYM UNDNAME_COMPLETE}
463
 
  UNDNAME_NO_LEADING_UNDERSCORES = $0001; // Remove leading underscores from MS extended keywords
464
 
  {$EXTERNALSYM UNDNAME_NO_LEADING_UNDERSCORES}
465
 
  UNDNAME_NO_MS_KEYWORDS         = $0002; // Disable expansion of MS extended keywords
466
 
  {$EXTERNALSYM UNDNAME_NO_MS_KEYWORDS}
467
 
  UNDNAME_NO_FUNCTION_RETURNS    = $0004; // Disable expansion of return type for primary declaration
468
 
  {$EXTERNALSYM UNDNAME_NO_FUNCTION_RETURNS}
469
 
  UNDNAME_NO_ALLOCATION_MODEL    = $0008; // Disable expansion of the declaration model
470
 
  {$EXTERNALSYM UNDNAME_NO_ALLOCATION_MODEL}
471
 
  UNDNAME_NO_ALLOCATION_LANGUAGE = $0010; // Disable expansion of the declaration language specifier
472
 
  {$EXTERNALSYM UNDNAME_NO_ALLOCATION_LANGUAGE}
473
 
  UNDNAME_NO_MS_THISTYPE         = $0020; // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
474
 
  {$EXTERNALSYM UNDNAME_NO_MS_THISTYPE}
475
 
  UNDNAME_NO_CV_THISTYPE         = $0040; // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
476
 
  {$EXTERNALSYM UNDNAME_NO_CV_THISTYPE}
477
 
  UNDNAME_NO_THISTYPE            = $0060; // Disable all modifiers on the 'this' type
478
 
  {$EXTERNALSYM UNDNAME_NO_THISTYPE}
479
 
  UNDNAME_NO_ACCESS_SPECIFIERS   = $0080; // Disable expansion of access specifiers for members
480
 
  {$EXTERNALSYM UNDNAME_NO_ACCESS_SPECIFIERS}
481
 
  UNDNAME_NO_THROW_SIGNATURES    = $0100; // Disable expansion of 'throw-signatures' for functions and pointers to functions
482
 
  {$EXTERNALSYM UNDNAME_NO_THROW_SIGNATURES}
483
 
  UNDNAME_NO_MEMBER_TYPE         = $0200; // Disable expansion of 'static' or 'virtual'ness of members
484
 
  {$EXTERNALSYM UNDNAME_NO_MEMBER_TYPE}
485
 
  UNDNAME_NO_RETURN_UDT_MODEL    = $0400; // Disable expansion of MS model for UDT returns
486
 
  {$EXTERNALSYM UNDNAME_NO_RETURN_UDT_MODEL}
487
 
  UNDNAME_32_BIT_DECODE          = $0800; // Undecorate 32-bit decorated names
488
 
  {$EXTERNALSYM UNDNAME_32_BIT_DECODE}
489
 
  UNDNAME_NAME_ONLY              = $1000; // Crack only the name for primary declaration;
490
 
  {$EXTERNALSYM UNDNAME_NAME_ONLY}
491
 
                                                                                                   //  return just [scope::]name.  Does expand template params
492
 
  UNDNAME_NO_ARGUMENTS    = $2000; // Don't undecorate arguments to function
493
 
  {$EXTERNALSYM UNDNAME_NO_ARGUMENTS}
494
 
  UNDNAME_NO_SPECIAL_SYMS = $4000; // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
495
 
  {$EXTERNALSYM UNDNAME_NO_SPECIAL_SYMS}
496
 
 
497
 
function UnDecorateSymbolName(DecoratedName: PCSTR; UnDecoratedName: PSTR;
498
 
  UndecoratedLength: DWORD; Flags: DWORD): DWORD; stdcall;
499
 
{$EXTERNALSYM UnDecorateSymbolName}
500
 
 
501
 
//
502
 
// these values are used for synthesized file types
503
 
// that can be passed in as image headers instead of
504
 
// the standard ones from ntimage.h
505
 
//
506
 
 
507
 
const
508
 
  DBHHEADER_DEBUGDIRS    = $1;
509
 
  {$EXTERNALSYM DBHHEADER_DEBUGDIRS}
510
 
 
511
 
type
512
 
  _MODLOAD_DATA = record
513
 
    ssize: DWORD;                  // size of this struct
514
 
    ssig: DWORD;                   // signature identifying the passed data
515
 
    data: PVOID;                   // pointer to passed data
516
 
    size: DWORD;                   // size of passed data
517
 
    flags: DWORD;                  // options
518
 
  end;
519
 
  {$EXTERNALSYM _MODLOAD_DATA}
520
 
  MODLOAD_DATA = _MODLOAD_DATA;
521
 
  {$EXTERNALSYM MODLOAD_DATA}
522
 
  PMODLOAD_DATA = ^MODLOAD_DATA;
523
 
  {$EXTERNALSYM PMODLOAD_DATA}
524
 
  TModLoadData = MODLOAD_DATA;
525
 
  PModLoadData = PMODLOAD_DATA;
526
 
 
527
 
//
528
 
// StackWalking API
529
 
//
530
 
 
531
 
type
532
 
  ADDRESS_MODE = (
533
 
    AddrMode1616,
534
 
    AddrMode1632,
535
 
    AddrModeReal,
536
 
    AddrModeFlat);
537
 
  {$EXTERNALSYM ADDRESS_MODE}
538
 
  TAddressMode = ADDRESS_MODE;
539
 
 
540
 
  LPADDRESS64 = ^ADDRESS64;
541
 
  {$EXTERNALSYM PADDRESS64}
542
 
  _tagADDRESS64 = record
543
 
    Offset: DWORD64;
544
 
    Segment: WORD;
545
 
    Mode: ADDRESS_MODE;
546
 
  end;
547
 
  {$EXTERNALSYM _tagADDRESS64}
548
 
  ADDRESS64 = _tagADDRESS64;
549
 
  {$EXTERNALSYM ADDRESS64}
550
 
  TAddress64 = ADDRESS64;
551
 
  PAddress64 = LPADDRESS64;
552
 
 
553
 
  LPADDRESS = ^ADDRESS;
554
 
  {$EXTERNALSYM PADDRESS}
555
 
  _tagADDRESS = record
556
 
    Offset: DWORD;
557
 
    Segment: WORD;
558
 
    Mode: ADDRESS_MODE;
559
 
  end;
560
 
  {$EXTERNALSYM _tagADDRESS}
561
 
  ADDRESS = _tagADDRESS;
562
 
  {$EXTERNALSYM ADDRESS}
563
 
  TAddress = ADDRESS;
564
 
  PAddress = LPADDRESS;
565
 
 
566
 
procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64);
567
 
{$EXTERNALSYM Address32To64}
568
 
 
569
 
procedure Address64To32(a64: LPADDRESS64; a32: LPADDRESS);
570
 
{$EXTERNALSYM Address64To32}
571
 
 
572
 
//
573
 
// This structure is included in the STACKFRAME structure,
574
 
// and is used to trace through usermode callbacks in a thread's
575
 
// kernel stack.  The values must be copied by the kernel debugger
576
 
// from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets.
577
 
//
578
 
 
579
 
//
580
 
// New KDHELP structure for 64 bit system support.
581
 
// This structure is preferred in new code.
582
 
//
583
 
 
584
 
type
585
 
  PKDHELP64 = ^KDHELP64;
586
 
  {$EXTERNALSYM PKDHELP64}
587
 
  _KDHELP64 = record
588
 
    //
589
 
    // address of kernel thread object, as provided in the
590
 
    // WAIT_STATE_CHANGE packet.
591
 
    //
592
 
    Thread: DWORD64;
593
 
    //
594
 
    // offset in thread object to pointer to the current callback frame
595
 
    // in kernel stack.
596
 
    //
597
 
    ThCallbackStack: DWORD;
598
 
    //
599
 
    // offset in thread object to pointer to the current callback backing
600
 
    // store frame in kernel stack.
601
 
    //
602
 
    ThCallbackBStore: DWORD;
603
 
    //
604
 
    // offsets to values in frame:
605
 
    //
606
 
    // address of next callback frame
607
 
    NextCallback: DWORD;
608
 
    // address of saved frame pointer (if applicable)
609
 
    FramePointer: DWORD;
610
 
    //
611
 
    // Address of the kernel function that calls out to user mode
612
 
    //
613
 
    KiCallUserMode: DWORD64;
614
 
    //
615
 
    // Address of the user mode dispatcher function
616
 
    //
617
 
    KeUserCallbackDispatcher: DWORD64;
618
 
    //
619
 
    // Lowest kernel mode address
620
 
    //
621
 
    SystemRangeStart: DWORD64;
622
 
    Reserved: array [0..7] of DWORD64;
623
 
  end;
624
 
  {$EXTERNALSYM _KDHELP64}
625
 
  KDHELP64 = _KDHELP64;
626
 
  {$EXTERNALSYM KDHELP64}
627
 
  TKdHelp64 = KDHELP64;
628
 
  //PKdHelp64 = PKDHELP64;
629
 
 
630
 
  PKDHELP = ^KDHELP;
631
 
  {$EXTERNALSYM PKDHELP}
632
 
  _KDHELP = record
633
 
    //
634
 
    // address of kernel thread object, as provided in the
635
 
    // WAIT_STATE_CHANGE packet.
636
 
    //
637
 
    Thread: DWORD;
638
 
    //
639
 
    // offset in thread object to pointer to the current callback frame
640
 
    // in kernel stack.
641
 
    //
642
 
    ThCallbackStack: DWORD;
643
 
    //
644
 
    // offsets to values in frame:
645
 
    //
646
 
    // address of next callback frame
647
 
    NextCallback: DWORD;
648
 
    // address of saved frame pointer (if applicable)
649
 
    FramePointer: DWORD;
650
 
    //
651
 
    // Address of the kernel function that calls out to user mode
652
 
    //
653
 
    KiCallUserMode: DWORD;
654
 
    //
655
 
    // Address of the user mode dispatcher function
656
 
    //
657
 
    KeUserCallbackDispatcher: DWORD;
658
 
    //
659
 
    // Lowest kernel mode address
660
 
    //
661
 
    SystemRangeStart: DWORD;
662
 
    //
663
 
    // offset in thread object to pointer to the current callback backing
664
 
    // store frame in kernel stack.
665
 
    //
666
 
    ThCallbackBStore: DWORD;
667
 
    Reserved: array [0..7] of DWORD;
668
 
  end;
669
 
  {$EXTERNALSYM _KDHELP}
670
 
  KDHELP = _KDHELP;
671
 
  {$EXTERNALSYM KDHELP}
672
 
  TKdHelp = KDHELP;
673
 
  //PKdHelp = PKDHELP;
674
 
 
675
 
procedure KdHelp32To64(p32: PKDHELP; p64: PKDHELP64);
676
 
{$EXTERNALSYM KdHelp32To64}
677
 
 
678
 
type
679
 
  LPSTACKFRAME64 = ^STACKFRAME64;
680
 
  {$EXTERNALSYM LPSTACKFRAME64}
681
 
  _tagSTACKFRAME64 = record
682
 
    AddrPC: ADDRESS64; // program counter
683
 
    AddrReturn: ADDRESS64; // return address
684
 
    AddrFrame: ADDRESS64; // frame pointer
685
 
    AddrStack: ADDRESS64; // stack pointer
686
 
    AddrBStore: ADDRESS64; // backing store pointer
687
 
    FuncTableEntry: PVOID; // pointer to pdata/fpo or NULL
688
 
    Params: array [0..3] of DWORD64; // possible arguments to the function
689
 
    Far: BOOL; // WOW far call
690
 
    Virtual: BOOL; // is this a virtual frame?
691
 
    Reserved: array [0..2] of DWORD64;
692
 
    KdHelp: KDHELP64;
693
 
  end;
694
 
  {$EXTERNALSYM _tagSTACKFRAME64}
695
 
  STACKFRAME64 = _tagSTACKFRAME64;
696
 
  {$EXTERNALSYM STACKFRAME64}
697
 
  TStackFrame64 = STACKFRAME64;
698
 
  PStackFrame64 = LPSTACKFRAME64;
699
 
 
700
 
  LPSTACKFRAME = ^STACKFRAME;
701
 
  {$EXTERNALSYM LPSTACKFRAME}
702
 
  _tagSTACKFRAME = record
703
 
    AddrPC: ADDRESS; // program counter
704
 
    AddrReturn: ADDRESS; // return address
705
 
    AddrFrame: ADDRESS; // frame pointer
706
 
    AddrStack: ADDRESS; // stack pointer
707
 
    FuncTableEntry: PVOID; // pointer to pdata/fpo or NULL
708
 
    Params: array [0..3] of DWORD; // possible arguments to the function
709
 
    Far: BOOL; // WOW far call
710
 
    Virtual: BOOL; // is this a virtual frame?
711
 
    Reserved: array [0..2] of DWORD;
712
 
    KdHelp: KDHELP;
713
 
    AddrBStore: ADDRESS; // backing store pointer
714
 
  end;
715
 
  {$EXTERNALSYM _tagSTACKFRAME}
716
 
  STACKFRAME = _tagSTACKFRAME;
717
 
  {$EXTERNALSYM STACKFRAME}
718
 
  TStackFrame = STACKFRAME;
719
 
  PStackFrame = LPSTACKFRAME;
720
 
 
721
 
  PREAD_PROCESS_MEMORY_ROUTINE64 = function(hProcess: HANDLE; qwBaseAddress: DWORD64;
722
 
    lpBuffer: PVOID; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
723
 
  {$EXTERNALSYM PREAD_PROCESS_MEMORY_ROUTINE64}
724
 
  PReadProcessMemoryRoutine64 = PREAD_PROCESS_MEMORY_ROUTINE64;
725
 
 
726
 
  PFUNCTION_TABLE_ACCESS_ROUTINE64 = function(hProcess: HANDLE;
727
 
    AddrBase: DWORD64): PVOID; stdcall;
728
 
  {$EXTERNALSYM PFUNCTION_TABLE_ACCESS_ROUTINE64}
729
 
  PFunctionTableAccessRoutine64 = PFUNCTION_TABLE_ACCESS_ROUTINE64;
730
 
 
731
 
  PGET_MODULE_BASE_ROUTINE64 = function(hProcess: HANDLE;
732
 
    Address: DWORD64): DWORD64; stdcall;
733
 
  {$EXTERNALSYM PGET_MODULE_BASE_ROUTINE64}
734
 
  PGetModuleBaseRoutine64 = PGET_MODULE_BASE_ROUTINE64;
735
 
 
736
 
  PTRANSLATE_ADDRESS_ROUTINE64 = function(hProcess: HANDLE; hThread: HANDLE;
737
 
    const lpaddr: ADDRESS64): DWORD64; stdcall;
738
 
  {$EXTERNALSYM PTRANSLATE_ADDRESS_ROUTINE64}
739
 
  PTranslateAddressRoutine64 = PTRANSLATE_ADDRESS_ROUTINE64;
740
 
 
741
 
function StackWalk64(MachineType: DWORD; hProcess: HANDLE; hThread: HANDLE;
742
 
  var StackFrame: STACKFRAME64; ContextRecord: PVOID;
743
 
  ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64;
744
 
  FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64;
745
 
  GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64;
746
 
  TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64): BOOL; stdcall;
747
 
{$EXTERNALSYM StackWalk64}
748
 
 
749
 
type
750
 
  PREAD_PROCESS_MEMORY_ROUTINE = function(hProcess: HANDLE;
751
 
    lpBaseAddress: DWORD; lpBuffer: PVOID; nSize: DWORD;
752
 
    var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
753
 
  {$EXTERNALSYM PREAD_PROCESS_MEMORY_ROUTINE}
754
 
  PreadProcessMemoryRoutine = PREAD_PROCESS_MEMORY_ROUTINE;
755
 
 
756
 
  PFUNCTION_TABLE_ACCESS_ROUTINE = function(hProcess: HANDLE; AddrBase: DWORD): PVOID; stdcall;
757
 
  {$EXTERNALSYM PFUNCTION_TABLE_ACCESS_ROUTINE}
758
 
  PFunctionTableAccessRoutine = PFUNCTION_TABLE_ACCESS_ROUTINE;
759
 
 
760
 
  PGET_MODULE_BASE_ROUTINE = function(hProcess: HANDLE; Address: DWORD): DWORD; stdcall;
761
 
  {$EXTERNALSYM PGET_MODULE_BASE_ROUTINE}
762
 
  PGetModuleBaseRoutine = PGET_MODULE_BASE_ROUTINE;
763
 
 
764
 
  PTRANSLATE_ADDRESS_ROUTINE = function(hProcess: HANDLE; hThread: HANDLE;
765
 
    const lpaddr: ADDRESS): DWORD; stdcall;
766
 
  {$EXTERNALSYM PTRANSLATE_ADDRESS_ROUTINE}
767
 
  PTranslateAddressRoutine = PTRANSLATE_ADDRESS_ROUTINE;
768
 
 
769
 
function StackWalk(MachineType: DWORD; hProcess: HANDLE; hThread: HANDLE;
770
 
  var StackFrame: STACKFRAME; ContextRecord: PVOID;
771
 
  ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE;
772
 
  FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE;
773
 
  GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE;
774
 
  TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE): BOOL; stdcall;
775
 
{$EXTERNALSYM StackWalk}
776
 
 
777
 
const
778
 
  API_VERSION_NUMBER = 9;
779
 
  {$EXTERNALSYM API_VERSION_NUMBER}
780
 
 
781
 
type
782
 
  LPAPI_VERSION = ^API_VERSION;
783
 
  {$EXTERNALSYM LPAPI_VERSION}
784
 
  API_VERSION = record
785
 
    MajorVersion: USHORT;
786
 
    MinorVersion: USHORT;
787
 
    Revision: USHORT;
788
 
    Reserved: USHORT;
789
 
  end;
790
 
  {$EXTERNALSYM API_VERSION}
791
 
  TApiVersion = API_VERSION;
792
 
  PApiVersion = LPAPI_VERSION;
793
 
 
794
 
function ImagehlpApiVersion: LPAPI_VERSION; stdcall;
795
 
{$EXTERNALSYM ImagehlpApiVersion}
796
 
 
797
 
function ImagehlpApiVersionEx(const AppVersion: API_VERSION): LPAPI_VERSION; stdcall;
798
 
{$EXTERNALSYM ImagehlpApiVersionEx}
799
 
 
800
 
function GetTimestampForLoadedLibrary(Module: HMODULE): DWORD; stdcall;
801
 
{$EXTERNALSYM GetTimestampForLoadedLibrary}
802
 
 
803
 
//
804
 
// typedefs for function pointers
805
 
//
806
 
 
807
 
type
808
 
  PSYM_ENUMMODULES_CALLBACK64 = function(ModuleName: PSTR; BaseOfDll: DWORD64;
809
 
    UserContext: PVOID): BOOL; stdcall;
810
 
  {$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK64}
811
 
  PSymEnummodulesCallback64 = PSYM_ENUMMODULES_CALLBACK64;
812
 
 
813
 
  PSYM_ENUMSYMBOLS_CALLBACK64 = function(SymbolName: PSTR; SymbolAddress: DWORD64;
814
 
    SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
815
 
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64}
816
 
  PSymEnumsymbolsCallback64 = PSYM_ENUMSYMBOLS_CALLBACK64;
817
 
 
818
 
  PSYM_ENUMSYMBOLS_CALLBACK64W = function(SymbolName: PWSTR;
819
 
    SymbolAddress: DWORD64; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
820
 
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64W}
821
 
  PSymEnumsymbolsCallback64w = PSYM_ENUMSYMBOLS_CALLBACK64W;
822
 
 
823
 
  PENUMLOADED_MODULES_CALLBACK64 = function(ModuleName: PSTR;
824
 
    ModuleBase: DWORD64; ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall;
825
 
  {$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK64}
826
 
  PSnumloadedModulesCallback64 = PENUMLOADED_MODULES_CALLBACK64;
827
 
 
828
 
  PSYMBOL_REGISTERED_CALLBACK64 = function(hProcess: HANDLE; ActionCode: ULONG;
829
 
    CallbackData: ULONG64; UserContext: ULONG64): BOOL; stdcall;
830
 
  {$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK64}
831
 
  PSymbolRegisteredCallback64 = PSYMBOL_REGISTERED_CALLBACK64;
832
 
 
833
 
  PSYMBOL_FUNCENTRY_CALLBACK = function(hProcess: HANDLE; AddrBase: DWORD;
834
 
    UserContext: PVOID): PVOID; stdcall;
835
 
  {$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK}
836
 
  PSymbolFuncentryCallback = PSYMBOL_FUNCENTRY_CALLBACK;
837
 
 
838
 
  PSYMBOL_FUNCENTRY_CALLBACK64 = function(hProcess: HANDLE; AddrBase: ULONG64;
839
 
    UserContext: ULONG64): PVOID; stdcall;
840
 
  {$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK64}
841
 
  PSymbolFuncentryCallback64 = PSYMBOL_FUNCENTRY_CALLBACK64;
842
 
 
843
 
  PSYM_ENUMMODULES_CALLBACK = function(ModuleName: PSTR; BaseOfDll: ULONG;
844
 
    UserContext: PVOID): BOOL; stdcall;
845
 
  {$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK}
846
 
  PSymEnummodulesCallback = PSYM_ENUMMODULES_CALLBACK;
847
 
 
848
 
  PSYM_ENUMSYMBOLS_CALLBACK = function(SymbolName: PSTR; SymbolAddress: ULONG;
849
 
    SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
850
 
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK}
851
 
  PSymEnumsymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK;
852
 
 
853
 
  PSYM_ENUMSYMBOLS_CALLBACKW = function(SymbolName: PWSTR; SymbolAddress: ULONG;
854
 
    SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
855
 
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACKW}
856
 
  PSymEnumsymbolsCallbackw = PSYM_ENUMSYMBOLS_CALLBACKW;
857
 
 
858
 
  PENUMLOADED_MODULES_CALLBACK = function(ModuleName: PSTR; ModuleBase: ULONG;
859
 
    ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall;
860
 
  {$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK}
861
 
  PEnumloadedModulesCallback = PENUMLOADED_MODULES_CALLBACK;
862
 
 
863
 
  PSYMBOL_REGISTERED_CALLBACK = function(hProcess: HANDLE; ActionCode: ULONG;
864
 
    CallbackData: PVOID; UserContext: PVOID): BOOL; stdcall;
865
 
  {$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK}
866
 
  PSymbolRegisteredCallback = PSYMBOL_REGISTERED_CALLBACK;
867
 
 
868
 
//
869
 
// flags found in SYMBOL_INFO.Flags
870
 
//
871
 
 
872
 
const
873
 
  SYMFLAG_VALUEPRESENT   = $00000001;
874
 
  {$EXTERNALSYM SYMFLAG_VALUEPRESENT}
875
 
  SYMFLAG_REGISTER       = $00000008;
876
 
  {$EXTERNALSYM SYMFLAG_REGISTER}
877
 
  SYMFLAG_REGREL         = $00000010;
878
 
  {$EXTERNALSYM SYMFLAG_REGREL}
879
 
  SYMFLAG_FRAMEREL       = $00000020;
880
 
  {$EXTERNALSYM SYMFLAG_FRAMEREL}
881
 
  SYMFLAG_PARAMETER      = $00000040;
882
 
  {$EXTERNALSYM SYMFLAG_PARAMETER}
883
 
  SYMFLAG_LOCAL          = $00000080;
884
 
  {$EXTERNALSYM SYMFLAG_LOCAL}
885
 
  SYMFLAG_CONSTANT       = $00000100;
886
 
  {$EXTERNALSYM SYMFLAG_CONSTANT}
887
 
  SYMFLAG_EXPORT         = $00000200;
888
 
  {$EXTERNALSYM SYMFLAG_EXPORT}
889
 
  SYMFLAG_FORWARDER      = $00000400;
890
 
  {$EXTERNALSYM SYMFLAG_FORWARDER}
891
 
  SYMFLAG_FUNCTION       = $00000800;
892
 
  {$EXTERNALSYM SYMFLAG_FUNCTION}
893
 
  SYMFLAG_VIRTUAL        = $00001000;
894
 
  {$EXTERNALSYM SYMFLAG_VIRTUAL}
895
 
  SYMFLAG_THUNK          = $00002000;
896
 
  {$EXTERNALSYM SYMFLAG_THUNK}
897
 
  SYMFLAG_TLSREL         = $00004000;
898
 
  {$EXTERNALSYM SYMFLAG_TLSREL}
899
 
 
900
 
//
901
 
// symbol type enumeration
902
 
//
903
 
 
904
 
type
905
 
  SYM_TYPE = (
906
 
    SymNone,
907
 
    SymCoff,
908
 
    SymCv,
909
 
    SymPdb,
910
 
    SymExport,
911
 
    SymDeferred,
912
 
    SymSym,                   // .sym file
913
 
    SymDia,
914
 
    SymVirtual,
915
 
    NumSymTypes);
916
 
  {$EXTERNALSYM SYM_TYPE}
917
 
  TSymType = SYM_TYPE;
918
 
 
919
 
//
920
 
// symbol data structure
921
 
//
922
 
 
923
 
  PIMAGEHLP_SYMBOL64 = ^IMAGEHLP_SYMBOL64;
924
 
  {$EXTERNALSYM PIMAGEHLP_SYMBOL64}
925
 
  _IMAGEHLP_SYMBOL64 = record
926
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL64)
927
 
    Address: DWORD64; // virtual address including dll base address
928
 
    Size: DWORD; // estimated size of symbol, can be zero
929
 
    Flags: DWORD; // info about the symbols, see the SYMF defines
930
 
    MaxNameLength: DWORD; // maximum size of symbol name in 'Name'
931
 
    Name: array [0..0] of CHAR; // symbol name (null terminated string)
932
 
  end;
933
 
  {$EXTERNALSYM _IMAGEHLP_SYMBOL64}
934
 
  IMAGEHLP_SYMBOL64 = _IMAGEHLP_SYMBOL64;
935
 
  {$EXTERNALSYM IMAGEHLP_SYMBOL64}
936
 
  TImageHlpSymbol64 = IMAGEHLP_SYMBOL64;
937
 
  PImageHlpSymbol64 = PIMAGEHLP_SYMBOL64;
938
 
 
939
 
  _IMAGEHLP_SYMBOL64_PACKAGE = record
940
 
    sym: IMAGEHLP_SYMBOL64;
941
 
    name: array [0..MAX_SYM_NAME] of CHAR;
942
 
  end;
943
 
  {$EXTERNALSYM _IMAGEHLP_SYMBOL64_PACKAGE}
944
 
  IMAGEHLP_SYMBOL64_PACKAGE = _IMAGEHLP_SYMBOL64_PACKAGE;
945
 
  {$EXTERNALSYM IMAGEHLP_SYMBOL64_PACKAGE}
946
 
  PIMAGEHLP_SYMBOL64_PACKAGE = ^IMAGEHLP_SYMBOL64_PACKAGE;
947
 
  {$EXTERNALSYM PIMAGEHLP_SYMBOL64_PACKAGE}
948
 
  TImageHlpSymbol64Package = IMAGEHLP_SYMBOL64_PACKAGE;
949
 
  PImageHlpSymbol64Package = PIMAGEHLP_SYMBOL64_PACKAGE;  
950
 
 
951
 
//#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
952
 
//
953
 
//#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
954
 
//#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
955
 
//#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
956
 
//#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
957
 
//
958
 
//#else
959
 
 
960
 
  PIMAGEHLP_SYMBOL = ^IMAGEHLP_SYMBOL;
961
 
  {$EXTERNALSYM PIMAGEHLP_SYMBOL}
962
 
  _IMAGEHLP_SYMBOL = record
963
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL)
964
 
    Address: DWORD; // virtual address including dll base address
965
 
    Size: DWORD; // estimated size of symbol, can be zero
966
 
    Flags: DWORD; // info about the symbols, see the SYMF defines
967
 
    MaxNameLength: DWORD; // maximum size of symbol name in 'Name'
968
 
    Name: array [0..0] of CHAR; // symbol name (null terminated string)
969
 
  end;
970
 
  {$EXTERNALSYM _IMAGEHLP_SYMBOL}
971
 
  IMAGEHLP_SYMBOL = _IMAGEHLP_SYMBOL;
972
 
  {$EXTERNALSYM IMAGEHLP_SYMBOL}
973
 
  TImageHlpSymbol = IMAGEHLP_SYMBOL;
974
 
  PImageHlpSymbol = PIMAGEHLP_SYMBOL;
975
 
 
976
 
  _IMAGEHLP_SYMBOL_PACKAGE = record
977
 
    sym: IMAGEHLP_SYMBOL;
978
 
    name: array [0..MAX_SYM_NAME] of CHAR;
979
 
  end;
980
 
  {$EXTERNALSYM _IMAGEHLP_SYMBOL_PACKAGE}
981
 
  IMAGEHLP_SYMBOL_PACKAGE = _IMAGEHLP_SYMBOL_PACKAGE;
982
 
  {$EXTERNALSYM IMAGEHLP_SYMBOL_PACKAGE}
983
 
  PIMAGEHLP_SYMBOL_PACKAGE = ^IMAGEHLP_SYMBOL_PACKAGE;
984
 
  {$EXTERNALSYM PIMAGEHLP_SYMBOL_PACKAGE}
985
 
  TImageHlpSymbolPackage = IMAGEHLP_SYMBOL_PACKAGE;
986
 
  PImageHlpSymbolPackage = PIMAGEHLP_SYMBOL_PACKAGE;
987
 
 
988
 
//#endif
989
 
 
990
 
//
991
 
// module data structure
992
 
//
993
 
 
994
 
  PIMAGEHLP_MODULE64 = ^IMAGEHLP_MODULE64;
995
 
  {$EXTERNALSYM PIMAGEHLP_MODULE64}
996
 
  _IMAGEHLP_MODULE64 = record
997
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64)
998
 
    BaseOfImage: DWORD64; // base load address of module
999
 
    ImageSize: DWORD; // virtual size of the loaded module
1000
 
    TimeDateStamp: DWORD; // date/time stamp from pe header
1001
 
    CheckSum: DWORD; // checksum from the pe header
1002
 
    NumSyms: DWORD; // number of symbols in the symbol table
1003
 
    SymType: SYM_TYPE; // type of symbols loaded
1004
 
    ModuleName: array [0..3] of CHAR; // module name
1005
 
    ImageName: array [0..255] of CHAR; // image name
1006
 
    LoadedImageName: array [0..255] of CHAR; // symbol file name
1007
 
  end;
1008
 
  {$EXTERNALSYM _IMAGEHLP_MODULE64}
1009
 
  IMAGEHLP_MODULE64 = _IMAGEHLP_MODULE64;
1010
 
  {$EXTERNALSYM IMAGEHLP_MODULE64}
1011
 
  TImageHlpModule64 = IMAGEHLP_MODULE64;
1012
 
  PImageHlpModule64 = PIMAGEHLP_MODULE64;
1013
 
 
1014
 
  PIMAGEHLP_MODULEW64 = ^IMAGEHLP_MODULEW64;
1015
 
  {$EXTERNALSYM PIMAGEHLP_MODULEW64}
1016
 
  _IMAGEHLP_MODULE64W = record
1017
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64)
1018
 
    BaseOfImage: DWORD64; // base load address of module
1019
 
    ImageSize: DWORD; // virtual size of the loaded module
1020
 
    TimeDateStamp: DWORD; // date/time stamp from pe header
1021
 
    CheckSum: DWORD; // checksum from the pe header
1022
 
    NumSyms: DWORD; // number of symbols in the symbol table
1023
 
    SymType: SYM_TYPE; // type of symbols loaded
1024
 
    ModuleName: array [0..31] of WCHAR; // module name
1025
 
    ImageName: array [0..255] of WCHAR; // image name
1026
 
    LoadedImageName: array [0..255] of WCHAR; // symbol file name
1027
 
  end;
1028
 
  {$EXTERNALSYM _IMAGEHLP_MODULE64W}
1029
 
  IMAGEHLP_MODULEW64 = _IMAGEHLP_MODULE64W;
1030
 
  {$EXTERNALSYM IMAGEHLP_MODULEW64}
1031
 
  TImageHlpModuleW64 = IMAGEHLP_MODULEW64;
1032
 
  PImageHlpModuleW64 = PIMAGEHLP_MODULEW64;
1033
 
 
1034
 
  PIMAGEHLP_MODULE = ^IMAGEHLP_MODULE;
1035
 
  {$EXTERNALSYM PIMAGEHLP_MODULE}
1036
 
  _IMAGEHLP_MODULE = record
1037
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE)
1038
 
    BaseOfImage: DWORD; // base load address of module
1039
 
    ImageSize: DWORD; // virtual size of the loaded module
1040
 
    TimeDateStamp: DWORD; // date/time stamp from pe header
1041
 
    CheckSum: DWORD; // checksum from the pe header
1042
 
    NumSyms: DWORD; // number of symbols in the symbol table
1043
 
    SymType: SYM_TYPE; // type of symbols loaded
1044
 
    ModuleName: array [0..31] of CHAR; // module name
1045
 
    ImageName: array [0..255] of CHAR; // image name
1046
 
    LoadedImageName: array [0..255] of CHAR; // symbol file name
1047
 
  end;
1048
 
  {$EXTERNALSYM _IMAGEHLP_MODULE}
1049
 
  IMAGEHLP_MODULE = _IMAGEHLP_MODULE;
1050
 
  {$EXTERNALSYM IMAGEHLP_MODULE}
1051
 
  TImageHlpModule = IMAGEHLP_MODULE;
1052
 
  PImageHlpModule = PIMAGEHLP_MODULE;
1053
 
 
1054
 
  PIMAGEHLP_MODULEW = ^IMAGEHLP_MODULEW;
1055
 
  {$EXTERNALSYM PIMAGEHLP_MODULEW}
1056
 
  _IMAGEHLP_MODULEW = record
1057
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE)
1058
 
    BaseOfImage: DWORD; // base load address of module
1059
 
    ImageSize: DWORD; // virtual size of the loaded module
1060
 
    TimeDateStamp: DWORD; // date/time stamp from pe header
1061
 
    CheckSum: DWORD; // checksum from the pe header
1062
 
    NumSyms: DWORD; // number of symbols in the symbol table
1063
 
    SymType: SYM_TYPE; // type of symbols loaded
1064
 
    ModuleName: array [0..31] of WCHAR; // module name
1065
 
    ImageName: array [0..255] of WCHAR; // image name
1066
 
    LoadedImageName: array [0..255] of WCHAR; // symbol file name
1067
 
  end;
1068
 
  {$EXTERNALSYM _IMAGEHLP_MODULEW}
1069
 
  IMAGEHLP_MODULEW = _IMAGEHLP_MODULEW;
1070
 
  {$EXTERNALSYM IMAGEHLP_MODULEW}
1071
 
  TImageHlpModuleW = IMAGEHLP_MODULEW;
1072
 
  PImageHlpModuleW = PIMAGEHLP_MODULEW;
1073
 
 
1074
 
//
1075
 
// source file line data structure
1076
 
//
1077
 
 
1078
 
  PIMAGEHLP_LINE64 = ^IMAGEHLP_LINE64;
1079
 
  {$EXTERNALSYM PIMAGEHLP_LINE64}
1080
 
  _IMAGEHLP_LINE64 = record
1081
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE64)
1082
 
    Key: PVOID; // internal
1083
 
    LineNumber: DWORD; // line number in file
1084
 
    FileName: PCHAR; // full filename
1085
 
    Address: DWORD64; // first instruction of line
1086
 
  end;
1087
 
  {$EXTERNALSYM _IMAGEHLP_LINE64}
1088
 
  IMAGEHLP_LINE64 = _IMAGEHLP_LINE64;
1089
 
  {$EXTERNALSYM IMAGEHLP_LINE64}
1090
 
  TImageHlpLine64 = IMAGEHLP_LINE64;
1091
 
  PImageHlpLine64 = PIMAGEHLP_LINE64;
1092
 
 
1093
 
  PIMAGEHLP_LINE = ^IMAGEHLP_LINE;
1094
 
  {$EXTERNALSYM PIMAGEHLP_LINE}
1095
 
  _IMAGEHLP_LINE = record
1096
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
1097
 
    Key: PVOID; // internal
1098
 
    LineNumber: DWORD; // line number in file
1099
 
    FileName: PCHAR; // full filename
1100
 
    Address: DWORD; // first instruction of line
1101
 
  end;
1102
 
  {$EXTERNALSYM _IMAGEHLP_LINE}
1103
 
  IMAGEHLP_LINE = _IMAGEHLP_LINE;
1104
 
  {$EXTERNALSYM IMAGEHLP_LINE}
1105
 
  TImageHlpLine = IMAGEHLP_LINE;
1106
 
  PImageHlpLine = PIMAGEHLP_LINE;
1107
 
 
1108
 
//
1109
 
// source file structure
1110
 
//
1111
 
 
1112
 
type
1113
 
  _SOURCEFILE = record
1114
 
    ModBase: DWORD64;                // base address of loaded module
1115
 
    FileName: PCHAR;                 // full filename of source
1116
 
  end;
1117
 
  {$EXTERNALSYM _SOURCEFILE}
1118
 
  SOURCEFILE = _SOURCEFILE;
1119
 
  {$EXTERNALSYM SOURCEFILE}
1120
 
  PSOURCEFILE = ^SOURCEFILE;
1121
 
  {$EXTERNALSYM PSOURCEFILE}
1122
 
  TSourceFile = SOURCEFILE;
1123
 
 
1124
 
//
1125
 
// data structures used for registered symbol callbacks
1126
 
//
1127
 
 
1128
 
const
1129
 
  CBA_DEFERRED_SYMBOL_LOAD_START    = $00000001;
1130
 
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_START}
1131
 
  CBA_DEFERRED_SYMBOL_LOAD_COMPLETE = $00000002;
1132
 
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_COMPLETE}
1133
 
  CBA_DEFERRED_SYMBOL_LOAD_FAILURE  = $00000003;
1134
 
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_FAILURE}
1135
 
  CBA_SYMBOLS_UNLOADED              = $00000004;
1136
 
  {$EXTERNALSYM CBA_SYMBOLS_UNLOADED}
1137
 
  CBA_DUPLICATE_SYMBOL              = $00000005;
1138
 
  {$EXTERNALSYM CBA_DUPLICATE_SYMBOL}
1139
 
  CBA_READ_MEMORY                   = $00000006;
1140
 
  {$EXTERNALSYM CBA_READ_MEMORY}
1141
 
  CBA_DEFERRED_SYMBOL_LOAD_CANCEL   = $00000007;
1142
 
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_CANCEL}
1143
 
  CBA_SET_OPTIONS                   = $00000008;
1144
 
  {$EXTERNALSYM CBA_SET_OPTIONS}
1145
 
  CBA_EVENT                         = $00000010;
1146
 
  {$EXTERNALSYM CBA_EVENT}
1147
 
  CBA_DEFERRED_SYMBOL_LOAD_PARTIAL  = $00000020;
1148
 
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_PARTIAL}
1149
 
  CBA_DEBUG_INFO                    = $10000000;
1150
 
  {$EXTERNALSYM CBA_DEBUG_INFO}
1151
 
 
1152
 
type
1153
 
  PIMAGEHLP_CBA_READ_MEMORY = ^IMAGEHLP_CBA_READ_MEMORY;
1154
 
  {$EXTERNALSYM PIMAGEHLP_CBA_READ_MEMORY}
1155
 
  _IMAGEHLP_CBA_READ_MEMORY = record
1156
 
    addr: DWORD64; // address to read from
1157
 
    buf: PVOID; // buffer to read to
1158
 
    bytes: DWORD; // amount of bytes to read
1159
 
    bytesread: LPDWORD; // pointer to store amount of bytes read
1160
 
  end;
1161
 
  {$EXTERNALSYM _IMAGEHLP_CBA_READ_MEMORY}
1162
 
  IMAGEHLP_CBA_READ_MEMORY = _IMAGEHLP_CBA_READ_MEMORY;
1163
 
  {$EXTERNALSYM IMAGEHLP_CBA_READ_MEMORY}
1164
 
  TImageHlpCbaReadMemory = IMAGEHLP_CBA_READ_MEMORY;
1165
 
  PImageHlpCbaReadMemory = PIMAGEHLP_CBA_READ_MEMORY;
1166
 
 
1167
 
const
1168
 
  sevInfo    = 0;
1169
 
  {$EXTERNALSYM sevInfo}
1170
 
  sevProblem = 1;
1171
 
  {$EXTERNALSYM sevProblem}
1172
 
  sevAttn    = 2;
1173
 
  {$EXTERNALSYM sevAttn}
1174
 
  sevFatal   = 3;
1175
 
  {$EXTERNALSYM sevFatal}
1176
 
  sevMax     = 4; // unused
1177
 
  {$EXTERNALSYM sevMax}
1178
 
 
1179
 
type
1180
 
  _IMAGEHLP_CBA_EVENT = record
1181
 
    severity: DWORD;                                     // values from sevInfo to sevFatal
1182
 
    code: DWORD;                                         // numerical code IDs the error
1183
 
    desc: PCHAR;                                         // may contain a text description of the error
1184
 
    object_: PVOID;                                      // value dependant upon the error code
1185
 
  end;
1186
 
  {$EXTERNALSYM _IMAGEHLP_CBA_EVENT}
1187
 
  IMAGEHLP_CBA_EVENT = _IMAGEHLP_CBA_EVENT;
1188
 
  {$EXTERNALSYM IMAGEHLP_CBA_EVENT}
1189
 
  PIMAGEHLP_CBA_EVENT = ^IMAGEHLP_CBA_EVENT;
1190
 
  {$EXTERNALSYM PIMAGEHLP_CBA_EVENT}
1191
 
  TImageHlpCbaEvent = IMAGEHLP_CBA_EVENT;
1192
 
  PImageHlpCbaEvent = PIMAGEHLP_CBA_EVENT;
1193
 
 
1194
 
  PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
1195
 
  {$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD64}
1196
 
  _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = record
1197
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64)
1198
 
    BaseOfImage: DWORD64; // base load address of module
1199
 
    CheckSum: DWORD; // checksum from the pe header
1200
 
    TimeDateStamp: DWORD; // date/time stamp from pe header
1201
 
    FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name
1202
 
    Reparse: ByteBool; // load failure reparse
1203
 
    hFile: HANDLE; // file handle, if passed
1204
 
    Flags: DWORD; //
1205
 
  end;
1206
 
  {$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD64}
1207
 
  IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = _IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
1208
 
  {$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD64}
1209
 
  TImageHlpDeferredSymbolLoad64 = IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
1210
 
  PImageHlpDeferredSymbolLoad64 = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
1211
 
 
1212
 
const
1213
 
  DSLFLAG_MISMATCHED_PDB = $1;
1214
 
  {$EXTERNALSYM DSLFLAG_MISMATCHED_PDB}
1215
 
  DSLFLAG_MISMATCHED_DBG = $2;
1216
 
  {$EXTERNALSYM DSLFLAG_MISMATCHED_DBG}
1217
 
 
1218
 
type
1219
 
  PIMAGEHLP_DEFERRED_SYMBOL_LOAD = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD;
1220
 
  {$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD}
1221
 
  _IMAGEHLP_DEFERRED_SYMBOL_LOAD = record
1222
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD)
1223
 
    BaseOfImage: DWORD; // base load address of module
1224
 
    CheckSum: DWORD; // checksum from the pe header
1225
 
    TimeDateStamp: DWORD; // date/time stamp from pe header
1226
 
    FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name
1227
 
    Reparse: ByteBool; // load failure reparse
1228
 
    hFile: HANDLE; // file handle, if passed    
1229
 
  end;
1230
 
  {$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD}
1231
 
  IMAGEHLP_DEFERRED_SYMBOL_LOAD = _IMAGEHLP_DEFERRED_SYMBOL_LOAD;
1232
 
  {$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD}
1233
 
  TImageHlpDeferredSymbolLoad = IMAGEHLP_DEFERRED_SYMBOL_LOAD;
1234
 
  PImageHlpDeferredSymbolLoad = PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
1235
 
 
1236
 
  PIMAGEHLP_DUPLICATE_SYMBOL64 = ^IMAGEHLP_DUPLICATE_SYMBOL64;
1237
 
  {$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL64}
1238
 
  _IMAGEHLP_DUPLICATE_SYMBOL64 = record
1239
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64)
1240
 
    NumberOfDups: DWORD; // number of duplicates in the Symbol array
1241
 
    Symbol: PIMAGEHLP_SYMBOL64; // array of duplicate symbols
1242
 
    SelectedSymbol: DWORD; // symbol selected (-1 to start)
1243
 
  end;
1244
 
  {$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL64}
1245
 
  IMAGEHLP_DUPLICATE_SYMBOL64 = _IMAGEHLP_DUPLICATE_SYMBOL64;
1246
 
  {$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL64}
1247
 
  TImageHlpDuplicateSymbol64 = IMAGEHLP_DUPLICATE_SYMBOL64;
1248
 
  PImageHlpDuplicateSymbol64 = PIMAGEHLP_DUPLICATE_SYMBOL64;
1249
 
 
1250
 
  PIMAGEHLP_DUPLICATE_SYMBOL = ^IMAGEHLP_DUPLICATE_SYMBOL;
1251
 
  {$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL}
1252
 
  _IMAGEHLP_DUPLICATE_SYMBOL = record
1253
 
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL)
1254
 
    NumberOfDups: DWORD; // number of duplicates in the Symbol array
1255
 
    Symbol: PIMAGEHLP_SYMBOL; // array of duplicate symbols
1256
 
    SelectedSymbol: DWORD; // symbol selected (-1 to start)
1257
 
  end;
1258
 
  {$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL}
1259
 
  IMAGEHLP_DUPLICATE_SYMBOL = _IMAGEHLP_DUPLICATE_SYMBOL;
1260
 
  {$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL}
1261
 
  TImageHlpDuplicateSymbol = IMAGEHLP_DUPLICATE_SYMBOL;
1262
 
  PImageHlpDuplicateSymbol = PIMAGEHLP_DUPLICATE_SYMBOL;
1263
 
 
1264
 
// If dbghelp ever needs to display graphical UI, it will use this as the parent window.
1265
 
 
1266
 
//BOOL
1267
 
//SymSetParentWindow(
1268
 
//    HWND hwnd
1269
 
//    );
1270
 
 
1271
 
//
1272
 
// options that are set/returned by SymSetOptions() & SymGetOptions()
1273
 
// these are used as a mask
1274
 
//
1275
 
 
1276
 
const
1277
 
  SYMOPT_CASE_INSENSITIVE  = $00000001;
1278
 
  {$EXTERNALSYM SYMOPT_CASE_INSENSITIVE}
1279
 
  SYMOPT_UNDNAME           = $00000002;
1280
 
  {$EXTERNALSYM SYMOPT_UNDNAME}
1281
 
  SYMOPT_DEFERRED_LOADS    = $00000004;
1282
 
  {$EXTERNALSYM SYMOPT_DEFERRED_LOADS}
1283
 
  SYMOPT_NO_CPP            = $00000008;
1284
 
  {$EXTERNALSYM SYMOPT_NO_CPP}
1285
 
  SYMOPT_LOAD_LINES        = $00000010;
1286
 
  {$EXTERNALSYM SYMOPT_LOAD_LINES}
1287
 
  SYMOPT_OMAP_FIND_NEAREST = $00000020;
1288
 
  {$EXTERNALSYM SYMOPT_OMAP_FIND_NEAREST}
1289
 
  SYMOPT_LOAD_ANYTHING         = $00000040;
1290
 
  {$EXTERNALSYM SYMOPT_LOAD_ANYTHING}
1291
 
  SYMOPT_IGNORE_CVREC          = $00000080;
1292
 
  {$EXTERNALSYM SYMOPT_IGNORE_CVREC}
1293
 
  SYMOPT_NO_UNQUALIFIED_LOADS  = $00000100;
1294
 
  {$EXTERNALSYM SYMOPT_NO_UNQUALIFIED_LOADS}
1295
 
  SYMOPT_FAIL_CRITICAL_ERRORS  = $00000200;
1296
 
  {$EXTERNALSYM SYMOPT_FAIL_CRITICAL_ERRORS}
1297
 
  SYMOPT_EXACT_SYMBOLS         = $00000400;
1298
 
  {$EXTERNALSYM SYMOPT_EXACT_SYMBOLS}
1299
 
  SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = $00000800;
1300
 
  {$EXTERNALSYM SYMOPT_ALLOW_ABSOLUTE_SYMBOLS}
1301
 
  SYMOPT_IGNORE_NT_SYMPATH      = $00001000;
1302
 
  {$EXTERNALSYM SYMOPT_IGNORE_NT_SYMPATH}
1303
 
  SYMOPT_INCLUDE_32BIT_MODULES = $00002000;
1304
 
  {$EXTERNALSYM SYMOPT_INCLUDE_32BIT_MODULES}
1305
 
  SYMOPT_PUBLICS_ONLY          = $00004000;
1306
 
  {$EXTERNALSYM SYMOPT_PUBLICS_ONLY}
1307
 
  SYMOPT_NO_PUBLICS            = $00008000;
1308
 
  {$EXTERNALSYM SYMOPT_NO_PUBLICS}
1309
 
  SYMOPT_AUTO_PUBLICS          = $00010000;
1310
 
  {$EXTERNALSYM SYMOPT_AUTO_PUBLICS}
1311
 
  SYMOPT_NO_IMAGE_SEARCH       = $00020000;
1312
 
  {$EXTERNALSYM SYMOPT_NO_IMAGE_SEARCH}
1313
 
  SYMOPT_SECURE                = $00040000;
1314
 
  {$EXTERNALSYM SYMOPT_SECURE}
1315
 
 
1316
 
  SYMOPT_DEBUG             = DWORD($80000000);
1317
 
  {$EXTERNALSYM SYMOPT_DEBUG}
1318
 
 
1319
 
function SymSetOptions(SymOptions: DWORD): DWORD; stdcall;
1320
 
{$EXTERNALSYM SymSetOptions}
1321
 
 
1322
 
function SymGetOptions: DWORD; stdcall;
1323
 
{$EXTERNALSYM SymGetOptions}
1324
 
 
1325
 
function SymCleanup(hProcess: HANDLE): BOOL; stdcall;
1326
 
{$EXTERNALSYM SymCleanup}
1327
 
 
1328
 
function SymMatchString(string_, expression: LPSTR; fCase: BOOL): BOOL; stdcall;
1329
 
{$EXTERNALSYM SymMatchString}
1330
 
 
1331
 
type
1332
 
  PSYM_ENUMSOURCFILES_CALLBACK = function(pSourceFile: PSOURCEFILE; UserContext: PVOID): BOOL; stdcall;
1333
 
  {$EXTERNALSYM PSYM_ENUMSOURCFILES_CALLBACK}
1334
 
  PSymEnumSourceFilesCallback = PSYM_ENUMSOURCFILES_CALLBACK;
1335
 
 
1336
 
function SymEnumSourceFiles(hProcess: HANDLE; ModBase: ULONG64; Mask: LPSTR;
1337
 
  cbSrcFiles: PSYM_ENUMSOURCFILES_CALLBACK; UserContext: PVOID): BOOL; stdcall;
1338
 
{$EXTERNALSYM SymEnumSourceFiles}
1339
 
 
1340
 
function SymEnumerateModules64(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK64;
1341
 
  UserContext: PVOID): BOOL; stdcall;
1342
 
{$EXTERNALSYM SymEnumerateModules64}
1343
 
 
1344
 
function SymEnumerateModules(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK;
1345
 
  UserContext: PVOID): BOOL; stdcall;
1346
 
{$EXTERNALSYM SymEnumerateModules}
1347
 
 
1348
 
function SymEnumerateSymbols64(hProcess: HANDLE; BaseOfDll: DWORD64;
1349
 
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK64; UserContext: PVOID): BOOL; stdcall;
1350
 
{$EXTERNALSYM SymEnumerateSymbols64}
1351
 
 
1352
 
function SymEnumerateSymbolsW64(hProcess: HANDLE; BaseOfDll: DWORD64;
1353
 
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK64W; UserContext: PVOID): BOOL; stdcall;
1354
 
{$EXTERNALSYM SymEnumerateSymbolsW64}
1355
 
 
1356
 
function SymEnumerateSymbols(hProcess: HANDLE; BaseOfDll: DWORD;
1357
 
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
1358
 
{$EXTERNALSYM SymEnumerateSymbols}
1359
 
 
1360
 
function SymEnumerateSymbolsW(hProcess: HANDLE; BaseOfDll: DWORD;
1361
 
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACKW; UserContext: PVOID): BOOL; stdcall;
1362
 
{$EXTERNALSYM SymEnumerateSymbolsW}
1363
 
 
1364
 
function EnumerateLoadedModules64(hProcess: HANDLE; EnumLoadedModulesCallback: PENUMLOADED_MODULES_CALLBACK64;
1365
 
  UserContext: PVOID): BOOL; stdcall;
1366
 
{$EXTERNALSYM EnumerateLoadedModules64}
1367
 
 
1368
 
function EnumerateLoadedModules(hProcess: HANDLE; EnumLoadedModulesCallback: PENUMLOADED_MODULES_CALLBACK;
1369
 
  UserContext: PVOID): BOOL; stdcall;
1370
 
{$EXTERNALSYM EnumerateLoadedModules}
1371
 
 
1372
 
function SymFunctionTableAccess64(hProcess: HANDLE; AddrBase: DWORD64): PVOID; stdcall;
1373
 
{$EXTERNALSYM SymFunctionTableAccess64}
1374
 
 
1375
 
function SymFunctionTableAccess(hProcess: HANDLE; AddrBase: DWORD): PVOID; stdcall;
1376
 
{$EXTERNALSYM SymFunctionTableAccess}
1377
 
 
1378
 
function SymGetModuleInfo64(hProcess: HANDLE; qwAddr: DWORD64;
1379
 
  var ModuleInfo: IMAGEHLP_MODULE64): BOOL; stdcall;
1380
 
{$EXTERNALSYM SymGetModuleInfo64}
1381
 
 
1382
 
function SymGetModuleInfoW64(hProcess: HANDLE; qwAddr: DWORD64;
1383
 
  var ModuleInfo: IMAGEHLP_MODULEW64): BOOL; stdcall;
1384
 
{$EXTERNALSYM SymGetModuleInfoW64}
1385
 
 
1386
 
function SymGetModuleInfo(hProcess: HANDLE; dwAddr: DWORD;
1387
 
  var ModuleInfo: IMAGEHLP_MODULE): BOOL; stdcall;
1388
 
{$EXTERNALSYM SymGetModuleInfo}
1389
 
 
1390
 
function SymGetModuleInfoW(hProcess: HANDLE; dwAddr: DWORD;
1391
 
  var ModuleInfo: IMAGEHLP_MODULEW): BOOL; stdcall;
1392
 
{$EXTERNALSYM SymGetModuleInfoW}
1393
 
 
1394
 
function SymGetModuleBase64(hProcess: HANDLE; qwAddr: DWORD64): DWORD64; stdcall;
1395
 
{$EXTERNALSYM SymGetModuleBase64}
1396
 
 
1397
 
function SymGetModuleBase(hProcess: HANDLE; dwAddr: DWORD): DWORD; stdcall;
1398
 
{$EXTERNALSYM SymGetModuleBase}
1399
 
 
1400
 
function SymGetSymNext64(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL64): BOOL; stdcall;
1401
 
{$EXTERNALSYM SymGetSymNext64}
1402
 
 
1403
 
function SymGetSymNext(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL): BOOL; stdcall;
1404
 
{$EXTERNALSYM SymGetSymNext}
1405
 
 
1406
 
function SymGetSymPrev64(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL64): BOOL; stdcall;
1407
 
{$EXTERNALSYM SymGetSymPrev64}
1408
 
 
1409
 
function SymGetSymPrev(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL): BOOL; stdcall;
1410
 
{$EXTERNALSYM SymGetSymPrev}
1411
 
 
1412
 
function SymGetLineFromAddr64(hProcess: HANDLE; qwAddr: DWORD64;
1413
 
  var pdwDisplacement: DWORD; var Line64: IMAGEHLP_LINE64): BOOL; stdcall;
1414
 
{$EXTERNALSYM SymGetLineFromAddr64}
1415
 
 
1416
 
function SymGetLineFromAddr(hProcess: HANDLE; dwAddr: DWORD;
1417
 
  var pdwDisplacement: DWORD; var Line: IMAGEHLP_LINE): BOOL; stdcall;
1418
 
{$EXTERNALSYM SymGetLineFromAddr}
1419
 
 
1420
 
function SymGetLineFromName64(hProcess: HANDLE; ModuleName: PSTR; FileName: PSTR;
1421
 
  dwLineNumber: DWORD; var plDisplacement: LONG; var Line: IMAGEHLP_LINE64): BOOL; stdcall;
1422
 
{$EXTERNALSYM SymGetLineFromName64}
1423
 
 
1424
 
function SymGetLineFromName(hProcess: HANDLE; ModuleName: PSTR; FileName: PSTR;
1425
 
  dwLineNumber: DWORD; var plDisplacement: LONG; var Line: IMAGEHLP_LINE): BOOL; stdcall;
1426
 
{$EXTERNALSYM SymGetLineFromName}
1427
 
 
1428
 
function SymGetLineNext64(hProcess: HANDLE; var Line: IMAGEHLP_LINE64): BOOL; stdcall;
1429
 
{$EXTERNALSYM SymGetLineNext64}
1430
 
 
1431
 
function SymGetLineNext(hProcess: HANDLE; var Line: IMAGEHLP_LINE): BOOL; stdcall;
1432
 
{$EXTERNALSYM SymGetLineNext}
1433
 
 
1434
 
function SymGetLinePrev64(hProcess: HANDLE; var Line: IMAGEHLP_LINE64): BOOL; stdcall;
1435
 
{$EXTERNALSYM SymGetLinePrev64}
1436
 
 
1437
 
function SymGetLinePrev(hProcess: HANDLE; var Line: IMAGEHLP_LINE): BOOL; stdcall;
1438
 
{$EXTERNALSYM SymGetLinePrev}
1439
 
 
1440
 
function SymMatchFileName(FileName, Match: PSTR; var FileNameStop, MatchStop: PSTR): BOOL; stdcall;
1441
 
{$EXTERNALSYM SymMatchFileName}
1442
 
 
1443
 
function SymInitialize(hProcess: HANDLE; UserSearchPath: PSTR; fInvadeProcess: BOOL): BOOL; stdcall;
1444
 
{$EXTERNALSYM SymInitialize}
1445
 
 
1446
 
function SymGetSearchPath(hProcess: HANDLE; SearchPath: PSTR; SearchPathLength: DWORD): BOOL; stdcall;
1447
 
{$EXTERNALSYM SymGetSearchPath}
1448
 
 
1449
 
function SymSetSearchPath(hProcess: HANDLE; SearchPath: PSTR): BOOL; stdcall;
1450
 
{$EXTERNALSYM SymSetSearchPath}
1451
 
 
1452
 
function SymLoadModule64(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR;
1453
 
  BaseOfDll: DWORD64; SizeOfDll: DWORD): DWORD64; stdcall;
1454
 
{$EXTERNALSYM SymLoadModule64}
1455
 
 
1456
 
const
1457
 
  SLMFLAG_VIRTUAL = $1;
1458
 
  {$EXTERNALSYM SLMFLAG_VIRTUAL}
1459
 
 
1460
 
function SymLoadModuleEx(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR; BaseOfDll: DWORD64;
1461
 
  DllSize: DWORD; Data: PMODLOAD_DATA; Flag: DWORD): DWORD64; stdcall;
1462
 
{$EXTERNALSYM SymLoadModuleEx}
1463
 
 
1464
 
function SymLoadModule(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR;
1465
 
  BaseOfDll: DWORD; SizeOfDll: DWORD): DWORD; stdcall;
1466
 
{$EXTERNALSYM SymLoadModule}
1467
 
 
1468
 
function SymUnloadModule64(hProcess: HANDLE; BaseOfDll: DWORD64): BOOL; stdcall;
1469
 
{$EXTERNALSYM SymUnloadModule64}
1470
 
 
1471
 
function SymUnloadModule(hProcess: HANDLE; BaseOfDll: DWORD): BOOL; stdcall;
1472
 
{$EXTERNALSYM SymUnloadModule}
1473
 
 
1474
 
function SymUnDName64(const sym: IMAGEHLP_SYMBOL64; UnDecName: PSTR;
1475
 
  UnDecNameLength: DWORD): BOOL; stdcall;
1476
 
{$EXTERNALSYM SymUnDName64}
1477
 
 
1478
 
function SymUnDName(const sym: IMAGEHLP_SYMBOL; UnDecName: PSTR;
1479
 
  UnDecNameLength: DWORD): BOOL; stdcall;
1480
 
{$EXTERNALSYM SymUnDName}
1481
 
 
1482
 
function SymRegisterCallback64(hProcess: HANDLE; CallbackFunction: PSYMBOL_REGISTERED_CALLBACK64;
1483
 
  UserContext: ULONG64): BOOL; stdcall;
1484
 
{$EXTERNALSYM SymRegisterCallback64}
1485
 
 
1486
 
function SymRegisterFunctionEntryCallback64(hProcess: HANDLE; CallbackFunction: PSYMBOL_FUNCENTRY_CALLBACK64;
1487
 
  UserContext: ULONG64): BOOL; stdcall;
1488
 
{$EXTERNALSYM SymRegisterFunctionEntryCallback64}
1489
 
 
1490
 
function SymRegisterCallback(hProcess: HANDLE; CallbackFunction: PSYMBOL_REGISTERED_CALLBACK;
1491
 
  UserContext: PVOID): BOOL; stdcall;
1492
 
{$EXTERNALSYM SymRegisterCallback}
1493
 
 
1494
 
function SymRegisterFunctionEntryCallback(hProcess: HANDLE; CallbackFunction: PSYMBOL_FUNCENTRY_CALLBACK;
1495
 
  UserContext: PVOID): BOOL; stdcall;
1496
 
{$EXTERNALSYM SymRegisterFunctionEntryCallback}
1497
 
 
1498
 
type
1499
 
  PIMAGEHLP_SYMBOL_SRC = ^IMAGEHLP_SYMBOL_SRC;
1500
 
  {$EXTERNALSYM PIMAGEHLP_SYMBOL_SRC}
1501
 
  _IMAGEHLP_SYMBOL_SRC = record
1502
 
    sizeofstruct: DWORD;
1503
 
    type_: DWORD;
1504
 
    file_: array [0..MAX_PATH - 1] of Char;
1505
 
  end;
1506
 
  {$EXTERNALSYM _IMAGEHLP_SYMBOL_SRC}
1507
 
  IMAGEHLP_SYMBOL_SRC = _IMAGEHLP_SYMBOL_SRC;
1508
 
  {$EXTERNALSYM IMAGEHLP_SYMBOL_SRC}
1509
 
  TImageHlpSymbolSrc = IMAGEHLP_SYMBOL_SRC;
1510
 
  PImageHlpSymbolSrc = PIMAGEHLP_SYMBOL_SRC;
1511
 
 
1512
 
  PMODULE_TYPE_INFO = ^MODULE_TYPE_INFO;
1513
 
  {$EXTERNALSYM PMODULE_TYPE_INFO}
1514
 
  _MODULE_TYPE_INFO = record
1515
 
    dataLength: USHORT;
1516
 
    leaf: USHORT;
1517
 
    data: array [0..0] of BYTE;
1518
 
  end;
1519
 
  {$EXTERNALSYM _MODULE_TYPE_INFO}
1520
 
  MODULE_TYPE_INFO = _MODULE_TYPE_INFO;
1521
 
  {$EXTERNALSYM MODULE_TYPE_INFO}
1522
 
  TModuleTypeInfo = MODULE_TYPE_INFO;
1523
 
  PModuleTypeInfo = PMODULE_TYPE_INFO;
1524
 
 
1525
 
type
1526
 
  PSYMBOL_INFO = ^SYMBOL_INFO;
1527
 
  {$EXTERNALSYM PSYMBOL_INFO}
1528
 
  _SYMBOL_INFO = record
1529
 
    SizeOfStruct: ULONG;
1530
 
    TypeIndex: ULONG; // Type Index of symbol
1531
 
    Reserved: array [0..1] of ULONG64;
1532
 
    Info: ULONG;
1533
 
    Size: ULONG;
1534
 
    ModBase: ULONG64; // Base Address of module comtaining this symbol
1535
 
    Flags: ULONG;
1536
 
    Value: ULONG64; // Value of symbol, ValuePresent should be 1
1537
 
    Address: ULONG64; // Address of symbol including base address of module
1538
 
    Register_: ULONG; // register holding value or pointer to value
1539
 
    Scope: ULONG; // scope of the symbol
1540
 
    Tag: ULONG; // pdb classification
1541
 
    NameLen: ULONG; // Actual length of name
1542
 
    MaxNameLen: ULONG;
1543
 
    Name: array [0..0] of CHAR; // Name of symbol
1544
 
  end;
1545
 
  {$EXTERNALSYM _SYMBOL_INFO}
1546
 
  SYMBOL_INFO = _SYMBOL_INFO;
1547
 
  {$EXTERNALSYM SYMBOL_INFO}
1548
 
  TSymbolInfo = SYMBOL_INFO;
1549
 
  PSymbolInfo = PSYMBOL_INFO;
1550
 
 
1551
 
  _SYMBOL_INFO_PACKAGE = record
1552
 
    si: SYMBOL_INFO;
1553
 
    name: array [0..MAX_SYM_NAME] of CHAR;
1554
 
  end;
1555
 
  {$EXTERNALSYM _SYMBOL_INFO_PACKAGE}
1556
 
  SYMBOL_INFO_PACKAGE = _SYMBOL_INFO_PACKAGE;
1557
 
  {$EXTERNALSYM SYMBOL_INFO_PACKAGE}
1558
 
  PSYMBOL_INFO_PACKAGE = ^SYMBOL_INFO_PACKAGE;
1559
 
  {$EXTERNALSYM PSYMBOL_INFO_PACKAGE}
1560
 
  TSymbolInfoPackage = SYMBOL_INFO_PACKAGE;
1561
 
  PSymbolInfoPackage = PSYMBOL_INFO_PACKAGE;
1562
 
 
1563
 
  PIMAGEHLP_STACK_FRAME = ^IMAGEHLP_STACK_FRAME;
1564
 
  {$EXTERNALSYM PIMAGEHLP_STACK_FRAME}
1565
 
  _IMAGEHLP_STACK_FRAME = record
1566
 
    InstructionOffset: ULONG64;
1567
 
    ReturnOffset: ULONG64;
1568
 
    FrameOffset: ULONG64;
1569
 
    StackOffset: ULONG64;
1570
 
    BackingStoreOffset: ULONG64;
1571
 
    FuncTableEntry: ULONG64;
1572
 
    Params: array [0..3] of ULONG64;
1573
 
    Reserved: array [0..4] of ULONG64;
1574
 
    Virtual_: BOOL;
1575
 
    Reserved2: ULONG;
1576
 
  end;
1577
 
  {$EXTERNALSYM _IMAGEHLP_STACK_FRAME}
1578
 
  IMAGEHLP_STACK_FRAME = _IMAGEHLP_STACK_FRAME;
1579
 
  {$EXTERNALSYM IMAGEHLP_STACK_FRAME}
1580
 
  TImageHlpStackFrame = IMAGEHLP_STACK_FRAME;
1581
 
  PImageHlpStackFrame = PIMAGEHLP_STACK_FRAME;
1582
 
 
1583
 
  IMAGEHLP_CONTEXT = LPVOID;
1584
 
  {$EXTERNALSYM IMAGEHLP_CONTEXT}
1585
 
  PIMAGEHLP_CONTEXT = ^IMAGEHLP_CONTEXT;
1586
 
  {$EXTERNALSYM PIMAGEHLP_CONTEXT}
1587
 
  TImageHlpContext = IMAGEHLP_CONTEXT;
1588
 
  PImageHlpContext = PIMAGEHLP_CONTEXT;
1589
 
 
1590
 
function SymSetContext(hProcess: HANDLE; StackFrame: PIMAGEHLP_STACK_FRAME; Context: PIMAGEHLP_CONTEXT): BOOL; stdcall;
1591
 
{$EXTERNALSYM SymSetContext}
1592
 
 
1593
 
function SymFromAddr(hProcess: HANDLE; Address: DWORD64; Displacement: PDWORD64; Symbol: PSYMBOL_INFO): BOOL; stdcall;
1594
 
{$EXTERNALSYM SymFromAddr}
1595
 
 
1596
 
// While SymFromName will provide a symbol from a name,
1597
 
// SymEnumSymbols can provide the same matching information
1598
 
// for ALL symbols with a matching name, even regular
1599
 
// expressions.  That way you can search across modules
1600
 
// and differentiate between identically named symbols.
1601
 
 
1602
 
function SymFromName(hProcess: HANDLE; Name: LPSTR; Symbol: PSYMBOL_INFO): BOOL; stdcall;
1603
 
{$EXTERNALSYM SymFromName}
1604
 
 
1605
 
type
1606
 
  PSYM_ENUMERATESYMBOLS_CALLBACK = function(pSymInfo: PSYMBOL_INFO; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
1607
 
  {$EXTERNALSYM PSYM_ENUMERATESYMBOLS_CALLBACK}
1608
 
  PSymEnumerateSymbolsCallback = PSYM_ENUMERATESYMBOLS_CALLBACK;
1609
 
 
1610
 
function SymEnumSymbols(hProcess: HANDLE; BaseOfDll: ULONG64; Mask: PCSTR; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
1611
 
{$EXTERNALSYM SymEnumSymbols}
1612
 
 
1613
 
function SymEnumSymbolsForAddr(hProcess: HANDLE; Address: DWORD64;
1614
 
  EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
1615
 
{$EXTERNALSYM SymEnumSymbolsForAddr}
1616
 
 
1617
 
type
1618
 
  _IMAGEHLP_SYMBOL_TYPE_INFO = (
1619
 
    TI_GET_SYMTAG,
1620
 
    TI_GET_SYMNAME,
1621
 
    TI_GET_LENGTH,
1622
 
    TI_GET_TYPE,
1623
 
    TI_GET_TYPEID,
1624
 
    TI_GET_BASETYPE,
1625
 
    TI_GET_ARRAYINDEXTYPEID,
1626
 
    TI_FINDCHILDREN,
1627
 
    TI_GET_DATAKIND,
1628
 
    TI_GET_ADDRESSOFFSET,
1629
 
    TI_GET_OFFSET,
1630
 
    TI_GET_VALUE,
1631
 
    TI_GET_COUNT,
1632
 
    TI_GET_CHILDRENCOUNT,
1633
 
    TI_GET_BITPOSITION,
1634
 
    TI_GET_VIRTUALBASECLASS,
1635
 
    TI_GET_VIRTUALTABLESHAPEID,
1636
 
    TI_GET_VIRTUALBASEPOINTEROFFSET,
1637
 
    TI_GET_CLASSPARENTID,
1638
 
    TI_GET_NESTED,
1639
 
    TI_GET_SYMINDEX,
1640
 
    TI_GET_LEXICALPARENT,
1641
 
    TI_GET_ADDRESS,
1642
 
    TI_GET_THISADJUST,
1643
 
    TI_GET_UDTKIND,
1644
 
    TI_IS_EQUIV_TO,
1645
 
    TI_GET_CALLING_CONVENTION);
1646
 
  {$EXTERNALSYM _IMAGEHLP_SYMBOL_TYPE_INFO}
1647
 
  IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO;
1648
 
  {$EXTERNALSYM IMAGEHLP_SYMBOL_TYPE_INFO}
1649
 
  TImageHlpSymbolTypeInfo = IMAGEHLP_SYMBOL_TYPE_INFO;
1650
 
 
1651
 
  PTI_FINDCHILDREN_PARAMS = ^TI_FINDCHILDREN_PARAMS;
1652
 
  {$EXTERNALSYM PTI_FINDCHILDREN_PARAMS}
1653
 
  _TI_FINDCHILDREN_PARAMS = record
1654
 
    Count: ULONG;
1655
 
    Start: ULONG;
1656
 
    ChildId: array [0..0] of ULONG;
1657
 
  end;
1658
 
  {$EXTERNALSYM _TI_FINDCHILDREN_PARAMS}
1659
 
  TI_FINDCHILDREN_PARAMS = _TI_FINDCHILDREN_PARAMS;
1660
 
  {$EXTERNALSYM TI_FINDCHILDREN_PARAMS}
1661
 
  TTiFindChildrenParams = TI_FINDCHILDREN_PARAMS;
1662
 
  PTiFindChildrenParams = PTI_FINDCHILDREN_PARAMS;
1663
 
 
1664
 
function SymGetTypeInfo(hProcess: HANDLE; ModBase: DWORD64; TypeId: ULONG; GetType: IMAGEHLP_SYMBOL_TYPE_INFO; pInfo: PVOID): BOOL; stdcall;
1665
 
{$EXTERNALSYM SymGetTypeInfo}
1666
 
 
1667
 
function SymEnumTypes(hProcess: HANDLE; BaseOfDll: ULONG64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
1668
 
{$EXTERNALSYM SymEnumTypes}
1669
 
 
1670
 
function SymGetTypeFromName(hProcess: HANDLE; BaseOfDll: ULONG64; Name: LPSTR; Symbol: PSYMBOL_INFO): BOOL; stdcall;
1671
 
{$EXTERNALSYM SymGetTypeFromName}
1672
 
 
1673
 
function SymAddSymbol(hProcess: HANDLE; BaseOfDll: ULONG64; Name: PCSTR; Address: DWORD64; Size, Flags: DWORD): BOOL; stdcall;
1674
 
{$EXTERNALSYM SymAddSymbol}
1675
 
 
1676
 
function SymDeleteSymbol(hProcess: HANDLE; BaseOfDll: ULONG64; Name: PCSTR; Address: DWORD64; Flags: DWORD): BOOL; stdcall;
1677
 
{$EXTERNALSYM SymDeleteSymbol}
1678
 
 
1679
 
//
1680
 
// Full user-mode dump creation.
1681
 
//
1682
 
 
1683
 
type
1684
 
  PDBGHELP_CREATE_USER_DUMP_CALLBACK = function(DataType: DWORD; var Data: PVOID; DataLength: LPDWORD; UserData: PVOID): BOOL; stdcall;
1685
 
  {$EXTERNALSYM PDBGHELP_CREATE_USER_DUMP_CALLBACK}
1686
 
  PDbgHelpCreateUserDumpCallback = PDBGHELP_CREATE_USER_DUMP_CALLBACK;
1687
 
 
1688
 
function DbgHelpCreateUserDump(FileName: LPSTR; Callback: PDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData: PVOID): BOOL; stdcall;
1689
 
{$EXTERNALSYM DbgHelpCreateUserDump}
1690
 
 
1691
 
function DbgHelpCreateUserDumpW(FileName: LPWSTR; Callback: PDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData: PVOID): BOOL; stdcall;
1692
 
{$EXTERNALSYM DbgHelpCreateUserDumpW}
1693
 
 
1694
 
// -----------------------------------------------------------------
1695
 
// The following 4 legacy APIs are fully supported, but newer
1696
 
// ones are recommended.  SymFromName and SymFromAddr provide
1697
 
// much more detailed info on the returned symbol.
1698
 
 
1699
 
function SymGetSymFromAddr64(hProcess: HANDLE; qwAddr: DWORD64; pdwDisplacement: PDWORD64; Symbol: PIMAGEHLP_SYMBOL64): BOOL; stdcall;
1700
 
{$EXTERNALSYM SymGetSymFromAddr64}
1701
 
 
1702
 
function SymGetSymFromAddr(hProcess: HANDLE; dwAddr: DWORD; pdwDisplacement: PDWORD; Symbol: PIMAGEHLP_SYMBOL): BOOL; stdcall;
1703
 
{$EXTERNALSYM SymGetSymFromAddr}
1704
 
 
1705
 
// While following two APIs will provide a symbol from a name,
1706
 
// SymEnumSymbols can provide the same matching information
1707
 
// for ALL symbols with a matching name, even regular
1708
 
// expressions.  That way you can search across modules
1709
 
// and differentiate between identically named symbols.
1710
 
 
1711
 
function SymGetSymFromName64(hProcess: HANDLE; Name: PSTR; Symbol: PIMAGEHLP_SYMBOL64): BOOL; stdcall;
1712
 
{$EXTERNALSYM SymGetSymFromName64}
1713
 
 
1714
 
function SymGetSymFromName(hProcess: HANDLE; Name: PSTR; Symbol: PIMAGEHLP_SYMBOL): BOOL; stdcall;
1715
 
{$EXTERNALSYM SymGetSymFromName}
1716
 
 
1717
 
// -----------------------------------------------------------------
1718
 
// The following APIs exist only for backwards compatibility
1719
 
// with a pre-release version documented in an MSDN release.
1720
 
 
1721
 
// You should use SymFindFileInPath if you want to maintain
1722
 
// future compatibility.
1723
 
 
1724
 
function FindFileInPath(hprocess: HANDLE; SearchPath: LPSTR; FileName: LPSTR; id: PVOID; two: DWORD; three: DWORD; flags: DWORD; FilePath: LPSTR): BOOL; stdcall;
1725
 
{$EXTERNALSYM FindFileInPath}
1726
 
 
1727
 
// You should use SymFindFileInPath if you want to maintain
1728
 
// future compatibility.
1729
 
 
1730
 
function FindFileInSearchPath(hprocess: HANDLE; SearchPath: LPSTR; FileName: LPSTR; one: DWORD; two: DWORD; three: DWORD; FilePath: LPSTR): BOOL; stdcall;
1731
 
{$EXTERNALSYM FindFileInSearchPath}
1732
 
 
1733
 
function SymEnumSym(hProcess: HANDLE; BaseOfDll: ULONG64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
1734
 
{$EXTERNALSYM SymEnumSym}
1735
 
 
1736
 
// These values should not be used.
1737
 
// They have been replaced by SYMFLAG_ values.
1738
 
 
1739
 
const
1740
 
  SYMF_OMAP_GENERATED  = $00000001;
1741
 
  SYMF_OMAP_MODIFIED   = $00000002;
1742
 
  SYMF_REGISTER        = $00000008;
1743
 
  SYMF_REGREL          = $00000010;
1744
 
  SYMF_FRAMEREL        = $00000020;
1745
 
  SYMF_PARAMETER       = $00000040;
1746
 
  SYMF_LOCAL           = $00000080;
1747
 
  SYMF_CONSTANT        = $00000100;
1748
 
  SYMF_EXPORT          = $00000200;
1749
 
  SYMF_FORWARDER       = $00000400;
1750
 
  SYMF_FUNCTION        = $00000800;
1751
 
  SYMF_VIRTUAL         = $00001000;
1752
 
  SYMF_THUNK           = $00002000;
1753
 
  SYMF_TLSREL          = $00004000;
1754
 
 
1755
 
// These values should also not be used.
1756
 
// They have been replaced by SYMFLAG_ values.
1757
 
 
1758
 
  IMAGEHLP_SYMBOL_INFO_VALUEPRESENT         = 1;
1759
 
  IMAGEHLP_SYMBOL_INFO_REGISTER             = SYMF_REGISTER;        // 0x0008
1760
 
  IMAGEHLP_SYMBOL_INFO_REGRELATIVE          = SYMF_REGREL;          // 0x0010
1761
 
  IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE        = SYMF_FRAMEREL;        // 0x0020
1762
 
  IMAGEHLP_SYMBOL_INFO_PARAMETER            = SYMF_PARAMETER;       // 0x0040
1763
 
  IMAGEHLP_SYMBOL_INFO_LOCAL                = SYMF_LOCAL;           // 0x0080
1764
 
  IMAGEHLP_SYMBOL_INFO_CONSTANT             = SYMF_CONSTANT;        // 0x0100
1765
 
  IMAGEHLP_SYMBOL_FUNCTION                  = SYMF_FUNCTION;        // 0x0800
1766
 
  IMAGEHLP_SYMBOL_VIRTUAL                   = SYMF_VIRTUAL;         // 0x1000
1767
 
  IMAGEHLP_SYMBOL_THUNK                     = SYMF_THUNK;           // 0x2000
1768
 
  IMAGEHLP_SYMBOL_INFO_TLSRELATIVE          = SYMF_TLSREL;          // 0x4000
1769
 
 
1770
 
const
1771
 
  MINIDUMP_SIGNATURE = 'PMDM';
1772
 
  {$EXTERNALSYM MINIDUMP_SIGNATURE}
1773
 
  MINIDUMP_VERSION   = 42899;
1774
 
  {$EXTERNALSYM MINIDUMP_VERSION}
1775
 
 
1776
 
type
1777
 
  RVA = DWORD;
1778
 
  {$EXTERNALSYM RVA}
1779
 
  RVA64 = ULONG64;
1780
 
  {$EXTERNALSYM RVA64}
1781
 
 
1782
 
  _MINIDUMP_LOCATION_DESCRIPTOR = record
1783
 
    DataSize: ULONG32;
1784
 
    Rva: RVA;
1785
 
  end;
1786
 
  {$EXTERNALSYM _MINIDUMP_LOCATION_DESCRIPTOR}
1787
 
  MINIDUMP_LOCATION_DESCRIPTOR = _MINIDUMP_LOCATION_DESCRIPTOR;
1788
 
  {$EXTERNALSYM MINIDUMP_LOCATION_DESCRIPTOR}
1789
 
  TMinidumpLocationDescriptor = MINIDUMP_LOCATION_DESCRIPTOR;
1790
 
  PMinidumpLocationDescriptor = ^MINIDUMP_LOCATION_DESCRIPTOR;
1791
 
 
1792
 
  _MINIDUMP_LOCATION_DESCRIPTOR64 = record
1793
 
    DataSize: ULONG64;
1794
 
    Rva: RVA64;
1795
 
  end;
1796
 
  {$EXTERNALSYM _MINIDUMP_LOCATION_DESCRIPTOR64}
1797
 
  MINIDUMP_LOCATION_DESCRIPTOR64 = _MINIDUMP_LOCATION_DESCRIPTOR64;
1798
 
  {$EXTERNALSYM MINIDUMP_LOCATION_DESCRIPTOR64}
1799
 
  TMinidumpLocationDescriptor64 = MINIDUMP_LOCATION_DESCRIPTOR64;
1800
 
  PMinidumpLocationDescriptor64 = ^MINIDUMP_LOCATION_DESCRIPTOR64;
1801
 
 
1802
 
  PMINIDUMP_MEMORY_DESCRIPTOR = ^MINIDUMP_MEMORY_DESCRIPTOR;
1803
 
  {$EXTERNALSYM PMINIDUMP_MEMORY_DESCRIPTOR}
1804
 
  _MINIDUMP_MEMORY_DESCRIPTOR = record
1805
 
    StartOfMemoryRange: ULONG64;
1806
 
    Memory: MINIDUMP_LOCATION_DESCRIPTOR;
1807
 
  end;
1808
 
  {$EXTERNALSYM _MINIDUMP_MEMORY_DESCRIPTOR}
1809
 
  MINIDUMP_MEMORY_DESCRIPTOR = _MINIDUMP_MEMORY_DESCRIPTOR;
1810
 
  {$EXTERNALSYM MINIDUMP_MEMORY_DESCRIPTOR}
1811
 
  TMinidumpMemoryDescriptor = MINIDUMP_MEMORY_DESCRIPTOR;
1812
 
  PMinidumpMemoryDescriptor = PMINIDUMP_MEMORY_DESCRIPTOR;
1813
 
 
1814
 
// DESCRIPTOR64 is used for full-memory minidumps where
1815
 
// all of the raw memory is laid out sequentially at the
1816
 
// end of the dump.  There is no need for individual RVAs
1817
 
// as the RVA is the base RVA plus the sum of the preceeding
1818
 
// data blocks.
1819
 
 
1820
 
  PMINIDUMP_MEMORY_DESCRIPTOR64 = ^MINIDUMP_MEMORY_DESCRIPTOR64;
1821
 
  {$EXTERNALSYM PMINIDUMP_MEMORY_DESCRIPTOR64}
1822
 
  _MINIDUMP_MEMORY_DESCRIPTOR64 = record
1823
 
    StartOfMemoryRange: ULONG64;
1824
 
    DataSize: ULONG64;
1825
 
  end;
1826
 
  {$EXTERNALSYM _MINIDUMP_MEMORY_DESCRIPTOR64}
1827
 
  MINIDUMP_MEMORY_DESCRIPTOR64 = _MINIDUMP_MEMORY_DESCRIPTOR64;
1828
 
  {$EXTERNALSYM MINIDUMP_MEMORY_DESCRIPTOR64}
1829
 
  TMinidumpMemoryDescriptor64 = MINIDUMP_MEMORY_DESCRIPTOR64;
1830
 
  PMinidumpMemoryDescriptor64 = PMINIDUMP_MEMORY_DESCRIPTOR64;
1831
 
 
1832
 
  PMINIDUMP_HEADER = ^MINIDUMP_HEADER;
1833
 
  {$EXTERNALSYM PMINIDUMP_HEADER}
1834
 
  _MINIDUMP_HEADER = record
1835
 
    Signature: ULONG32;
1836
 
    Version: ULONG32;
1837
 
    NumberOfStreams: ULONG32;
1838
 
    StreamDirectoryRva: RVA;
1839
 
    CheckSum: ULONG32;
1840
 
    U: record
1841
 
    case Integer of
1842
 
      0: (Reserved: ULONG32);
1843
 
      1: (TimeDateStamp: ULONG32);
1844
 
    end;
1845
 
    Flags: ULONG64;
1846
 
  end;
1847
 
  {$EXTERNALSYM _MINIDUMP_HEADER}
1848
 
  MINIDUMP_HEADER = _MINIDUMP_HEADER;
1849
 
  {$EXTERNALSYM MINIDUMP_HEADER}
1850
 
  TMinidumpHeader = MINIDUMP_HEADER;
1851
 
  PMinidumpHeader = PMINIDUMP_HEADER;
1852
 
 
1853
 
//
1854
 
// The MINIDUMP_HEADER field StreamDirectoryRva points to 
1855
 
// an array of MINIDUMP_DIRECTORY structures.
1856
 
//
1857
 
 
1858
 
  PMINIDUMP_DIRECTORY = ^MINIDUMP_DIRECTORY;
1859
 
  {$EXTERNALSYM PMINIDUMP_DIRECTORY}
1860
 
  _MINIDUMP_DIRECTORY = record
1861
 
    StreamType: ULONG32;
1862
 
    Location: MINIDUMP_LOCATION_DESCRIPTOR;
1863
 
  end;
1864
 
  {$EXTERNALSYM _MINIDUMP_DIRECTORY}
1865
 
  MINIDUMP_DIRECTORY = _MINIDUMP_DIRECTORY;
1866
 
  {$EXTERNALSYM MINIDUMP_DIRECTORY}
1867
 
  TMinidumpDirectory = MINIDUMP_DIRECTORY;
1868
 
  PMinidumpDirectory = PMINIDUMP_DIRECTORY;
1869
 
 
1870
 
  PMINIDUMP_STRING = ^MINIDUMP_STRING;
1871
 
  {$EXTERNALSYM PMINIDUMP_STRING}
1872
 
  _MINIDUMP_STRING = record
1873
 
    Length: ULONG32; // Length in bytes of the string
1874
 
    Buffer: PWCHAR; // Variable size buffer
1875
 
  end;
1876
 
  {$EXTERNALSYM _MINIDUMP_STRING}
1877
 
  MINIDUMP_STRING = _MINIDUMP_STRING;
1878
 
  {$EXTERNALSYM MINIDUMP_STRING}
1879
 
  TMinidumpString = MINIDUMP_STRING;
1880
 
  PMinidumpString = PMINIDUMP_STRING;
1881
 
 
1882
 
//
1883
 
// The MINIDUMP_DIRECTORY field StreamType may be one of the following types.
1884
 
// Types will be added in the future, so if a program reading the minidump
1885
 
// header encounters a stream type it does not understand it should ignore
1886
 
// the data altogether. Any tag above LastReservedStream will not be used by
1887
 
// the system and is reserved for program-specific information.
1888
 
//
1889
 
 
1890
 
const
1891
 
  UnusedStream                = 0;
1892
 
  {$EXTERNALSYM UnusedStream}
1893
 
  ReservedStream0             = 1;
1894
 
  {$EXTERNALSYM ReservedStream0}
1895
 
  ReservedStream1             = 2;
1896
 
  {$EXTERNALSYM ReservedStream1}
1897
 
  ThreadListStream            = 3;
1898
 
  {$EXTERNALSYM ThreadListStream}
1899
 
  ModuleListStream            = 4;
1900
 
  {$EXTERNALSYM ModuleListStream}
1901
 
  MemoryListStream            = 5;
1902
 
  {$EXTERNALSYM MemoryListStream}
1903
 
  ExceptionStream             = 6;
1904
 
  {$EXTERNALSYM ExceptionStream}
1905
 
  SystemInfoStream            = 7;
1906
 
  {$EXTERNALSYM SystemInfoStream}
1907
 
  ThreadExListStream          = 8;
1908
 
  {$EXTERNALSYM ThreadExListStream}
1909
 
  Memory64ListStream          = 9;
1910
 
  {$EXTERNALSYM Memory64ListStream}
1911
 
  CommentStreamA              = 10;
1912
 
  {$EXTERNALSYM CommentStreamA}
1913
 
  CommentStreamW              = 11;
1914
 
  {$EXTERNALSYM CommentStreamW}
1915
 
  HandleDataStream            = 12;
1916
 
  {$EXTERNALSYM HandleDataStream}
1917
 
  FunctionTableStream         = 13;
1918
 
  {$EXTERNALSYM FunctionTableStream}
1919
 
  UnloadedModuleListStream   = 14;
1920
 
  {$EXTERNALSYM UnloadedModuleListStream}
1921
 
  MiscInfoStream             = 15;
1922
 
  {$EXTERNALSYM MiscInfoStream}
1923
 
 
1924
 
  LastReservedStream          = $ffff;
1925
 
  {$EXTERNALSYM LastReservedStream}
1926
 
 
1927
 
type
1928
 
  _MINIDUMP_STREAM_TYPE = DWORD;
1929
 
  {$EXTERNALSYM MINIDUMP_STREAM_TYPE}
1930
 
  MINIDUMP_STREAM_TYPE = _MINIDUMP_STREAM_TYPE;
1931
 
  {$EXTERNALSYM _MINIDUMP_STREAM_TYPE}
1932
 
  TMinidumpStreamType = MINIDUMP_STREAM_TYPE;
1933
 
 
1934
 
//
1935
 
// The minidump system information contains processor and
1936
 
// Operating System specific information.
1937
 
//
1938
 
 
1939
 
type
1940
 
  _CPU_INFORMATION = record
1941
 
    case Integer of
1942
 
 
1943
 
        //
1944
 
        // X86 platforms use CPUID function to obtain processor information.
1945
 
        //
1946
 
 
1947
 
        0: (
1948
 
 
1949
 
          //
1950
 
          // CPUID Subfunction 0, register EAX (VendorId [0]),
1951
 
          // EBX (VendorId [1]) and ECX (VendorId [2]).
1952
 
          //
1953
 
 
1954
 
          VendorId: array [0..2] of ULONG32;
1955
 
 
1956
 
          //
1957
 
          // CPUID Subfunction 1, register EAX
1958
 
          //
1959
 
 
1960
 
          VersionInformation: ULONG32;
1961
 
 
1962
 
          //
1963
 
          // CPUID Subfunction 1, register EDX
1964
 
          //
1965
 
 
1966
 
          FeatureInformation: ULONG32;
1967
 
 
1968
 
          //
1969
 
          // CPUID, Subfunction 80000001, register EBX. This will only
1970
 
          // be obtained if the vendor id is "AuthenticAMD".
1971
 
          //
1972
 
 
1973
 
          AMDExtendedCpuFeatures: ULONG32);
1974
 
 
1975
 
        //
1976
 
        // Non-x86 platforms use processor feature flags.
1977
 
        //
1978
 
 
1979
 
        1: (
1980
 
          ProcessorFeatures: array [0..1] of ULONG64);
1981
 
    end;
1982
 
 
1983
 
  _MINIDUMP_SYSTEM_INFO = record
1984
 
 
1985
 
    //
1986
 
    // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all
1987
 
    // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ).
1988
 
    //
1989
 
 
1990
 
    ProcessorArchitecture: USHORT;
1991
 
    ProcessorLevel: USHORT;
1992
 
    ProcessorRevision: USHORT;
1993
 
 
1994
 
    U: record
1995
 
    case Integer of
1996
 
      0: (Reserved0: USHORT);
1997
 
      1: (
1998
 
        NumberOfProcessors: UCHAR;
1999
 
        ProductType: UCHAR);
2000
 
    end;
2001
 
 
2002
 
    //
2003
 
    // MajorVersion, MinorVersion, BuildNumber, PlatformId and
2004
 
    // CSDVersion are all taken from the OSVERSIONINFO structure
2005
 
    // returned by GetVersionEx( ).
2006
 
    //
2007
 
 
2008
 
    MajorVersion: ULONG32;
2009
 
    MinorVersion: ULONG32;
2010
 
    BuildNumber: ULONG32;
2011
 
    PlatformId: ULONG32;
2012
 
 
2013
 
    //
2014
 
    // RVA to a CSDVersion string in the string table.
2015
 
    //
2016
 
 
2017
 
    CSDVersionRva: RVA;
2018
 
 
2019
 
    U2: record
2020
 
    case Integer of
2021
 
      0: (Reserved1: ULONG32);
2022
 
      1: (
2023
 
        SuiteMask: USHORT;
2024
 
        Reserved2: USHORT);
2025
 
    end;
2026
 
    
2027
 
    //
2028
 
    // CPU information is obtained from one of two places.
2029
 
    //
2030
 
    //  1) On x86 computers, CPU_INFORMATION is obtained from the CPUID
2031
 
    //     instruction. You must use the X86 portion of the union for X86
2032
 
    //     computers.
2033
 
    //
2034
 
    //  2) On non-x86 architectures, CPU_INFORMATION is obtained by calling
2035
 
    //     IsProcessorFeatureSupported().
2036
 
    //
2037
 
 
2038
 
    Cpu: _CPU_INFORMATION;
2039
 
  end;
2040
 
  {$EXTERNALSYM _MINIDUMP_SYSTEM_INFO}
2041
 
  MINIDUMP_SYSTEM_INFO = _MINIDUMP_SYSTEM_INFO;
2042
 
  {$EXTERNALSYM MINIDUMP_SYSTEM_INFO}
2043
 
  PMINIDUMP_SYSTEM_INFO = ^MINIDUMP_SYSTEM_INFO;
2044
 
  {$EXTERNALSYM PMINIDUMP_SYSTEM_INFO}
2045
 
  TMinidumpSystemInfo = MINIDUMP_SYSTEM_INFO;
2046
 
  PMinidumpSystemInfo = PMINIDUMP_SYSTEM_INFO;
2047
 
 
2048
 
  CPU_INFORMATION = _CPU_INFORMATION;
2049
 
  {$EXTERNALSYM CPU_INFORMATION}
2050
 
  PCPU_INFORMATION = CPU_INFORMATION;
2051
 
  {$EXTERNALSYM PCPU_INFORMATION}
2052
 
 
2053
 
//
2054
 
// The minidump thread contains standard thread
2055
 
// information plus an RVA to the memory for this 
2056
 
// thread and an RVA to the CONTEXT structure for
2057
 
// this thread.
2058
 
//
2059
 
 
2060
 
//
2061
 
// ThreadId must be 4 bytes on all architectures.
2062
 
//
2063
 
 
2064
 
// C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4);
2065
 
 
2066
 
type
2067
 
  PMINIDUMP_THREAD = ^MINIDUMP_THREAD;
2068
 
  {$EXTERNALSYM PMINIDUMP_THREAD}
2069
 
  _MINIDUMP_THREAD = record
2070
 
    ThreadId: ULONG32;
2071
 
    SuspendCount: ULONG32;
2072
 
    PriorityClass: ULONG32;
2073
 
    Priority: ULONG32;
2074
 
    Teb: ULONG64;
2075
 
    Stack: MINIDUMP_MEMORY_DESCRIPTOR;
2076
 
    ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR;
2077
 
  end;
2078
 
  {$EXTERNALSYM _MINIDUMP_THREAD}
2079
 
  MINIDUMP_THREAD = _MINIDUMP_THREAD;
2080
 
  {$EXTERNALSYM MINIDUMP_THREAD}
2081
 
  TMinidumpThread = MINIDUMP_THREAD;
2082
 
  PMinidumpThread = PMINIDUMP_THREAD;
2083
 
 
2084
 
//
2085
 
// The thread list is a container of threads.
2086
 
//
2087
 
 
2088
 
  PMINIDUMP_THREAD_LIST = ^MINIDUMP_THREAD_LIST;
2089
 
  {$EXTERNALSYM PMINIDUMP_THREAD_LIST}
2090
 
  _MINIDUMP_THREAD_LIST = record
2091
 
    NumberOfThreads: ULONG32;
2092
 
    Threads: array [0..0] of MINIDUMP_THREAD;
2093
 
  end;
2094
 
  {$EXTERNALSYM _MINIDUMP_THREAD_LIST}
2095
 
  MINIDUMP_THREAD_LIST = _MINIDUMP_THREAD_LIST;
2096
 
  {$EXTERNALSYM MINIDUMP_THREAD_LIST}
2097
 
  TMinidumpThreadList = MINIDUMP_THREAD_LIST;
2098
 
  PMinidumpThreadList = PMINIDUMP_THREAD_LIST;
2099
 
 
2100
 
  PMINIDUMP_THREAD_EX = ^MINIDUMP_THREAD_EX;
2101
 
  {$EXTERNALSYM PMINIDUMP_THREAD_EX}
2102
 
  _MINIDUMP_THREAD_EX = record
2103
 
    ThreadId: ULONG32;
2104
 
    SuspendCount: ULONG32;
2105
 
    PriorityClass: ULONG32;
2106
 
    Priority: ULONG32;
2107
 
    Teb: ULONG64;
2108
 
    Stack: MINIDUMP_MEMORY_DESCRIPTOR;
2109
 
    ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR;
2110
 
    BackingStore: MINIDUMP_MEMORY_DESCRIPTOR;
2111
 
  end;
2112
 
  {$EXTERNALSYM _MINIDUMP_THREAD_EX}
2113
 
  MINIDUMP_THREAD_EX = _MINIDUMP_THREAD_EX;
2114
 
  {$EXTERNALSYM MINIDUMP_THREAD_EX}
2115
 
  TMinidumpThreadEx = MINIDUMP_THREAD_EX;
2116
 
  PMinidumpThreadEx = PMINIDUMP_THREAD_EX;
2117
 
 
2118
 
//
2119
 
// The thread list is a container of threads.
2120
 
//
2121
 
 
2122
 
  PMINIDUMP_THREAD_EX_LIST = ^MINIDUMP_THREAD_EX_LIST;
2123
 
  {$EXTERNALSYM PMINIDUMP_THREAD_EX_LIST}
2124
 
  _MINIDUMP_THREAD_EX_LIST = record
2125
 
    NumberOfThreads: ULONG32;
2126
 
    Threads: array [0..0] of MINIDUMP_THREAD_EX;
2127
 
  end;
2128
 
  {$EXTERNALSYM _MINIDUMP_THREAD_EX_LIST}
2129
 
  MINIDUMP_THREAD_EX_LIST = _MINIDUMP_THREAD_EX_LIST;
2130
 
  {$EXTERNALSYM MINIDUMP_THREAD_EX_LIST}
2131
 
  TMinidumpThreadExList = MINIDUMP_THREAD_EX_LIST;
2132
 
  PMinidumpThreadExList = PMINIDUMP_THREAD_EX_LIST;
2133
 
 
2134
 
//
2135
 
// The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64.
2136
 
//
2137
 
 
2138
 
  PMINIDUMP_EXCEPTION = ^MINIDUMP_EXCEPTION;
2139
 
  {$EXTERNALSYM PMINIDUMP_EXCEPTION}
2140
 
  _MINIDUMP_EXCEPTION = record
2141
 
    ExceptionCode: ULONG32;
2142
 
    ExceptionFlags: ULONG32;
2143
 
    ExceptionRecord: ULONG64;
2144
 
    ExceptionAddress: ULONG64;
2145
 
    NumberParameters: ULONG32;
2146
 
    __unusedAlignment: ULONG32;
2147
 
    ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of ULONG64;
2148
 
  end;
2149
 
  {$EXTERNALSYM _MINIDUMP_EXCEPTION}
2150
 
  MINIDUMP_EXCEPTION = _MINIDUMP_EXCEPTION;
2151
 
  {$EXTERNALSYM MINIDUMP_EXCEPTION}
2152
 
  TMinidumpException = MINIDUMP_EXCEPTION;
2153
 
  PMinidumpException = PMINIDUMP_EXCEPTION;
2154
 
 
2155
 
//
2156
 
// The exception information stream contains the id of the thread that caused
2157
 
// the exception (ThreadId), the exception record for the exception
2158
 
// (ExceptionRecord) and an RVA to the thread context where the exception
2159
 
// occured.
2160
 
//
2161
 
 
2162
 
  PMINIDUMP_EXCEPTION_STREAM = ^MINIDUMP_EXCEPTION_STREAM;
2163
 
  {$EXTERNALSYM PMINIDUMP_EXCEPTION_STREAM}
2164
 
  _MINIDUMP_EXCEPTION_STREAM = record
2165
 
    ThreadId: ULONG32;
2166
 
    __alignment: ULONG32;
2167
 
    ExceptionRecord: MINIDUMP_EXCEPTION;
2168
 
    ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR;
2169
 
  end;
2170
 
  {$EXTERNALSYM _MINIDUMP_EXCEPTION_STREAM}
2171
 
  MINIDUMP_EXCEPTION_STREAM = _MINIDUMP_EXCEPTION_STREAM;
2172
 
  {$EXTERNALSYM MINIDUMP_EXCEPTION_STREAM}
2173
 
  TMinidumpExceptionStream = MINIDUMP_EXCEPTION_STREAM;
2174
 
  PMinidumpExceptionStream = PMINIDUMP_EXCEPTION_STREAM;
2175
 
 
2176
 
//
2177
 
// The MINIDUMP_MODULE contains information about a
2178
 
// a specific module. It includes the CheckSum and
2179
 
// the TimeDateStamp for the module so the module
2180
 
// can be reloaded during the analysis phase.
2181
 
//
2182
 
 
2183
 
  PMINIDUMP_MODULE = ^MINIDUMP_MODULE;
2184
 
  {$EXTERNALSYM PMINIDUMP_MODULE}
2185
 
  _MINIDUMP_MODULE = record
2186
 
    BaseOfImage: ULONG64;
2187
 
    SizeOfImage: ULONG32;
2188
 
    CheckSum: ULONG32;
2189
 
    TimeDateStamp: ULONG32;
2190
 
    ModuleNameRva: RVA;
2191
 
    VersionInfo: VS_FIXEDFILEINFO;
2192
 
    CvRecord: MINIDUMP_LOCATION_DESCRIPTOR;
2193
 
    MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR;
2194
 
    Reserved0: ULONG64; // Reserved for future use.
2195
 
    Reserved1: ULONG64; // Reserved for future use.
2196
 
  end;
2197
 
  {$EXTERNALSYM _MINIDUMP_MODULE}
2198
 
  MINIDUMP_MODULE = _MINIDUMP_MODULE;
2199
 
  {$EXTERNALSYM MINIDUMP_MODULE}
2200
 
  TMinidumpModule = MINIDUMP_MODULE;
2201
 
  PMinidumpModule = PMINIDUMP_MODULE;
2202
 
 
2203
 
//
2204
 
// The minidump module list is a container for modules.
2205
 
//
2206
 
 
2207
 
  PMINIDUMP_MODULE_LIST = ^MINIDUMP_MODULE_LIST;
2208
 
  {$EXTERNALSYM PMINIDUMP_MODULE_LIST}
2209
 
  _MINIDUMP_MODULE_LIST = record
2210
 
    NumberOfModules: ULONG32;
2211
 
    Modules: array [0..0] of MINIDUMP_MODULE;
2212
 
  end;
2213
 
  {$EXTERNALSYM _MINIDUMP_MODULE_LIST}
2214
 
  MINIDUMP_MODULE_LIST = _MINIDUMP_MODULE_LIST;
2215
 
  {$EXTERNALSYM MINIDUMP_MODULE_LIST}
2216
 
  TMinidumpModuleList = MINIDUMP_MODULE_LIST;
2217
 
  PMinidumpModuleList = PMINIDUMP_MODULE_LIST;
2218
 
 
2219
 
//
2220
 
// Memory Ranges
2221
 
//
2222
 
 
2223
 
  PMINIDUMP_MEMORY_LIST = ^MINIDUMP_MEMORY_LIST;
2224
 
  {$EXTERNALSYM PMINIDUMP_MEMORY_LIST}
2225
 
  _MINIDUMP_MEMORY_LIST = record
2226
 
    NumberOfMemoryRanges: ULONG32;
2227
 
    MemoryRanges: array [0..0] of MINIDUMP_MEMORY_DESCRIPTOR;
2228
 
  end;
2229
 
  {$EXTERNALSYM _MINIDUMP_MEMORY_LIST}
2230
 
  MINIDUMP_MEMORY_LIST = _MINIDUMP_MEMORY_LIST;
2231
 
  {$EXTERNALSYM MINIDUMP_MEMORY_LIST}
2232
 
  TMinidumpMemoryList = MINIDUMP_MEMORY_LIST;
2233
 
  PMinidumpMemoryList = PMINIDUMP_MEMORY_LIST;
2234
 
 
2235
 
  PMINIDUMP_MEMORY64_LIST = ^MINIDUMP_MEMORY64_LIST;
2236
 
  {$EXTERNALSYM PMINIDUMP_MEMORY64_LIST}
2237
 
  _MINIDUMP_MEMORY64_LIST = record
2238
 
    NumberOfMemoryRanges: ULONG64;
2239
 
    BaseRva: RVA64;
2240
 
    MemoryRanges: array [0..0] of MINIDUMP_MEMORY_DESCRIPTOR64;
2241
 
  end;
2242
 
  {$EXTERNALSYM _MINIDUMP_MEMORY64_LIST}
2243
 
  MINIDUMP_MEMORY64_LIST = _MINIDUMP_MEMORY64_LIST;
2244
 
  {$EXTERNALSYM MINIDUMP_MEMORY64_LIST}
2245
 
  TMinidumpMemory64List = MINIDUMP_MEMORY64_LIST;
2246
 
  PMinidumpMemory64List = PMINIDUMP_MEMORY64_LIST;
2247
 
 
2248
 
//
2249
 
// Support for user supplied exception information.
2250
 
//
2251
 
 
2252
 
  PMINIDUMP_EXCEPTION_INFORMATION = ^MINIDUMP_EXCEPTION_INFORMATION;
2253
 
  {$EXTERNALSYM PMINIDUMP_EXCEPTION_INFORMATION}
2254
 
  _MINIDUMP_EXCEPTION_INFORMATION = record
2255
 
    ThreadId: DWORD;
2256
 
    ExceptionPointers: PEXCEPTION_POINTERS;
2257
 
    ClientPointers: BOOL;
2258
 
  end;
2259
 
  {$EXTERNALSYM _MINIDUMP_EXCEPTION_INFORMATION}
2260
 
  MINIDUMP_EXCEPTION_INFORMATION = _MINIDUMP_EXCEPTION_INFORMATION;
2261
 
  {$EXTERNALSYM MINIDUMP_EXCEPTION_INFORMATION}
2262
 
  TMinidumpExceptionInformation = MINIDUMP_EXCEPTION_INFORMATION;
2263
 
  PMinidumpExceptionInformation = PMINIDUMP_EXCEPTION_INFORMATION;
2264
 
 
2265
 
//
2266
 
// Support for capturing system handle state at the time of the dump.
2267
 
//
2268
 
 
2269
 
  PMINIDUMP_HANDLE_DESCRIPTOR = ^MINIDUMP_HANDLE_DESCRIPTOR;
2270
 
  {$EXTERNALSYM PMINIDUMP_HANDLE_DESCRIPTOR}
2271
 
  _MINIDUMP_HANDLE_DESCRIPTOR = record
2272
 
    Handle: ULONG64;
2273
 
    TypeNameRva: RVA;
2274
 
    ObjectNameRva: RVA;
2275
 
    Attributes: ULONG32;
2276
 
    GrantedAccess: ULONG32;
2277
 
    HandleCount: ULONG32;
2278
 
    PointerCount: ULONG32;
2279
 
  end;
2280
 
  {$EXTERNALSYM _MINIDUMP_HANDLE_DESCRIPTOR}
2281
 
  MINIDUMP_HANDLE_DESCRIPTOR = _MINIDUMP_HANDLE_DESCRIPTOR;
2282
 
  {$EXTERNALSYM MINIDUMP_HANDLE_DESCRIPTOR}
2283
 
  TMinidumpHandleDescriptor = MINIDUMP_HANDLE_DESCRIPTOR;
2284
 
  PMinidumpHandleDescriptor = PMINIDUMP_HANDLE_DESCRIPTOR;
2285
 
 
2286
 
  PMINIDUMP_HANDLE_DATA_STREAM = ^MINIDUMP_HANDLE_DATA_STREAM;
2287
 
  {$EXTERNALSYM PMINIDUMP_HANDLE_DATA_STREAM}
2288
 
  _MINIDUMP_HANDLE_DATA_STREAM = record
2289
 
    SizeOfHeader: ULONG32;
2290
 
    SizeOfDescriptor: ULONG32;
2291
 
    NumberOfDescriptors: ULONG32;
2292
 
    Reserved: ULONG32;
2293
 
  end;
2294
 
  {$EXTERNALSYM _MINIDUMP_HANDLE_DATA_STREAM}
2295
 
  MINIDUMP_HANDLE_DATA_STREAM = _MINIDUMP_HANDLE_DATA_STREAM;
2296
 
  {$EXTERNALSYM MINIDUMP_HANDLE_DATA_STREAM}
2297
 
  TMinidumpHandleDataStream = MINIDUMP_HANDLE_DATA_STREAM;
2298
 
  PMinidumpHandleDataStream = PMINIDUMP_HANDLE_DATA_STREAM;
2299
 
 
2300
 
//
2301
 
// Support for capturing dynamic function table state at the time of the dump.
2302
 
//
2303
 
 
2304
 
  PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = ^MINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
2305
 
  {$EXTERNALSYM PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR}
2306
 
  _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = record
2307
 
    MinimumAddress: ULONG64;
2308
 
    MaximumAddress: ULONG64;
2309
 
    BaseAddress: ULONG64;
2310
 
    EntryCount: ULONG32;
2311
 
    SizeOfAlignPad: ULONG32;
2312
 
  end;
2313
 
  {$EXTERNALSYM _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR}
2314
 
  MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
2315
 
  {$EXTERNALSYM MINIDUMP_FUNCTION_TABLE_DESCRIPTOR}
2316
 
  TMinidumpFunctionTableDescriptor = MINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
2317
 
  PMinidumpFunctionTableDescriptor = PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
2318
 
 
2319
 
  PMINIDUMP_FUNCTION_TABLE_STREAM = ^MINIDUMP_FUNCTION_TABLE_STREAM;
2320
 
  {$EXTERNALSYM PMINIDUMP_FUNCTION_TABLE_STREAM}
2321
 
  _MINIDUMP_FUNCTION_TABLE_STREAM = record
2322
 
    SizeOfHeader: ULONG32;
2323
 
    SizeOfDescriptor: ULONG32;
2324
 
    SizeOfNativeDescriptor: ULONG32;
2325
 
    SizeOfFunctionEntry: ULONG32;
2326
 
    NumberOfDescriptors: ULONG32;
2327
 
    SizeOfAlignPad: ULONG32;
2328
 
  end;
2329
 
  {$EXTERNALSYM _MINIDUMP_FUNCTION_TABLE_STREAM}
2330
 
  MINIDUMP_FUNCTION_TABLE_STREAM = _MINIDUMP_FUNCTION_TABLE_STREAM;
2331
 
  {$EXTERNALSYM MINIDUMP_FUNCTION_TABLE_STREAM}
2332
 
  TMinidumpFunctionTableStream = MINIDUMP_FUNCTION_TABLE_STREAM;
2333
 
  PMinidumpFunctionTableStream = PMINIDUMP_FUNCTION_TABLE_STREAM;
2334
 
 
2335
 
//
2336
 
// The MINIDUMP_UNLOADED_MODULE contains information about a
2337
 
// a specific module that was previously loaded but no
2338
 
// longer is.  This can help with diagnosing problems where
2339
 
// callers attempt to call code that is no longer loaded.
2340
 
//
2341
 
 
2342
 
  _MINIDUMP_UNLOADED_MODULE = record
2343
 
    BaseOfImage: ULONG64;
2344
 
    SizeOfImage: ULONG32;
2345
 
    CheckSum: ULONG32;
2346
 
    TimeDateStamp: ULONG32;
2347
 
    ModuleNameRva: RVA;
2348
 
  end;
2349
 
  {$EXTERNALSYM _MINIDUMP_UNLOADED_MODULE}
2350
 
  MINIDUMP_UNLOADED_MODULE = _MINIDUMP_UNLOADED_MODULE;
2351
 
  {$EXTERNALSYM MINIDUMP_UNLOADED_MODULE}
2352
 
  PMINIDUMP_UNLOADED_MODULE = ^MINIDUMP_UNLOADED_MODULE;
2353
 
  {$EXTERNALSYM PMINIDUMP_UNLOADED_MODULE}
2354
 
  TMiniDumpUnloadedModule = MINIDUMP_UNLOADED_MODULE;
2355
 
  PMiniDumpUnloadedModule = PMINIDUMP_UNLOADED_MODULE;
2356
 
 
2357
 
//
2358
 
// The minidump unloaded module list is a container for unloaded modules.
2359
 
//
2360
 
 
2361
 
  _MINIDUMP_UNLOADED_MODULE_LIST = record
2362
 
    SizeOfHeader: ULONG32;
2363
 
    SizeOfEntry: ULONG32;
2364
 
    NumberOfEntries: ULONG32;
2365
 
  end;
2366
 
  {$EXTERNALSYM _MINIDUMP_UNLOADED_MODULE_LIST}
2367
 
  MINIDUMP_UNLOADED_MODULE_LIST = _MINIDUMP_UNLOADED_MODULE_LIST;
2368
 
  {$EXTERNALSYM MINIDUMP_UNLOADED_MODULE_LIST}
2369
 
  PMINIDUMP_UNLOADED_MODULE_LIST = ^MINIDUMP_UNLOADED_MODULE_LIST;
2370
 
  {$EXTERNALSYM PMINIDUMP_UNLOADED_MODULE_LIST}
2371
 
  TMiniDumpUnloadedModuleList = MINIDUMP_UNLOADED_MODULE_LIST;
2372
 
  PMiniDumpUnloadedModuleList = PMINIDUMP_UNLOADED_MODULE_LIST;
2373
 
 
2374
 
//
2375
 
// The miscellaneous information stream contains a variety
2376
 
// of small pieces of information.  A member is valid if
2377
 
// it's within the available size and its corresponding
2378
 
// bit is set.
2379
 
//
2380
 
 
2381
 
const
2382
 
  MINIDUMP_MISC1_PROCESS_ID    = $00000001;
2383
 
  {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_ID}
2384
 
  MINIDUMP_MISC1_PROCESS_TIMES = $00000002;
2385
 
  {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_TIMES}
2386
 
 
2387
 
type
2388
 
  _MINIDUMP_MISC_INFO = record
2389
 
    SizeOfInfo: ULONG32;
2390
 
    Flags1: ULONG32;
2391
 
    ProcessId: ULONG32;
2392
 
    ProcessCreateTime: ULONG32;
2393
 
    ProcessUserTime: ULONG32;
2394
 
    ProcessKernelTime: ULONG32;
2395
 
  end;
2396
 
  {$EXTERNALSYM _MINIDUMP_MISC_INFO}
2397
 
  MINIDUMP_MISC_INFO = _MINIDUMP_MISC_INFO;
2398
 
  {$EXTERNALSYM MINIDUMP_MISC_INFO}
2399
 
  PMINIDUMP_MISC_INFO = ^MINIDUMP_MISC_INFO;
2400
 
  {$EXTERNALSYM PMINIDUMP_MISC_INFO}
2401
 
  TMiniDumpMiscInfo = MINIDUMP_MISC_INFO;
2402
 
  PMiniDumpMiscInfo = PMINIDUMP_MISC_INFO;
2403
 
 
2404
 
//
2405
 
// Support for arbitrary user-defined information.
2406
 
//
2407
 
 
2408
 
  PMINIDUMP_USER_RECORD = ^MINIDUMP_USER_RECORD;
2409
 
  {$EXTERNALSYM PMINIDUMP_USER_RECORD}
2410
 
  _MINIDUMP_USER_RECORD = record
2411
 
    Type_: ULONG32;
2412
 
    Memory: MINIDUMP_LOCATION_DESCRIPTOR;
2413
 
  end;
2414
 
  {$EXTERNALSYM _MINIDUMP_USER_RECORD}
2415
 
  MINIDUMP_USER_RECORD = _MINIDUMP_USER_RECORD;
2416
 
  {$EXTERNALSYM MINIDUMP_USER_RECORD}
2417
 
  TMinidumpUserRecord = MINIDUMP_USER_RECORD;
2418
 
  PMinidumpUserRecord = PMINIDUMP_USER_RECORD;
2419
 
 
2420
 
  PMINIDUMP_USER_STREAM = ^MINIDUMP_USER_STREAM;
2421
 
  {$EXTERNALSYM PMINIDUMP_USER_STREAM}
2422
 
  _MINIDUMP_USER_STREAM = record
2423
 
    Type_: ULONG32;
2424
 
    BufferSize: ULONG;
2425
 
    Buffer: PVOID;
2426
 
  end;
2427
 
  {$EXTERNALSYM _MINIDUMP_USER_STREAM}
2428
 
  MINIDUMP_USER_STREAM = _MINIDUMP_USER_STREAM;
2429
 
  {$EXTERNALSYM MINIDUMP_USER_STREAM}
2430
 
  TMinidumpUserStream = MINIDUMP_USER_STREAM;
2431
 
  PMinidumpUserStream = PMINIDUMP_USER_STREAM;
2432
 
 
2433
 
  PMINIDUMP_USER_STREAM_INFORMATION = ^MINIDUMP_USER_STREAM_INFORMATION;
2434
 
  {$EXTERNALSYM PMINIDUMP_USER_STREAM_INFORMATION}
2435
 
  _MINIDUMP_USER_STREAM_INFORMATION = record
2436
 
    UserStreamCount: ULONG;
2437
 
    UserStreamArray: PMINIDUMP_USER_STREAM;
2438
 
  end;
2439
 
  {$EXTERNALSYM _MINIDUMP_USER_STREAM_INFORMATION}
2440
 
  MINIDUMP_USER_STREAM_INFORMATION = _MINIDUMP_USER_STREAM_INFORMATION;
2441
 
  {$EXTERNALSYM MINIDUMP_USER_STREAM_INFORMATION}
2442
 
  TMinidumpUserStreamInformation = MINIDUMP_USER_STREAM_INFORMATION;
2443
 
  PMinidumpUserStreamInformation = PMINIDUMP_USER_STREAM_INFORMATION;
2444
 
 
2445
 
//
2446
 
// Callback support.
2447
 
//
2448
 
 
2449
 
  _MINIDUMP_CALLBACK_TYPE = (
2450
 
    ModuleCallback,
2451
 
    ThreadCallback,
2452
 
    ThreadExCallback,
2453
 
    IncludeThreadCallback,
2454
 
    IncludeModuleCallback);
2455
 
  {$EXTERNALSYM _MINIDUMP_CALLBACK_TYPE}
2456
 
  MINIDUMP_CALLBACK_TYPE = _MINIDUMP_CALLBACK_TYPE;
2457
 
  {$EXTERNALSYM MINIDUMP_CALLBACK_TYPE}
2458
 
  TMinidumpCallbackType = MINIDUMP_CALLBACK_TYPE;
2459
 
 
2460
 
  PMINIDUMP_THREAD_CALLBACK = ^MINIDUMP_THREAD_CALLBACK;
2461
 
  {$EXTERNALSYM PMINIDUMP_THREAD_CALLBACK}
2462
 
  _MINIDUMP_THREAD_CALLBACK = record
2463
 
    ThreadId: ULONG;
2464
 
    ThreadHandle: HANDLE;
2465
 
    Context: CONTEXT;
2466
 
    SizeOfContext: ULONG;
2467
 
    StackBase: ULONG64;
2468
 
    StackEnd: ULONG64;
2469
 
  end;
2470
 
  {$EXTERNALSYM _MINIDUMP_THREAD_CALLBACK}
2471
 
  MINIDUMP_THREAD_CALLBACK = _MINIDUMP_THREAD_CALLBACK;
2472
 
  {$EXTERNALSYM MINIDUMP_THREAD_CALLBACK}
2473
 
  TMinidumpThreadCallback = MINIDUMP_THREAD_CALLBACK;
2474
 
  PMinidumpThreadCallback = PMINIDUMP_THREAD_CALLBACK;
2475
 
 
2476
 
  PMINIDUMP_THREAD_EX_CALLBACK = ^MINIDUMP_THREAD_EX_CALLBACK;
2477
 
  {$EXTERNALSYM PMINIDUMP_THREAD_EX_CALLBACK}
2478
 
  _MINIDUMP_THREAD_EX_CALLBACK = record
2479
 
    ThreadId: ULONG;
2480
 
    ThreadHandle: HANDLE;
2481
 
    Context: CONTEXT;
2482
 
    SizeOfContext: ULONG;
2483
 
    StackBase: ULONG64;
2484
 
    StackEnd: ULONG64;
2485
 
    BackingStoreBase: ULONG64;
2486
 
    BackingStoreEnd: ULONG64;
2487
 
  end;
2488
 
  {$EXTERNALSYM _MINIDUMP_THREAD_EX_CALLBACK}
2489
 
  MINIDUMP_THREAD_EX_CALLBACK = _MINIDUMP_THREAD_EX_CALLBACK;
2490
 
  {$EXTERNALSYM MINIDUMP_THREAD_EX_CALLBACK}
2491
 
  TMinidumpThreadExCallback = MINIDUMP_THREAD_EX_CALLBACK;
2492
 
  PMinidumpThreadExCallback = PMINIDUMP_THREAD_EX_CALLBACK;
2493
 
 
2494
 
  PMINIDUMP_INCLUDE_THREAD_CALLBACK = ^MINIDUMP_INCLUDE_THREAD_CALLBACK;
2495
 
  {$EXTERNALSYM PMINIDUMP_INCLUDE_THREAD_CALLBACK}
2496
 
  _MINIDUMP_INCLUDE_THREAD_CALLBACK = record
2497
 
    ThreadId: ULONG;
2498
 
  end;
2499
 
  {$EXTERNALSYM _MINIDUMP_INCLUDE_THREAD_CALLBACK}
2500
 
  MINIDUMP_INCLUDE_THREAD_CALLBACK = _MINIDUMP_INCLUDE_THREAD_CALLBACK;
2501
 
  {$EXTERNALSYM MINIDUMP_INCLUDE_THREAD_CALLBACK}
2502
 
  TMinidumpIncludeThreadCallback = MINIDUMP_INCLUDE_THREAD_CALLBACK;
2503
 
  PMinidumpIncludeThreadCallback = PMINIDUMP_INCLUDE_THREAD_CALLBACK;
2504
 
 
2505
 
const
2506
 
  ThreadWriteThread            = $0001;
2507
 
  {$EXTERNALSYM ThreadWriteThread}
2508
 
  ThreadWriteStack             = $0002;
2509
 
  {$EXTERNALSYM ThreadWriteStack}
2510
 
  ThreadWriteContext           = $0004;
2511
 
  {$EXTERNALSYM ThreadWriteContext}
2512
 
  ThreadWriteBackingStore      = $0008;
2513
 
  {$EXTERNALSYM ThreadWriteBackingStore}
2514
 
  ThreadWriteInstructionWindow = $0010;
2515
 
  {$EXTERNALSYM ThreadWriteInstructionWindow}
2516
 
  ThreadWriteThreadData        = $0020;
2517
 
  {$EXTERNALSYM ThreadWriteThreadData}
2518
 
 
2519
 
type
2520
 
  _THREAD_WRITE_FLAGS = DWORD;
2521
 
  {$EXTERNALSYM _THREAD_WRITE_FLAGS}
2522
 
  THREAD_WRITE_FLAGS = _THREAD_WRITE_FLAGS;
2523
 
  {$EXTERNALSYM THREAD_WRITE_FLAGS}
2524
 
  TThreadWriteFlags = THREAD_WRITE_FLAGS;
2525
 
 
2526
 
type
2527
 
  PMINIDUMP_MODULE_CALLBACK = ^MINIDUMP_MODULE_CALLBACK;
2528
 
  {$EXTERNALSYM PMINIDUMP_MODULE_CALLBACK}
2529
 
  _MINIDUMP_MODULE_CALLBACK = record
2530
 
    FullPath: PWCHAR;
2531
 
    BaseOfImage: ULONG64;
2532
 
    SizeOfImage: ULONG;
2533
 
    CheckSum: ULONG;
2534
 
    TimeDateStamp: ULONG;
2535
 
    VersionInfo: VS_FIXEDFILEINFO;
2536
 
    CvRecord: PVOID;
2537
 
    SizeOfCvRecord: ULONG;
2538
 
    MiscRecord: PVOID;
2539
 
    SizeOfMiscRecord: ULONG;
2540
 
  end;
2541
 
  {$EXTERNALSYM _MINIDUMP_MODULE_CALLBACK}
2542
 
  MINIDUMP_MODULE_CALLBACK = _MINIDUMP_MODULE_CALLBACK;
2543
 
  {$EXTERNALSYM MINIDUMP_MODULE_CALLBACK}
2544
 
  TMinidumpModuleCallback = MINIDUMP_MODULE_CALLBACK;
2545
 
  PMinidumpModuleCallback = PMINIDUMP_MODULE_CALLBACK;
2546
 
 
2547
 
  PMINIDUMP_INCLUDE_MODULE_CALLBACK = ^MINIDUMP_INCLUDE_MODULE_CALLBACK;
2548
 
  {$EXTERNALSYM PMINIDUMP_INCLUDE_MODULE_CALLBACK}
2549
 
  _MINIDUMP_INCLUDE_MODULE_CALLBACK = record
2550
 
    BaseOfImage: ULONG64;
2551
 
  end;
2552
 
  {$EXTERNALSYM _MINIDUMP_INCLUDE_MODULE_CALLBACK}
2553
 
  MINIDUMP_INCLUDE_MODULE_CALLBACK = _MINIDUMP_INCLUDE_MODULE_CALLBACK;
2554
 
  {$EXTERNALSYM MINIDUMP_INCLUDE_MODULE_CALLBACK}
2555
 
  TMinidumpIncludeModuleCallback = MINIDUMP_INCLUDE_MODULE_CALLBACK;
2556
 
  PMinidumpIncludeModuleCallback = PMINIDUMP_INCLUDE_MODULE_CALLBACK;
2557
 
 
2558
 
const
2559
 
  ModuleWriteModule        = $0001;
2560
 
  {$EXTERNALSYM ModuleWriteModule}
2561
 
  ModuleWriteDataSeg       = $0002;
2562
 
  {$EXTERNALSYM ModuleWriteDataSeg}
2563
 
  ModuleWriteMiscRecord    = $0004;
2564
 
  {$EXTERNALSYM ModuleWriteMiscRecord}
2565
 
  ModuleWriteCvRecord      = $0008;
2566
 
  {$EXTERNALSYM ModuleWriteCvRecord}
2567
 
  ModuleReferencedByMemory = $0010;
2568
 
  {$EXTERNALSYM ModuleReferencedByMemory}
2569
 
 
2570
 
type
2571
 
  _MODULE_WRITE_FLAGS = DWORD;
2572
 
  {$EXTERNALSYM _MODULE_WRITE_FLAGS}
2573
 
  MODULE_WRITE_FLAGS = _MODULE_WRITE_FLAGS;
2574
 
  {$EXTERNALSYM MODULE_WRITE_FLAGS}
2575
 
  TModuleWriteFlags = MODULE_WRITE_FLAGS;
2576
 
 
2577
 
  _MINIDUMP_CALLBACK_INPUT = record
2578
 
    ProcessId: ULONG;
2579
 
    ProcessHandle: HANDLE;
2580
 
    CallbackType: ULONG;
2581
 
    case Integer of
2582
 
      0: (Thread: MINIDUMP_THREAD_CALLBACK);
2583
 
      1: (ThreadEx: MINIDUMP_THREAD_EX_CALLBACK);
2584
 
      2: (Module: MINIDUMP_MODULE_CALLBACK);
2585
 
      3: (IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK);
2586
 
      4: (IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK);
2587
 
  end;
2588
 
  {$EXTERNALSYM _MINIDUMP_CALLBACK_INPUT}
2589
 
  MINIDUMP_CALLBACK_INPUT = _MINIDUMP_CALLBACK_INPUT;
2590
 
  {$EXTERNALSYM MINIDUMP_CALLBACK_INPUT}
2591
 
  PMINIDUMP_CALLBACK_INPUT = ^MINIDUMP_CALLBACK_INPUT;
2592
 
  {$EXTERNALSYM PMINIDUMP_CALLBACK_INPUT}
2593
 
  TminidumpCallbackInput = MINIDUMP_CALLBACK_INPUT;
2594
 
 
2595
 
  PMINIDUMP_CALLBACK_OUTPUT = ^MINIDUMP_CALLBACK_OUTPUT;
2596
 
  {$EXTERNALSYM PMINIDUMP_CALLBACK_OUTPUT}
2597
 
  _MINIDUMP_CALLBACK_OUTPUT = record
2598
 
    case Integer of
2599
 
      0: (ModuleWriteFlags: ULONG);
2600
 
      1: (ThreadWriteFlags: ULONG);
2601
 
  end;
2602
 
  {$EXTERNALSYM _MINIDUMP_CALLBACK_OUTPUT}
2603
 
  MINIDUMP_CALLBACK_OUTPUT = _MINIDUMP_CALLBACK_OUTPUT;
2604
 
  {$EXTERNALSYM MINIDUMP_CALLBACK_OUTPUT}
2605
 
  TMinidumpCallbackOutput = MINIDUMP_CALLBACK_OUTPUT;
2606
 
  PMinidumpCallbackOutput = PMINIDUMP_CALLBACK_OUTPUT;
2607
 
 
2608
 
//
2609
 
// A normal minidump contains just the information
2610
 
// necessary to capture stack traces for all of the
2611
 
// existing threads in a process.
2612
 
//
2613
 
// A minidump with data segments includes all of the data
2614
 
// sections from loaded modules in order to capture
2615
 
// global variable contents.  This can make the dump much
2616
 
// larger if many modules have global data.
2617
 
//
2618
 
// A minidump with full memory includes all of the accessible
2619
 
// memory in the process and can be very large.  A minidump
2620
 
// with full memory always has the raw memory data at the end
2621
 
// of the dump so that the initial structures in the dump can
2622
 
// be mapped directly without having to include the raw
2623
 
// memory information.
2624
 
//
2625
 
// Stack and backing store memory can be filtered to remove
2626
 
// data unnecessary for stack walking.  This can improve
2627
 
// compression of stacks and also deletes data that may
2628
 
// be private and should not be stored in a dump.
2629
 
// Memory can also be scanned to see what modules are
2630
 
// referenced by stack and backing store memory to allow
2631
 
// omission of other modules to reduce dump size.
2632
 
// In either of these modes the ModuleReferencedByMemory flag
2633
 
// is set for all modules referenced before the base
2634
 
// module callbacks occur.
2635
 
//
2636
 
// On some operating systems a list of modules that were
2637
 
// recently unloaded is kept in addition to the currently
2638
 
// loaded module list.  This information can be saved in
2639
 
// the dump if desired.
2640
 
//
2641
 
// Stack and backing store memory can be scanned for referenced
2642
 
// pages in order to pick up data referenced by locals or other
2643
 
// stack memory.  This can increase the size of a dump significantly.
2644
 
//
2645
 
// Module paths may contain undesired information such as user names
2646
 
// or other important directory names so they can be stripped.  This
2647
 
// option reduces the ability to locate the proper image later
2648
 
// and should only be used in certain situations.
2649
 
//
2650
 
// Complete operating system per-process and per-thread information can
2651
 
// be gathered and stored in the dump.
2652
 
//
2653
 
// The virtual address space can be scanned for various types
2654
 
// of memory to be included in the dump.
2655
 
//
2656
 
 
2657
 
const
2658
 
  MiniDumpNormal         = $0000;
2659
 
  {$EXTERNALSYM MiniDumpNormal}
2660
 
  MiniDumpWithDataSegs   = $0001;
2661
 
  {$EXTERNALSYM MiniDumpWithDataSegs}
2662
 
  MiniDumpWithFullMemory = $0002;
2663
 
  {$EXTERNALSYM MiniDumpWithFullMemory}
2664
 
  MiniDumpWithHandleData = $0004;
2665
 
  {$EXTERNALSYM MiniDumpWithHandleData}
2666
 
  MiniDumpFilterMemory   = $0008;
2667
 
  {$EXTERNALSYM MiniDumpFilterMemory}
2668
 
  MiniDumpScanMemory     = $0010;
2669
 
  {$EXTERNALSYM MiniDumpScanMemory}
2670
 
  MiniDumpWithUnloadedModules            = $0020;
2671
 
  {$EXTERNALSYM MiniDumpWithUnloadedModules}
2672
 
  MiniDumpWithIndirectlyReferencedMemory = $0040;
2673
 
  {$EXTERNALSYM MiniDumpWithIndirectlyReferencedMemory}
2674
 
  MiniDumpFilterModulePaths              = $0080;
2675
 
  {$EXTERNALSYM MiniDumpFilterModulePaths}
2676
 
  MiniDumpWithProcessThreadData          = $0100;
2677
 
  {$EXTERNALSYM MiniDumpWithProcessThreadData}
2678
 
  MiniDumpWithPrivateReadWriteMemory     = $0200;
2679
 
  {$EXTERNALSYM MiniDumpWithPrivateReadWriteMemory}
2680
 
 
2681
 
type
2682
 
  _MINIDUMP_TYPE = DWORD;
2683
 
  {$EXTERNALSYM _MINIDUMP_TYPE}
2684
 
  MINIDUMP_TYPE = _MINIDUMP_TYPE;
2685
 
  {$EXTERNALSYM MINIDUMP_TYPE}
2686
 
  TMinidumpType = MINIDUMP_TYPE;
2687
 
 
2688
 
//
2689
 
// The minidump callback should modify the FieldsToWrite parameter to reflect
2690
 
// what portions of the specified thread or module should be written to the
2691
 
// file.
2692
 
//
2693
 
 
2694
 
  MINIDUMP_CALLBACK_ROUTINE = function(CallbackParam: PVOID; CallbackInput: PMINIDUMP_CALLBACK_INPUT;
2695
 
    CallbackOutput: PMINIDUMP_CALLBACK_OUTPUT): BOOL; stdcall;
2696
 
  {$EXTERNALSYM MINIDUMP_CALLBACK_ROUTINE}
2697
 
  TMinidumpCallbackRoutine = MINIDUMP_CALLBACK_ROUTINE;
2698
 
 
2699
 
  PMINIDUMP_CALLBACK_INFORMATION = ^MINIDUMP_CALLBACK_INFORMATION;
2700
 
  {$EXTERNALSYM PMINIDUMP_CALLBACK_INFORMATION}
2701
 
  _MINIDUMP_CALLBACK_INFORMATION = record
2702
 
    CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE;
2703
 
    CallbackParam: PVOID;
2704
 
  end;
2705
 
  {$EXTERNALSYM _MINIDUMP_CALLBACK_INFORMATION}
2706
 
  MINIDUMP_CALLBACK_INFORMATION = _MINIDUMP_CALLBACK_INFORMATION;
2707
 
  {$EXTERNALSYM MINIDUMP_CALLBACK_INFORMATION}
2708
 
  TMinidumpCallbackInformation = MINIDUMP_CALLBACK_INFORMATION;
2709
 
  PMinidumpCallbackInformation = PMINIDUMP_CALLBACK_INFORMATION;
2710
 
 
2711
 
//++
2712
 
//
2713
 
// PVOID
2714
 
// RVA_TO_ADDR(
2715
 
//     PVOID Mapping,
2716
 
//     ULONG Rva
2717
 
//     )
2718
 
//
2719
 
// Routine Description:
2720
 
//
2721
 
//     Map an RVA that is contained within a mapped file to it's associated
2722
 
//     flat address.
2723
 
//
2724
 
// Arguments:
2725
 
//
2726
 
//     Mapping - Base address of mapped file containing the RVA.
2727
 
//
2728
 
//     Rva - An Rva to fixup.
2729
 
//
2730
 
// Return Values:
2731
 
//
2732
 
//     A pointer to the desired data.
2733
 
//
2734
 
//--
2735
 
 
2736
 
function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer;
2737
 
{$EXTERNALSYM RVA_TO_ADDR}
2738
 
 
2739
 
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;
2740
 
{$EXTERNALSYM MiniDumpWriteDump}
2741
 
 
2742
 
function MiniDumpReadDumpStream(BaseOfDump: PVOID; StreamNumber: ULONG; var Dir: PMINIDUMP_DIRECTORY; var StreamPointer: PVOID; var StreamSize: ULONG): BOOL; stdcall;
2743
 
{$EXTERNALSYM MiniDumpReadDumpStream}
2744
 
 
2745
 
implementation
2746
 
 
2747
 
const
2748
 
  ImageHlpLib = 'imagehlp.dll';
2749
 
  {$IFDEF UNICODE}
2750
 
  AWSuffix = 'W';
2751
 
  {$ELSE}
2752
 
  AWSuffix = 'A';
2753
 
  {$ENDIF UNICODE}
2754
 
 
2755
 
procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64);
2756
 
begin
2757
 
  a64^.Offset := {ULONG64(LONG64(LONG(}a32^.Offset{)))};
2758
 
  a64^.Segment := a32^.Segment;
2759
 
  a64^.Mode := a32^.Mode;
2760
 
end;
2761
 
 
2762
 
procedure Address64To32(a64: LPADDRESS64; a32: LPADDRESS);
2763
 
begin
2764
 
  a32^.Offset := ULONG(a64^.Offset);
2765
 
  a32^.Segment := a64^.Segment;
2766
 
  a32^.Mode := a64^.Mode;
2767
 
end;
2768
 
 
2769
 
procedure KdHelp32To64(p32: PKDHELP; p64: PKDHELP64);
2770
 
begin
2771
 
  p64^.Thread := p32^.Thread;
2772
 
  p64^.ThCallbackStack := p32^.ThCallbackStack;
2773
 
  p64^.NextCallback := p32^.NextCallback;
2774
 
  p64^.FramePointer := p32^.FramePointer;
2775
 
  p64^.KiCallUserMode := p32^.KiCallUserMode;
2776
 
  p64^.KeUserCallbackDispatcher := p32^.KeUserCallbackDispatcher;
2777
 
  p64^.SystemRangeStart := p32^.SystemRangeStart;
2778
 
end;
2779
 
 
2780
 
function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer;
2781
 
begin
2782
 
  Result := Pointer(Cardinal(Mapping) + Cardinal(Rva));
2783
 
end;
2784
 
 
2785
 
{$IFDEF DYNAMIC_LINK}
2786
 
 
2787
 
var
2788
 
  _BindImage: Pointer;
2789
 
 
2790
 
function BindImage;
2791
 
begin
2792
 
  GetProcedureAddress(_BindImage, ImageHlpLib, 'BindImage');
2793
 
  asm
2794
 
        MOV     ESP, EBP
2795
 
        POP     EBP
2796
 
        JMP     [_BindImage]
2797
 
  end;
2798
 
end;
2799
 
 
2800
 
var
2801
 
  _BindImageEx: Pointer;
2802
 
 
2803
 
function BindImageEx;
2804
 
begin
2805
 
  GetProcedureAddress(_BindImageEx, ImageHlpLib, 'BindImageEx');
2806
 
  asm
2807
 
        MOV     ESP, EBP
2808
 
        POP     EBP
2809
 
        JMP     [_BindImageEx]
2810
 
  end;
2811
 
end;
2812
 
 
2813
 
var
2814
 
  _ReBaseImage: Pointer;
2815
 
 
2816
 
function ReBaseImage;
2817
 
begin
2818
 
  GetProcedureAddress(_ReBaseImage, ImageHlpLib, 'ReBaseImage');
2819
 
  asm
2820
 
        MOV     ESP, EBP
2821
 
        POP     EBP
2822
 
        JMP     [_ReBaseImage]
2823
 
  end;
2824
 
end;
2825
 
 
2826
 
var
2827
 
  _ReBaseImage64: Pointer;
2828
 
 
2829
 
function ReBaseImage64;
2830
 
begin
2831
 
  GetProcedureAddress(_ReBaseImage64, ImageHlpLib, 'ReBaseImage64');
2832
 
  asm
2833
 
        MOV     ESP, EBP
2834
 
        POP     EBP
2835
 
        JMP     [_ReBaseImage64]
2836
 
  end;
2837
 
end;
2838
 
 
2839
 
var
2840
 
  _CheckSumMappedFile: Pointer;
2841
 
 
2842
 
function CheckSumMappedFile;
2843
 
begin
2844
 
  GetProcedureAddress(_CheckSumMappedFile, ImageHlpLib, 'CheckSumMappedFile');
2845
 
  asm
2846
 
        MOV     ESP, EBP
2847
 
        POP     EBP
2848
 
        JMP     [_CheckSumMappedFile]
2849
 
  end;
2850
 
end;
2851
 
 
2852
 
var
2853
 
  _MapFileAndCheckSumA: Pointer;
2854
 
 
2855
 
function MapFileAndCheckSumA;
2856
 
begin
2857
 
  GetProcedureAddress(_MapFileAndCheckSumA, ImageHlpLib, 'MapFileAndCheckSumA');
2858
 
  asm
2859
 
        MOV     ESP, EBP
2860
 
        POP     EBP
2861
 
        JMP     [_MapFileAndCheckSumA]
2862
 
  end;
2863
 
end;
2864
 
 
2865
 
var
2866
 
  _MapFileAndCheckSumW: Pointer;
2867
 
 
2868
 
function MapFileAndCheckSumW;
2869
 
begin
2870
 
  GetProcedureAddress(_MapFileAndCheckSumW, ImageHlpLib, 'MapFileAndCheckSumW');
2871
 
  asm
2872
 
        MOV     ESP, EBP
2873
 
        POP     EBP
2874
 
        JMP     [_MapFileAndCheckSumW]
2875
 
  end;
2876
 
end;
2877
 
 
2878
 
var
2879
 
  _MapFileAndCheckSum: Pointer;
2880
 
 
2881
 
function MapFileAndCheckSum;
2882
 
begin
2883
 
  GetProcedureAddress(_MapFileAndCheckSum, ImageHlpLib, 'MapFileAndCheckSum' + AWSuffix);
2884
 
  asm
2885
 
        MOV     ESP, EBP
2886
 
        POP     EBP
2887
 
        JMP     [_MapFileAndCheckSum]
2888
 
  end;
2889
 
end;
2890
 
 
2891
 
var
2892
 
  _GetImageConfigInformation: Pointer;
2893
 
 
2894
 
function GetImageConfigInformation;
2895
 
begin
2896
 
  GetProcedureAddress(_GetImageConfigInformation, ImageHlpLib, 'GetImageConfigInformation');
2897
 
  asm
2898
 
        MOV     ESP, EBP
2899
 
        POP     EBP
2900
 
        JMP     [_GetImageConfigInformation]
2901
 
  end;
2902
 
end;
2903
 
 
2904
 
var
2905
 
  _GetImageUnusedHeaderBytes: Pointer;
2906
 
 
2907
 
function GetImageUnusedHeaderBytes;
2908
 
begin
2909
 
  GetProcedureAddress(_GetImageUnusedHeaderBytes, ImageHlpLib, 'GetImageUnusedHeaderBytes');
2910
 
  asm
2911
 
        MOV     ESP, EBP
2912
 
        POP     EBP
2913
 
        JMP     [_GetImageUnusedHeaderBytes]
2914
 
  end;
2915
 
end;
2916
 
 
2917
 
var
2918
 
  _SetImageConfigInformation: Pointer;
2919
 
 
2920
 
function SetImageConfigInformation;
2921
 
begin
2922
 
  GetProcedureAddress(_SetImageConfigInformation, ImageHlpLib, 'SetImageConfigInformation');
2923
 
  asm
2924
 
        MOV     ESP, EBP
2925
 
        POP     EBP
2926
 
        JMP     [_SetImageConfigInformation]
2927
 
  end;
2928
 
end;
2929
 
 
2930
 
var
2931
 
  _ImageGetDigestStream: Pointer;
2932
 
 
2933
 
function ImageGetDigestStream;
2934
 
begin
2935
 
  GetProcedureAddress(_ImageGetDigestStream, ImageHlpLib, 'ImageGetDigestStream');
2936
 
  asm
2937
 
        MOV     ESP, EBP
2938
 
        POP     EBP
2939
 
        JMP     [_ImageGetDigestStream]
2940
 
  end;
2941
 
end;
2942
 
 
2943
 
var
2944
 
  _ImageAddCertificate: Pointer;
2945
 
 
2946
 
function ImageAddCertificate;
2947
 
begin
2948
 
  GetProcedureAddress(_ImageAddCertificate, ImageHlpLib, 'ImageAddCertificate');
2949
 
  asm
2950
 
        MOV     ESP, EBP
2951
 
        POP     EBP
2952
 
        JMP     [_ImageAddCertificate]
2953
 
  end;
2954
 
end;
2955
 
 
2956
 
var
2957
 
  _ImageRemoveCertificate: Pointer;
2958
 
 
2959
 
function ImageRemoveCertificate;
2960
 
begin
2961
 
  GetProcedureAddress(_ImageRemoveCertificate, ImageHlpLib, 'ImageRemoveCertificate');
2962
 
  asm
2963
 
        MOV     ESP, EBP
2964
 
        POP     EBP
2965
 
        JMP     [_ImageRemoveCertificate]
2966
 
  end;
2967
 
end;
2968
 
 
2969
 
var
2970
 
  _ImageEnumerateCertificates: Pointer;
2971
 
 
2972
 
function ImageEnumerateCertificates;
2973
 
begin
2974
 
  GetProcedureAddress(_ImageEnumerateCertificates, ImageHlpLib, 'ImageEnumerateCertificates');
2975
 
  asm
2976
 
        MOV     ESP, EBP
2977
 
        POP     EBP
2978
 
        JMP     [_ImageEnumerateCertificates]
2979
 
  end;
2980
 
end;
2981
 
 
2982
 
var
2983
 
  _ImageGetCertificateData: Pointer;
2984
 
 
2985
 
function ImageGetCertificateData;
2986
 
begin
2987
 
  GetProcedureAddress(_ImageGetCertificateData, ImageHlpLib, 'ImageGetCertificateData');
2988
 
  asm
2989
 
        MOV     ESP, EBP
2990
 
        POP     EBP
2991
 
        JMP     [_ImageGetCertificateData]
2992
 
  end;
2993
 
end;
2994
 
 
2995
 
var
2996
 
  _ImageGetCertificateHeader: Pointer;
2997
 
 
2998
 
function ImageGetCertificateHeader;
2999
 
begin
3000
 
  GetProcedureAddress(_ImageGetCertificateHeader, ImageHlpLib, 'ImageGetCertificateHeader');
3001
 
  asm
3002
 
        MOV     ESP, EBP
3003
 
        POP     EBP
3004
 
        JMP     [_ImageGetCertificateHeader]
3005
 
  end;
3006
 
end;
3007
 
 
3008
 
var
3009
 
  _ImageLoad: Pointer;
3010
 
 
3011
 
function ImageLoad;
3012
 
begin
3013
 
  GetProcedureAddress(_ImageLoad, ImageHlpLib, 'ImageLoad');
3014
 
  asm
3015
 
        MOV     ESP, EBP
3016
 
        POP     EBP
3017
 
        JMP     [_ImageLoad]
3018
 
  end;
3019
 
end;
3020
 
 
3021
 
var
3022
 
  _ImageUnload: Pointer;
3023
 
 
3024
 
function ImageUnload;
3025
 
begin
3026
 
  GetProcedureAddress(_ImageUnload, ImageHlpLib, 'ImageUnload');
3027
 
  asm
3028
 
        MOV     ESP, EBP
3029
 
        POP     EBP
3030
 
        JMP     [_ImageUnload]
3031
 
  end;
3032
 
end;
3033
 
 
3034
 
var
3035
 
  _MapAndLoad: Pointer;
3036
 
 
3037
 
function MapAndLoad;
3038
 
begin
3039
 
  GetProcedureAddress(_MapAndLoad, ImageHlpLib, 'MapAndLoad');
3040
 
  asm
3041
 
        MOV     ESP, EBP
3042
 
        POP     EBP
3043
 
        JMP     [_MapAndLoad]
3044
 
  end;
3045
 
end;
3046
 
 
3047
 
var
3048
 
  _UnMapAndLoad: Pointer;
3049
 
 
3050
 
function UnMapAndLoad;
3051
 
begin
3052
 
  GetProcedureAddress(_UnMapAndLoad, ImageHlpLib, 'UnMapAndLoad');
3053
 
  asm
3054
 
        MOV     ESP, EBP
3055
 
        POP     EBP
3056
 
        JMP     [_UnMapAndLoad]
3057
 
  end;
3058
 
end;
3059
 
 
3060
 
var
3061
 
  _TouchFileTimes: Pointer;
3062
 
 
3063
 
function TouchFileTimes;
3064
 
begin
3065
 
  GetProcedureAddress(_TouchFileTimes, ImageHlpLib, 'TouchFileTimes');
3066
 
  asm
3067
 
        MOV     ESP, EBP
3068
 
        POP     EBP
3069
 
        JMP     [_TouchFileTimes]
3070
 
  end;
3071
 
end;
3072
 
 
3073
 
var
3074
 
  _SplitSymbols: Pointer;
3075
 
 
3076
 
function SplitSymbols;
3077
 
begin
3078
 
  GetProcedureAddress(_SplitSymbols, ImageHlpLib, 'SplitSymbols');
3079
 
  asm
3080
 
        MOV     ESP, EBP
3081
 
        POP     EBP
3082
 
        JMP     [_SplitSymbols]
3083
 
  end;
3084
 
end;
3085
 
 
3086
 
var
3087
 
  _UpdateDebugInfoFile: Pointer;
3088
 
 
3089
 
function UpdateDebugInfoFile;
3090
 
begin
3091
 
  GetProcedureAddress(_UpdateDebugInfoFile, ImageHlpLib, 'UpdateDebugInfoFile');
3092
 
  asm
3093
 
        MOV     ESP, EBP
3094
 
        POP     EBP
3095
 
        JMP     [_UpdateDebugInfoFile]
3096
 
  end;
3097
 
end;
3098
 
 
3099
 
var
3100
 
  _UpdateDebugInfoFileEx: Pointer;
3101
 
 
3102
 
function UpdateDebugInfoFileEx;
3103
 
begin
3104
 
  GetProcedureAddress(_UpdateDebugInfoFileEx, ImageHlpLib, 'UpdateDebugInfoFileEx');
3105
 
  asm
3106
 
        MOV     ESP, EBP
3107
 
        POP     EBP
3108
 
        JMP     [_UpdateDebugInfoFileEx]
3109
 
  end;
3110
 
end;
3111
 
 
3112
 
var
3113
 
  _FindDebugInfoFile: Pointer;
3114
 
 
3115
 
function FindDebugInfoFile;
3116
 
begin
3117
 
  GetProcedureAddress(_FindDebugInfoFile, ImageHlpLib, 'FindDebugInfoFile');
3118
 
  asm
3119
 
        MOV     ESP, EBP
3120
 
        POP     EBP
3121
 
        JMP     [_FindDebugInfoFile]
3122
 
  end;
3123
 
end;
3124
 
 
3125
 
var
3126
 
  _FindDebugInfoFileEx: Pointer;
3127
 
 
3128
 
function FindDebugInfoFileEx;
3129
 
begin
3130
 
  GetProcedureAddress(_FindDebugInfoFileEx, ImageHlpLib, 'FindDebugInfoFileEx');
3131
 
  asm
3132
 
        MOV     ESP, EBP
3133
 
        POP     EBP
3134
 
        JMP     [_FindDebugInfoFileEx]
3135
 
  end;
3136
 
end;
3137
 
 
3138
 
var
3139
 
  _SymFindFileInPath: Pointer;
3140
 
 
3141
 
function SymFindFileInPath;
3142
 
begin
3143
 
  GetProcedureAddress(_SymFindFileInPath, ImageHlpLib, 'SymFindFileInPath');
3144
 
  asm
3145
 
        MOV     ESP, EBP
3146
 
        POP     EBP
3147
 
        JMP     [_SymFindFileInPath]
3148
 
  end;
3149
 
end;
3150
 
 
3151
 
var
3152
 
  _FindExecutableImage: Pointer;
3153
 
 
3154
 
function FindExecutableImage;
3155
 
begin
3156
 
  GetProcedureAddress(_FindExecutableImage, ImageHlpLib, 'FindExecutableImage');
3157
 
  asm
3158
 
        MOV     ESP, EBP
3159
 
        POP     EBP
3160
 
        JMP     [_FindExecutableImage]
3161
 
  end;
3162
 
end;
3163
 
 
3164
 
var
3165
 
  _FindExecutableImageEx: Pointer;
3166
 
 
3167
 
function FindExecutableImageEx;
3168
 
begin
3169
 
  GetProcedureAddress(_FindExecutableImageEx, ImageHlpLib, 'FindExecutableImageEx');
3170
 
  asm
3171
 
        MOV     ESP, EBP
3172
 
        POP     EBP
3173
 
        JMP     [_FindExecutableImageEx]
3174
 
  end;
3175
 
end;
3176
 
 
3177
 
var
3178
 
  _ImageNtHeader: Pointer;
3179
 
 
3180
 
function ImageNtHeader;
3181
 
begin
3182
 
  GetProcedureAddress(_ImageNtHeader, ImageHlpLib, 'ImageNtHeader');
3183
 
  asm
3184
 
        MOV     ESP, EBP
3185
 
        POP     EBP
3186
 
        JMP     [_ImageNtHeader]
3187
 
  end;
3188
 
end;
3189
 
 
3190
 
var
3191
 
  _ImageDirectoryEntryToDataEx: Pointer;
3192
 
 
3193
 
function ImageDirectoryEntryToDataEx;
3194
 
begin
3195
 
  GetProcedureAddress(_ImageDirectoryEntryToDataEx, ImageHlpLib, 'ImageDirectoryEntryToDataEx');
3196
 
  asm
3197
 
        MOV     ESP, EBP
3198
 
        POP     EBP
3199
 
        JMP     [_ImageDirectoryEntryToDataEx]
3200
 
  end;
3201
 
end;
3202
 
 
3203
 
var
3204
 
  _ImageDirectoryEntryToData: Pointer;
3205
 
 
3206
 
function ImageDirectoryEntryToData;
3207
 
begin
3208
 
  GetProcedureAddress(_ImageDirectoryEntryToData, ImageHlpLib, 'ImageDirectoryEntryToData');
3209
 
  asm
3210
 
        MOV     ESP, EBP
3211
 
        POP     EBP
3212
 
        JMP     [_ImageDirectoryEntryToData]
3213
 
  end;
3214
 
end;
3215
 
 
3216
 
var
3217
 
  _ImageRvaToSection: Pointer;
3218
 
 
3219
 
function ImageRvaToSection;
3220
 
begin
3221
 
  GetProcedureAddress(_ImageRvaToSection, ImageHlpLib, 'ImageRvaToSection');
3222
 
  asm
3223
 
        MOV     ESP, EBP
3224
 
        POP     EBP
3225
 
        JMP     [_ImageRvaToSection]
3226
 
  end;
3227
 
end;
3228
 
 
3229
 
var
3230
 
  _ImageRvaToVa: Pointer;
3231
 
 
3232
 
function ImageRvaToVa;
3233
 
begin
3234
 
  GetProcedureAddress(_ImageRvaToVa, ImageHlpLib, 'ImageRvaToVa');
3235
 
  asm
3236
 
        MOV     ESP, EBP
3237
 
        POP     EBP
3238
 
        JMP     [_ImageRvaToVa]
3239
 
  end;
3240
 
end;
3241
 
 
3242
 
var
3243
 
  _MapDebugInformation: Pointer;
3244
 
 
3245
 
function MapDebugInformation;
3246
 
begin
3247
 
  GetProcedureAddress(_MapDebugInformation, ImageHlpLib, 'MapDebugInformation');
3248
 
  asm
3249
 
        MOV     ESP, EBP
3250
 
        POP     EBP
3251
 
        JMP     [_MapDebugInformation]
3252
 
  end;
3253
 
end;
3254
 
 
3255
 
var
3256
 
  _UnmapDebugInformation: Pointer;
3257
 
 
3258
 
function UnmapDebugInformation;
3259
 
begin
3260
 
  GetProcedureAddress(_UnmapDebugInformation, ImageHlpLib, 'UnmapDebugInformation');
3261
 
  asm
3262
 
        MOV     ESP, EBP
3263
 
        POP     EBP
3264
 
        JMP     [_UnmapDebugInformation]
3265
 
  end;
3266
 
end;
3267
 
 
3268
 
var
3269
 
  _SearchTreeForFile: Pointer;
3270
 
 
3271
 
function SearchTreeForFile;
3272
 
begin
3273
 
  GetProcedureAddress(_SearchTreeForFile, ImageHlpLib, 'SearchTreeForFile');
3274
 
  asm
3275
 
        MOV     ESP, EBP
3276
 
        POP     EBP
3277
 
        JMP     [_SearchTreeForFile]
3278
 
  end;
3279
 
end;
3280
 
 
3281
 
var
3282
 
  _EnumDirTree: Pointer;
3283
 
 
3284
 
function EnumDirTree;
3285
 
begin
3286
 
  GetProcedureAddress(_EnumDirTree, ImageHlpLib, 'EnumDirTree');
3287
 
  asm
3288
 
        MOV     ESP, EBP
3289
 
        POP     EBP
3290
 
        JMP     [_EnumDirTree]
3291
 
  end;
3292
 
end;
3293
 
 
3294
 
var
3295
 
  _MakeSureDirectoryPathExists: Pointer;
3296
 
 
3297
 
function MakeSureDirectoryPathExists;
3298
 
begin
3299
 
  GetProcedureAddress(_MakeSureDirectoryPathExists, ImageHlpLib, 'MakeSureDirectoryPathExists');
3300
 
  asm
3301
 
        MOV     ESP, EBP
3302
 
        POP     EBP
3303
 
        JMP     [_MakeSureDirectoryPathExists]
3304
 
  end;
3305
 
end;
3306
 
 
3307
 
var
3308
 
  _UnDecorateSymbolName: Pointer;
3309
 
 
3310
 
function UnDecorateSymbolName;
3311
 
begin
3312
 
  GetProcedureAddress(_UnDecorateSymbolName, ImageHlpLib, 'UnDecorateSymbolName');
3313
 
  asm
3314
 
        MOV     ESP, EBP
3315
 
        POP     EBP
3316
 
        JMP     [_UnDecorateSymbolName]
3317
 
  end;
3318
 
end;
3319
 
 
3320
 
var
3321
 
  _StackWalk64: Pointer;
3322
 
 
3323
 
function StackWalk64;
3324
 
begin
3325
 
  GetProcedureAddress(_StackWalk64, ImageHlpLib, 'StackWalk64');
3326
 
  asm
3327
 
        MOV     ESP, EBP
3328
 
        POP     EBP
3329
 
        JMP     [_StackWalk64]
3330
 
  end;
3331
 
end;
3332
 
 
3333
 
var
3334
 
  _StackWalk: Pointer;
3335
 
 
3336
 
function StackWalk;
3337
 
begin
3338
 
  GetProcedureAddress(_StackWalk, ImageHlpLib, 'StackWalk');
3339
 
  asm
3340
 
        MOV     ESP, EBP
3341
 
        POP     EBP
3342
 
        JMP     [_StackWalk]
3343
 
  end;
3344
 
end;
3345
 
 
3346
 
var
3347
 
  _ImagehlpApiVersion: Pointer;
3348
 
 
3349
 
function ImagehlpApiVersion;
3350
 
begin
3351
 
  GetProcedureAddress(_ImagehlpApiVersion, ImageHlpLib, 'ImagehlpApiVersion');
3352
 
  asm
3353
 
        MOV     ESP, EBP
3354
 
        POP     EBP
3355
 
        JMP     [_ImagehlpApiVersion]
3356
 
  end;
3357
 
end;
3358
 
 
3359
 
var
3360
 
  _ImagehlpApiVersionEx: Pointer;
3361
 
 
3362
 
function ImagehlpApiVersionEx;
3363
 
begin
3364
 
  GetProcedureAddress(_ImagehlpApiVersionEx, ImageHlpLib, 'ImagehlpApiVersionEx');
3365
 
  asm
3366
 
        MOV     ESP, EBP
3367
 
        POP     EBP
3368
 
        JMP     [_ImagehlpApiVersionEx]
3369
 
  end;
3370
 
end;
3371
 
 
3372
 
var
3373
 
  _GetTimestampForLoadedLibrary: Pointer;
3374
 
 
3375
 
function GetTimestampForLoadedLibrary;
3376
 
begin
3377
 
  GetProcedureAddress(_GetTimestampForLoadedLibrary, ImageHlpLib, 'GetTimestampForLoadedLibrary');
3378
 
  asm
3379
 
        MOV     ESP, EBP
3380
 
        POP     EBP
3381
 
        JMP     [_GetTimestampForLoadedLibrary]
3382
 
  end;
3383
 
end;
3384
 
 
3385
 
var
3386
 
  _SymSetOptions: Pointer;
3387
 
 
3388
 
function SymSetOptions;
3389
 
begin
3390
 
  GetProcedureAddress(_SymSetOptions, ImageHlpLib, 'SymSetOptions');
3391
 
  asm
3392
 
        MOV     ESP, EBP
3393
 
        POP     EBP
3394
 
        JMP     [_SymSetOptions]
3395
 
  end;
3396
 
end;
3397
 
 
3398
 
var
3399
 
  _SymGetOptions: Pointer;
3400
 
 
3401
 
function SymGetOptions;
3402
 
begin
3403
 
  GetProcedureAddress(_SymGetOptions, ImageHlpLib, 'SymGetOptions');
3404
 
  asm
3405
 
        MOV     ESP, EBP
3406
 
        POP     EBP
3407
 
        JMP     [_SymGetOptions]
3408
 
  end;
3409
 
end;
3410
 
 
3411
 
var
3412
 
  _SymCleanup: Pointer;
3413
 
 
3414
 
function SymCleanup;
3415
 
begin
3416
 
  GetProcedureAddress(_SymCleanup, ImageHlpLib, 'SymCleanup');
3417
 
  asm
3418
 
        MOV     ESP, EBP
3419
 
        POP     EBP
3420
 
        JMP     [_SymCleanup]
3421
 
  end;
3422
 
end;
3423
 
 
3424
 
var
3425
 
  _SymMatchString: Pointer;
3426
 
 
3427
 
function SymMatchString;
3428
 
begin
3429
 
  GetProcedureAddress(_SymMatchString, ImageHlpLib, 'SymMatchString');
3430
 
  asm
3431
 
        MOV     ESP, EBP
3432
 
        POP     EBP
3433
 
        JMP     [_SymMatchString]
3434
 
  end;
3435
 
end;
3436
 
 
3437
 
var
3438
 
  _SymEnumSourceFiles: Pointer;
3439
 
 
3440
 
function SymEnumSourceFiles;
3441
 
begin
3442
 
  GetProcedureAddress(_SymEnumSourceFiles, ImageHlpLib, 'SymEnumSourceFiles');
3443
 
  asm
3444
 
        MOV     ESP, EBP
3445
 
        POP     EBP
3446
 
        JMP     [_SymEnumSourceFiles]
3447
 
  end;
3448
 
end;
3449
 
 
3450
 
var
3451
 
  _SymEnumerateModules64: Pointer;
3452
 
 
3453
 
function SymEnumerateModules64;
3454
 
begin
3455
 
  GetProcedureAddress(_SymEnumerateModules64, ImageHlpLib, 'SymEnumerateModules64');
3456
 
  asm
3457
 
        MOV     ESP, EBP
3458
 
        POP     EBP
3459
 
        JMP     [_SymEnumerateModules64]
3460
 
  end;
3461
 
end;
3462
 
 
3463
 
var
3464
 
  _SymEnumerateModules: Pointer;
3465
 
 
3466
 
function SymEnumerateModules;
3467
 
begin
3468
 
  GetProcedureAddress(_SymEnumerateModules, ImageHlpLib, 'SymEnumerateModules');
3469
 
  asm
3470
 
        MOV     ESP, EBP
3471
 
        POP     EBP
3472
 
        JMP     [_SymEnumerateModules]
3473
 
  end;
3474
 
end;
3475
 
 
3476
 
var
3477
 
  _SymEnumerateSymbols64: Pointer;
3478
 
 
3479
 
function SymEnumerateSymbols64;
3480
 
begin
3481
 
  GetProcedureAddress(_SymEnumerateSymbols64, ImageHlpLib, 'SymEnumerateSymbols64');
3482
 
  asm
3483
 
        MOV     ESP, EBP
3484
 
        POP     EBP
3485
 
        JMP     [_SymEnumerateSymbols64]
3486
 
  end;
3487
 
end;
3488
 
 
3489
 
var
3490
 
  _SymEnumerateSymbolsW64: Pointer;
3491
 
 
3492
 
function SymEnumerateSymbolsW64;
3493
 
begin
3494
 
  GetProcedureAddress(_SymEnumerateSymbolsW64, ImageHlpLib, 'SymEnumerateSymbolsW64');
3495
 
  asm
3496
 
        MOV     ESP, EBP
3497
 
        POP     EBP
3498
 
        JMP     [_SymEnumerateSymbolsW64]
3499
 
  end;
3500
 
end;
3501
 
 
3502
 
var
3503
 
  _SymEnumerateSymbols: Pointer;
3504
 
 
3505
 
function SymEnumerateSymbols;
3506
 
begin
3507
 
  GetProcedureAddress(_SymEnumerateSymbols, ImageHlpLib, 'SymEnumerateSymbols');
3508
 
  asm
3509
 
        MOV     ESP, EBP
3510
 
        POP     EBP
3511
 
        JMP     [_SymEnumerateSymbols]
3512
 
  end;
3513
 
end;
3514
 
 
3515
 
var
3516
 
  _SymEnumerateSymbolsW: Pointer;
3517
 
 
3518
 
function SymEnumerateSymbolsW;
3519
 
begin
3520
 
  GetProcedureAddress(_SymEnumerateSymbolsW, ImageHlpLib, 'SymEnumerateSymbolsW');
3521
 
  asm
3522
 
        MOV     ESP, EBP
3523
 
        POP     EBP
3524
 
        JMP     [_SymEnumerateSymbolsW]
3525
 
  end;
3526
 
end;
3527
 
 
3528
 
var
3529
 
  _EnumerateLoadedModules64: Pointer;
3530
 
 
3531
 
function EnumerateLoadedModules64;
3532
 
begin
3533
 
  GetProcedureAddress(_EnumerateLoadedModules64, ImageHlpLib, 'EnumerateLoadedModules64');
3534
 
  asm
3535
 
        MOV     ESP, EBP
3536
 
        POP     EBP
3537
 
        JMP     [_EnumerateLoadedModules64]
3538
 
  end;
3539
 
end;
3540
 
 
3541
 
var
3542
 
  _EnumerateLoadedModules: Pointer;
3543
 
 
3544
 
function EnumerateLoadedModules;
3545
 
begin
3546
 
  GetProcedureAddress(_EnumerateLoadedModules, ImageHlpLib, 'EnumerateLoadedModules');
3547
 
  asm
3548
 
        MOV     ESP, EBP
3549
 
        POP     EBP
3550
 
        JMP     [_EnumerateLoadedModules]
3551
 
  end;
3552
 
end;
3553
 
 
3554
 
var
3555
 
  _SymFunctionTableAccess64: Pointer;
3556
 
 
3557
 
function SymFunctionTableAccess64;
3558
 
begin
3559
 
  GetProcedureAddress(_SymFunctionTableAccess64, ImageHlpLib, 'SymFunctionTableAccess64');
3560
 
  asm
3561
 
        MOV     ESP, EBP
3562
 
        POP     EBP
3563
 
        JMP     [_SymFunctionTableAccess64]
3564
 
  end;
3565
 
end;
3566
 
 
3567
 
var
3568
 
  _SymFunctionTableAccess: Pointer;
3569
 
 
3570
 
function SymFunctionTableAccess;
3571
 
begin
3572
 
  GetProcedureAddress(_SymFunctionTableAccess, ImageHlpLib, 'SymFunctionTableAccess');
3573
 
  asm
3574
 
        MOV     ESP, EBP
3575
 
        POP     EBP
3576
 
        JMP     [_SymFunctionTableAccess]
3577
 
  end;
3578
 
end;
3579
 
 
3580
 
var
3581
 
  _SymGetModuleInfo64: Pointer;
3582
 
 
3583
 
function SymGetModuleInfo64;
3584
 
begin
3585
 
  GetProcedureAddress(_SymGetModuleInfo64, ImageHlpLib, 'SymGetModuleInfo64');
3586
 
  asm
3587
 
        MOV     ESP, EBP
3588
 
        POP     EBP
3589
 
        JMP     [_SymGetModuleInfo64]
3590
 
  end;
3591
 
end;
3592
 
 
3593
 
var
3594
 
  _SymGetModuleInfoW64: Pointer;
3595
 
 
3596
 
function SymGetModuleInfoW64;
3597
 
begin
3598
 
  GetProcedureAddress(_SymGetModuleInfoW64, ImageHlpLib, 'SymGetModuleInfoW64');
3599
 
  asm
3600
 
        MOV     ESP, EBP
3601
 
        POP     EBP
3602
 
        JMP     [_SymGetModuleInfoW64]
3603
 
  end;
3604
 
end;
3605
 
 
3606
 
var
3607
 
  _SymGetModuleInfo: Pointer;
3608
 
 
3609
 
function SymGetModuleInfo;
3610
 
begin
3611
 
  GetProcedureAddress(_SymGetModuleInfo, ImageHlpLib, 'SymGetModuleInfo');
3612
 
  asm
3613
 
        MOV     ESP, EBP
3614
 
        POP     EBP
3615
 
        JMP     [_SymGetModuleInfo]
3616
 
  end;
3617
 
end;
3618
 
 
3619
 
var
3620
 
  _SymGetModuleInfoW: Pointer;
3621
 
 
3622
 
function SymGetModuleInfoW;
3623
 
begin
3624
 
  GetProcedureAddress(_SymGetModuleInfoW, ImageHlpLib, 'SymGetModuleInfoW');
3625
 
  asm
3626
 
        MOV     ESP, EBP
3627
 
        POP     EBP
3628
 
        JMP     [_SymGetModuleInfoW]
3629
 
  end;
3630
 
end;
3631
 
 
3632
 
var
3633
 
  _SymGetModuleBase64: Pointer;
3634
 
 
3635
 
function SymGetModuleBase64;
3636
 
begin
3637
 
  GetProcedureAddress(_SymGetModuleBase64, ImageHlpLib, 'SymGetModuleBase64');
3638
 
  asm
3639
 
        MOV     ESP, EBP
3640
 
        POP     EBP
3641
 
        JMP     [_SymGetModuleBase64]
3642
 
  end;
3643
 
end;
3644
 
 
3645
 
var
3646
 
  _SymGetModuleBase: Pointer;
3647
 
 
3648
 
function SymGetModuleBase;
3649
 
begin
3650
 
  GetProcedureAddress(_SymGetModuleBase, ImageHlpLib, 'SymGetModuleBase');
3651
 
  asm
3652
 
        MOV     ESP, EBP
3653
 
        POP     EBP
3654
 
        JMP     [_SymGetModuleBase]
3655
 
  end;
3656
 
end;
3657
 
 
3658
 
var
3659
 
  _SymGetSymNext64: Pointer;
3660
 
 
3661
 
function SymGetSymNext64;
3662
 
begin
3663
 
  GetProcedureAddress(_SymGetSymNext64, ImageHlpLib, 'SymGetSymNext64');
3664
 
  asm
3665
 
        MOV     ESP, EBP
3666
 
        POP     EBP
3667
 
        JMP     [_SymGetSymNext64]
3668
 
  end;
3669
 
end;
3670
 
 
3671
 
var
3672
 
  _SymGetSymNext: Pointer;
3673
 
 
3674
 
function SymGetSymNext;
3675
 
begin
3676
 
  GetProcedureAddress(_SymGetSymNext, ImageHlpLib, 'SymGetSymNext');
3677
 
  asm
3678
 
        MOV     ESP, EBP
3679
 
        POP     EBP
3680
 
        JMP     [_SymGetSymNext]
3681
 
  end;
3682
 
end;
3683
 
 
3684
 
var
3685
 
  _SymGetSymPrev64: Pointer;
3686
 
 
3687
 
function SymGetSymPrev64;
3688
 
begin
3689
 
  GetProcedureAddress(_SymGetSymPrev64, ImageHlpLib, 'SymGetSymPrev64');
3690
 
  asm
3691
 
        MOV     ESP, EBP
3692
 
        POP     EBP
3693
 
        JMP     [_SymGetSymPrev64]
3694
 
  end;
3695
 
end;
3696
 
 
3697
 
var
3698
 
  _SymGetSymPrev: Pointer;
3699
 
 
3700
 
function SymGetSymPrev;
3701
 
begin
3702
 
  GetProcedureAddress(_SymGetSymPrev, ImageHlpLib, 'SymGetSymPrev');
3703
 
  asm
3704
 
        MOV     ESP, EBP
3705
 
        POP     EBP
3706
 
        JMP     [_SymGetSymPrev]
3707
 
  end;
3708
 
end;
3709
 
 
3710
 
var
3711
 
  _SymGetLineFromAddr64: Pointer;
3712
 
 
3713
 
function SymGetLineFromAddr64;
3714
 
begin
3715
 
  GetProcedureAddress(_SymGetLineFromAddr64, ImageHlpLib, 'SymGetLineFromAddr64');
3716
 
  asm
3717
 
        MOV     ESP, EBP
3718
 
        POP     EBP
3719
 
        JMP     [_SymGetLineFromAddr64]
3720
 
  end;
3721
 
end;
3722
 
 
3723
 
var
3724
 
  _SymGetLineFromAddr: Pointer;
3725
 
 
3726
 
function SymGetLineFromAddr;
3727
 
begin
3728
 
  GetProcedureAddress(_SymGetLineFromAddr, ImageHlpLib, 'SymGetLineFromAddr');
3729
 
  asm
3730
 
        MOV     ESP, EBP
3731
 
        POP     EBP
3732
 
        JMP     [_SymGetLineFromAddr]
3733
 
  end;
3734
 
end;
3735
 
 
3736
 
var
3737
 
  _SymGetLineFromName64: Pointer;
3738
 
 
3739
 
function SymGetLineFromName64;
3740
 
begin
3741
 
  GetProcedureAddress(_SymGetLineFromName64, ImageHlpLib, 'SymGetLineFromName64');
3742
 
  asm
3743
 
        MOV     ESP, EBP
3744
 
        POP     EBP
3745
 
        JMP     [_SymGetLineFromName64]
3746
 
  end;
3747
 
end;
3748
 
 
3749
 
var
3750
 
  _SymGetLineFromName: Pointer;
3751
 
 
3752
 
function SymGetLineFromName;
3753
 
begin
3754
 
  GetProcedureAddress(_SymGetLineFromName, ImageHlpLib, 'SymGetLineFromName');
3755
 
  asm
3756
 
        MOV     ESP, EBP
3757
 
        POP     EBP
3758
 
        JMP     [_SymGetLineFromName]
3759
 
  end;
3760
 
end;
3761
 
 
3762
 
var
3763
 
  _SymGetLineNext64: Pointer;
3764
 
 
3765
 
function SymGetLineNext64;
3766
 
begin
3767
 
  GetProcedureAddress(_SymGetLineNext64, ImageHlpLib, 'SymGetLineNext64');
3768
 
  asm
3769
 
        MOV     ESP, EBP
3770
 
        POP     EBP
3771
 
        JMP     [_SymGetLineNext64]
3772
 
  end;
3773
 
end;
3774
 
 
3775
 
var
3776
 
  _SymGetLineNext: Pointer;
3777
 
 
3778
 
function SymGetLineNext;
3779
 
begin
3780
 
  GetProcedureAddress(_SymGetLineNext, ImageHlpLib, 'SymGetLineNext');
3781
 
  asm
3782
 
        MOV     ESP, EBP
3783
 
        POP     EBP
3784
 
        JMP     [_SymGetLineNext]
3785
 
  end;
3786
 
end;
3787
 
 
3788
 
var
3789
 
  _SymGetLinePrev64: Pointer;
3790
 
 
3791
 
function SymGetLinePrev64;
3792
 
begin
3793
 
  GetProcedureAddress(_SymGetLinePrev64, ImageHlpLib, 'SymGetLinePrev64');
3794
 
  asm
3795
 
        MOV     ESP, EBP
3796
 
        POP     EBP
3797
 
        JMP     [_SymGetLinePrev64]
3798
 
  end;
3799
 
end;
3800
 
 
3801
 
var
3802
 
  _SymGetLinePrev: Pointer;
3803
 
 
3804
 
function SymGetLinePrev;
3805
 
begin
3806
 
  GetProcedureAddress(_SymGetLinePrev, ImageHlpLib, 'SymGetLinePrev');
3807
 
  asm
3808
 
        MOV     ESP, EBP
3809
 
        POP     EBP
3810
 
        JMP     [_SymGetLinePrev]
3811
 
  end;
3812
 
end;
3813
 
 
3814
 
var
3815
 
  _SymMatchFileName: Pointer;
3816
 
 
3817
 
function SymMatchFileName;
3818
 
begin
3819
 
  GetProcedureAddress(_SymMatchFileName, ImageHlpLib, 'SymMatchFileName');
3820
 
  asm
3821
 
        MOV     ESP, EBP
3822
 
        POP     EBP
3823
 
        JMP     [_SymMatchFileName]
3824
 
  end;
3825
 
end;
3826
 
 
3827
 
var
3828
 
  _SymInitialize: Pointer;
3829
 
 
3830
 
function SymInitialize;
3831
 
begin
3832
 
  GetProcedureAddress(_SymInitialize, ImageHlpLib, 'SymInitialize');
3833
 
  asm
3834
 
        MOV     ESP, EBP
3835
 
        POP     EBP
3836
 
        JMP     [_SymInitialize]
3837
 
  end;
3838
 
end;
3839
 
 
3840
 
var
3841
 
  _SymGetSearchPath: Pointer;
3842
 
 
3843
 
function SymGetSearchPath;
3844
 
begin
3845
 
  GetProcedureAddress(_SymGetSearchPath, ImageHlpLib, 'SymGetSearchPath');
3846
 
  asm
3847
 
        MOV     ESP, EBP
3848
 
        POP     EBP
3849
 
        JMP     [_SymGetSearchPath]
3850
 
  end;
3851
 
end;
3852
 
 
3853
 
var
3854
 
  _SymSetSearchPath: Pointer;
3855
 
 
3856
 
function SymSetSearchPath;
3857
 
begin
3858
 
  GetProcedureAddress(_SymSetSearchPath, ImageHlpLib, 'SymSetSearchPath');
3859
 
  asm
3860
 
        MOV     ESP, EBP
3861
 
        POP     EBP
3862
 
        JMP     [_SymSetSearchPath]
3863
 
  end;
3864
 
end;
3865
 
 
3866
 
var
3867
 
  _SymLoadModuleEx: Pointer;
3868
 
 
3869
 
function SymLoadModuleEx;
3870
 
begin
3871
 
  GetProcedureAddress(_SymLoadModuleEx, ImageHlpLib, 'SymLoadModuleEx');
3872
 
  asm
3873
 
        MOV     ESP, EBP
3874
 
        POP     EBP
3875
 
        JMP     [_SymLoadModuleEx]
3876
 
  end;
3877
 
end;
3878
 
 
3879
 
var
3880
 
  _SymLoadModule64: Pointer;
3881
 
 
3882
 
function SymLoadModule64;
3883
 
begin
3884
 
  GetProcedureAddress(_SymLoadModule64, ImageHlpLib, 'SymLoadModule64');
3885
 
  asm
3886
 
        MOV     ESP, EBP
3887
 
        POP     EBP
3888
 
        JMP     [_SymLoadModule64]
3889
 
  end;
3890
 
end;
3891
 
 
3892
 
var
3893
 
  _SymLoadModule: Pointer;
3894
 
 
3895
 
function SymLoadModule;
3896
 
begin
3897
 
  GetProcedureAddress(_SymLoadModule, ImageHlpLib, 'SymLoadModule');
3898
 
  asm
3899
 
        MOV     ESP, EBP
3900
 
        POP     EBP
3901
 
        JMP     [_SymLoadModule]
3902
 
  end;
3903
 
end;
3904
 
 
3905
 
var
3906
 
  _SymUnloadModule64: Pointer;
3907
 
 
3908
 
function SymUnloadModule64;
3909
 
begin
3910
 
  GetProcedureAddress(_SymUnloadModule64, ImageHlpLib, 'SymUnloadModule64');
3911
 
  asm
3912
 
        MOV     ESP, EBP
3913
 
        POP     EBP
3914
 
        JMP     [_SymUnloadModule64]
3915
 
  end;
3916
 
end;
3917
 
 
3918
 
var
3919
 
  _SymUnloadModule: Pointer;
3920
 
 
3921
 
function SymUnloadModule;
3922
 
begin
3923
 
  GetProcedureAddress(_SymUnloadModule, ImageHlpLib, 'SymUnloadModule');
3924
 
  asm
3925
 
        MOV     ESP, EBP
3926
 
        POP     EBP
3927
 
        JMP     [_SymUnloadModule]
3928
 
  end;
3929
 
end;
3930
 
 
3931
 
var
3932
 
  _SymUnDName64: Pointer;
3933
 
 
3934
 
function SymUnDName64;
3935
 
begin
3936
 
  GetProcedureAddress(_SymUnDName64, ImageHlpLib, 'SymUnDName64');
3937
 
  asm
3938
 
        MOV     ESP, EBP
3939
 
        POP     EBP
3940
 
        JMP     [_SymUnDName64]
3941
 
  end;
3942
 
end;
3943
 
 
3944
 
var
3945
 
  _SymUnDName: Pointer;
3946
 
 
3947
 
function SymUnDName;
3948
 
begin
3949
 
  GetProcedureAddress(_SymUnDName, ImageHlpLib, 'SymUnDName');
3950
 
  asm
3951
 
        MOV     ESP, EBP
3952
 
        POP     EBP
3953
 
        JMP     [_SymUnDName]
3954
 
  end;
3955
 
end;
3956
 
 
3957
 
var
3958
 
  _SymRegisterCallback64: Pointer;
3959
 
 
3960
 
function SymRegisterCallback64;
3961
 
begin
3962
 
  GetProcedureAddress(_SymRegisterCallback64, ImageHlpLib, 'SymRegisterCallback64');
3963
 
  asm
3964
 
        MOV     ESP, EBP
3965
 
        POP     EBP
3966
 
        JMP     [_SymRegisterCallback64]
3967
 
  end;
3968
 
end;
3969
 
 
3970
 
var
3971
 
  _SymRegFuncEntryCallback64: Pointer;
3972
 
 
3973
 
function SymRegisterFunctionEntryCallback64;
3974
 
begin
3975
 
  GetProcedureAddress(_SymRegFuncEntryCallback64, ImageHlpLib, 'SymRegisterFunctionEntryCallback64');
3976
 
  asm
3977
 
        MOV     ESP, EBP
3978
 
        POP     EBP
3979
 
        JMP     [_SymRegFuncEntryCallback64]
3980
 
  end;
3981
 
end;
3982
 
 
3983
 
var
3984
 
  _SymRegisterCallback: Pointer;
3985
 
 
3986
 
function SymRegisterCallback;
3987
 
begin
3988
 
  GetProcedureAddress(_SymRegisterCallback, ImageHlpLib, 'SymRegisterCallback');
3989
 
  asm
3990
 
        MOV     ESP, EBP
3991
 
        POP     EBP
3992
 
        JMP     [_SymRegisterCallback]
3993
 
  end;
3994
 
end;
3995
 
 
3996
 
var
3997
 
  _SymRegisterFuncEntryCallback: Pointer;
3998
 
 
3999
 
function SymRegisterFunctionEntryCallback;
4000
 
begin
4001
 
  GetProcedureAddress(_SymRegisterFuncEntryCallback, ImageHlpLib, 'SymRegisterFunctionEntryCallback');
4002
 
  asm
4003
 
        MOV     ESP, EBP
4004
 
        POP     EBP
4005
 
        JMP     [_SymRegisterFuncEntryCallback]
4006
 
  end;
4007
 
end;
4008
 
 
4009
 
var
4010
 
  _SymSetContext: Pointer;
4011
 
 
4012
 
function SymSetContext;
4013
 
begin
4014
 
  GetProcedureAddress(_SymSetContext, ImageHlpLib, 'SymSetContext');
4015
 
  asm
4016
 
        MOV     ESP, EBP
4017
 
        POP     EBP
4018
 
        JMP     [_SymSetContext]
4019
 
  end;
4020
 
end;
4021
 
 
4022
 
var
4023
 
  _SymFromAddr: Pointer;
4024
 
 
4025
 
function SymFromAddr;
4026
 
begin
4027
 
  GetProcedureAddress(_SymFromAddr, ImageHlpLib, 'SymFromAddr');
4028
 
  asm
4029
 
        MOV     ESP, EBP
4030
 
        POP     EBP
4031
 
        JMP     [_SymFromAddr]
4032
 
  end;
4033
 
end;
4034
 
 
4035
 
var
4036
 
  _SymFromName: Pointer;
4037
 
 
4038
 
function SymFromName;
4039
 
begin
4040
 
  GetProcedureAddress(_SymFromName, ImageHlpLib, 'SymFromName');
4041
 
  asm
4042
 
        MOV     ESP, EBP
4043
 
        POP     EBP
4044
 
        JMP     [_SymFromName]
4045
 
  end;
4046
 
end;
4047
 
 
4048
 
var
4049
 
  _SymEnumSymbolsForAddr: Pointer;
4050
 
 
4051
 
function SymEnumSymbolsForAddr;
4052
 
begin
4053
 
  GetProcedureAddress(_SymEnumSymbolsForAddr, ImageHlpLib, 'SymEnumSymbolsForAddr');
4054
 
  asm
4055
 
        MOV     ESP, EBP
4056
 
        POP     EBP
4057
 
        JMP     [_SymEnumSymbolsForAddr]
4058
 
  end;
4059
 
end;
4060
 
 
4061
 
var
4062
 
  _SymEnumSymbols: Pointer;
4063
 
 
4064
 
function SymEnumSymbols;
4065
 
begin
4066
 
  GetProcedureAddress(_SymEnumSymbols, ImageHlpLib, 'SymEnumSymbols');
4067
 
  asm
4068
 
        MOV     ESP, EBP
4069
 
        POP     EBP
4070
 
        JMP     [_SymEnumSymbols]
4071
 
  end;
4072
 
end;
4073
 
 
4074
 
var
4075
 
  _SymGetTypeInfo: Pointer;
4076
 
 
4077
 
function SymGetTypeInfo;
4078
 
begin
4079
 
  GetProcedureAddress(_SymGetTypeInfo, ImageHlpLib, 'SymGetTypeInfo');
4080
 
  asm
4081
 
        MOV     ESP, EBP
4082
 
        POP     EBP
4083
 
        JMP     [_SymGetTypeInfo]
4084
 
  end;
4085
 
end;
4086
 
 
4087
 
var
4088
 
  _SymEnumTypes: Pointer;
4089
 
 
4090
 
function SymEnumTypes;
4091
 
begin
4092
 
  GetProcedureAddress(_SymEnumTypes, ImageHlpLib, 'SymEnumTypes');
4093
 
  asm
4094
 
        MOV     ESP, EBP
4095
 
        POP     EBP
4096
 
        JMP     [_SymEnumTypes]
4097
 
  end;
4098
 
end;
4099
 
 
4100
 
var
4101
 
  _SymGetTypeFromName: Pointer;
4102
 
 
4103
 
function SymGetTypeFromName;
4104
 
begin
4105
 
  GetProcedureAddress(_SymGetTypeFromName, ImageHlpLib, 'SymGetTypeFromName');
4106
 
  asm
4107
 
        MOV     ESP, EBP
4108
 
        POP     EBP
4109
 
        JMP     [_SymGetTypeFromName]
4110
 
  end;
4111
 
end;
4112
 
 
4113
 
var
4114
 
  _SymAddSymbol: Pointer;
4115
 
 
4116
 
function SymAddSymbol;
4117
 
begin
4118
 
  GetProcedureAddress(_SymAddSymbol, ImageHlpLib, 'SymAddSymbol');
4119
 
  asm
4120
 
        MOV     ESP, EBP
4121
 
        POP     EBP
4122
 
        JMP     [_SymAddSymbol]
4123
 
  end;
4124
 
end;
4125
 
 
4126
 
var
4127
 
  _SymDeleteSymbol: Pointer;
4128
 
 
4129
 
function SymDeleteSymbol;
4130
 
begin
4131
 
  GetProcedureAddress(_SymDeleteSymbol, ImageHlpLib, 'SymDeleteSymbol');
4132
 
  asm
4133
 
        MOV     ESP, EBP
4134
 
        POP     EBP
4135
 
        JMP     [_SymDeleteSymbol]
4136
 
  end;
4137
 
end;
4138
 
 
4139
 
var
4140
 
  _DbgHelpCreateUserDump: Pointer;
4141
 
 
4142
 
function DbgHelpCreateUserDump;
4143
 
begin
4144
 
  GetProcedureAddress(_DbgHelpCreateUserDump, ImageHlpLib, 'DbgHelpCreateUserDump');
4145
 
  asm
4146
 
        MOV     ESP, EBP
4147
 
        POP     EBP
4148
 
        JMP     [_DbgHelpCreateUserDump]
4149
 
  end;
4150
 
end;
4151
 
 
4152
 
var
4153
 
  _DbgHelpCreateUserDumpW: Pointer;
4154
 
 
4155
 
function DbgHelpCreateUserDumpW;
4156
 
begin
4157
 
  GetProcedureAddress(_DbgHelpCreateUserDumpW, ImageHlpLib, 'DbgHelpCreateUserDumpW');
4158
 
  asm
4159
 
        MOV     ESP, EBP
4160
 
        POP     EBP
4161
 
        JMP     [_DbgHelpCreateUserDumpW]
4162
 
  end;
4163
 
end;
4164
 
 
4165
 
var
4166
 
  _SymGetSymFromAddr64: Pointer;
4167
 
 
4168
 
function SymGetSymFromAddr64;
4169
 
begin
4170
 
  GetProcedureAddress(_SymGetSymFromAddr64, ImageHlpLib, 'SymGetSymFromAddr64');
4171
 
  asm
4172
 
        MOV     ESP, EBP
4173
 
        POP     EBP
4174
 
        JMP     [_SymGetSymFromAddr64]
4175
 
  end;
4176
 
end;
4177
 
 
4178
 
var
4179
 
  _SymGetSymFromAddr: Pointer;
4180
 
 
4181
 
function SymGetSymFromAddr;
4182
 
begin
4183
 
  GetProcedureAddress(_SymGetSymFromAddr, ImageHlpLib, 'SymGetSymFromAddr');
4184
 
  asm
4185
 
        MOV     ESP, EBP
4186
 
        POP     EBP
4187
 
        JMP     [_SymGetSymFromAddr]
4188
 
  end;
4189
 
end;
4190
 
 
4191
 
var
4192
 
  _SymGetSymFromName64: Pointer;
4193
 
 
4194
 
function SymGetSymFromName64;
4195
 
begin
4196
 
  GetProcedureAddress(_SymGetSymFromName64, ImageHlpLib, 'SymGetSymFromName64');
4197
 
  asm
4198
 
        MOV     ESP, EBP
4199
 
        POP     EBP
4200
 
        JMP     [_SymGetSymFromName64]
4201
 
  end;
4202
 
end;
4203
 
 
4204
 
var
4205
 
  _SymGetSymFromName: Pointer;
4206
 
 
4207
 
function SymGetSymFromName;
4208
 
begin
4209
 
  GetProcedureAddress(_SymGetSymFromName, ImageHlpLib, 'SymGetSymFromName');
4210
 
  asm
4211
 
        MOV     ESP, EBP
4212
 
        POP     EBP
4213
 
        JMP     [_SymGetSymFromName]
4214
 
  end;
4215
 
end;
4216
 
 
4217
 
var
4218
 
  _FindFileInPath: Pointer;
4219
 
 
4220
 
function FindFileInPath;
4221
 
begin
4222
 
  GetProcedureAddress(_FindFileInPath, ImageHlpLib, 'FindFileInPath');
4223
 
  asm
4224
 
        MOV     ESP, EBP
4225
 
        POP     EBP
4226
 
        JMP     [_FindFileInPath]
4227
 
  end;
4228
 
end;
4229
 
 
4230
 
var
4231
 
  _FindFileInSearchPath: Pointer;
4232
 
 
4233
 
function FindFileInSearchPath;
4234
 
begin
4235
 
  GetProcedureAddress(_FindFileInSearchPath, ImageHlpLib, 'FindFileInSearchPath');
4236
 
  asm
4237
 
        MOV     ESP, EBP
4238
 
        POP     EBP
4239
 
        JMP     [_FindFileInSearchPath]
4240
 
  end;
4241
 
end;
4242
 
 
4243
 
var
4244
 
  _SymEnumSym: Pointer;
4245
 
 
4246
 
function SymEnumSym;
4247
 
begin
4248
 
  GetProcedureAddress(_SymEnumSym, ImageHlpLib, 'SymEnumSym');
4249
 
  asm
4250
 
        MOV     ESP, EBP
4251
 
        POP     EBP
4252
 
        JMP     [_SymEnumSym]
4253
 
  end;
4254
 
end;
4255
 
 
4256
 
var
4257
 
  _MiniDumpWriteDump: Pointer;
4258
 
 
4259
 
function MiniDumpWriteDump;
4260
 
begin
4261
 
  GetProcedureAddress(_MiniDumpWriteDump, ImageHlpLib, 'MiniDumpWriteDump');
4262
 
  asm
4263
 
        MOV     ESP, EBP
4264
 
        POP     EBP
4265
 
        JMP     [_MiniDumpWriteDump]
4266
 
  end;
4267
 
end;
4268
 
 
4269
 
var
4270
 
  _MiniDumpReadDumpStream: Pointer;
4271
 
 
4272
 
function MiniDumpReadDumpStream;
4273
 
begin
4274
 
  GetProcedureAddress(_MiniDumpReadDumpStream, ImageHlpLib, 'MiniDumpReadDumpStream');
4275
 
  asm
4276
 
        MOV     ESP, EBP
4277
 
        POP     EBP
4278
 
        JMP     [_MiniDumpReadDumpStream]
4279
 
  end;
4280
 
end;
4281
 
 
4282
 
{$ELSE}
4283
 
 
4284
 
function BindImage; external ImageHlpLib name 'BindImage';
4285
 
function BindImageEx; external ImageHlpLib name 'BindImageEx';
4286
 
function ReBaseImage; external ImageHlpLib name 'ReBaseImage';
4287
 
function ReBaseImage64; external ImageHlpLib name 'ReBaseImage64';
4288
 
function CheckSumMappedFile; external ImageHlpLib name 'CheckSumMappedFile';
4289
 
function MapFileAndCheckSumA; external ImageHlpLib name 'MapFileAndCheckSumA';
4290
 
function MapFileAndCheckSumW; external ImageHlpLib name 'MapFileAndCheckSumW';
4291
 
function MapFileAndCheckSum; external ImageHlpLib name 'MapFileAndCheckSum' + AWSuffix;
4292
 
function GetImageConfigInformation; external ImageHlpLib name 'GetImageConfigInformation';
4293
 
function GetImageUnusedHeaderBytes; external ImageHlpLib name 'GetImageUnusedHeaderBytes';
4294
 
function SetImageConfigInformation; external ImageHlpLib name 'SetImageConfigInformation';
4295
 
function ImageGetDigestStream; external ImageHlpLib name 'ImageGetDigestStream';
4296
 
function ImageAddCertificate; external ImageHlpLib name 'ImageAddCertificate';
4297
 
function ImageRemoveCertificate; external ImageHlpLib name 'ImageRemoveCertificate';
4298
 
function ImageEnumerateCertificates; external ImageHlpLib name 'ImageEnumerateCertificates';
4299
 
function ImageGetCertificateData; external ImageHlpLib name 'ImageGetCertificateData';
4300
 
function ImageGetCertificateHeader; external ImageHlpLib name 'ImageGetCertificateHeader';
4301
 
function ImageLoad; external ImageHlpLib name 'ImageLoad';
4302
 
function ImageUnload; external ImageHlpLib name 'ImageUnload';
4303
 
function MapAndLoad; external ImageHlpLib name 'MapAndLoad';
4304
 
function UnMapAndLoad; external ImageHlpLib name 'UnMapAndLoad';
4305
 
function TouchFileTimes; external ImageHlpLib name 'TouchFileTimes';
4306
 
function SplitSymbols; external ImageHlpLib name 'SplitSymbols';
4307
 
function UpdateDebugInfoFile; external ImageHlpLib name 'UpdateDebugInfoFile';
4308
 
function UpdateDebugInfoFileEx; external ImageHlpLib name 'UpdateDebugInfoFileEx';
4309
 
function FindDebugInfoFile; external ImageHlpLib name 'FindDebugInfoFile';
4310
 
function FindDebugInfoFileEx; external ImageHlpLib name 'FindDebugInfoFileEx';
4311
 
function SymFindFileInPath; external ImageHlpLib name 'SymFindFileInPath';
4312
 
function FindExecutableImage; external ImageHlpLib name 'FindExecutableImage';
4313
 
function FindExecutableImageEx; external ImageHlpLib name 'FindExecutableImageEx';
4314
 
function ImageNtHeader; external ImageHlpLib name 'ImageNtHeader';
4315
 
function ImageDirectoryEntryToDataEx; external ImageHlpLib name 'ImageDirectoryEntryToDataEx';
4316
 
function ImageDirectoryEntryToData; external ImageHlpLib name 'ImageDirectoryEntryToData';
4317
 
function ImageRvaToSection; external ImageHlpLib name 'ImageRvaToSection';
4318
 
function ImageRvaToVa; external ImageHlpLib name 'ImageRvaToVa';
4319
 
function MapDebugInformation; external ImageHlpLib name 'MapDebugInformation';
4320
 
function UnmapDebugInformation; external ImageHlpLib name 'UnmapDebugInformation';
4321
 
function SearchTreeForFile; external ImageHlpLib name 'SearchTreeForFile';
4322
 
function EnumDirTree; external ImageHlpLib name 'EnumDirTree';
4323
 
function MakeSureDirectoryPathExists; external ImageHlpLib name 'MakeSureDirectoryPathExists';
4324
 
function UnDecorateSymbolName; external ImageHlpLib name 'UnDecorateSymbolName';
4325
 
function StackWalk64; external ImageHlpLib name 'StackWalk64';
4326
 
function StackWalk; external ImageHlpLib name 'StackWalk';
4327
 
function ImagehlpApiVersion; external ImageHlpLib name 'ImagehlpApiVersion';
4328
 
function ImagehlpApiVersionEx; external ImageHlpLib name 'ImagehlpApiVersionEx';
4329
 
function GetTimestampForLoadedLibrary; external ImageHlpLib name 'GetTimestampForLoadedLibrary';
4330
 
function SymSetOptions; external ImageHlpLib name 'SymSetOptions';
4331
 
function SymGetOptions; external ImageHlpLib name 'SymGetOptions';
4332
 
function SymCleanup; external ImageHlpLib name 'SymCleanup';
4333
 
function SymMatchString; external ImageHlpLib name 'SymMatchString';
4334
 
function SymEnumSourceFiles; external ImageHlpLib name 'SymEnumSourceFiles';
4335
 
function SymEnumerateModules64; external ImageHlpLib name 'SymEnumerateModules64';
4336
 
function SymEnumerateModules; external ImageHlpLib name 'SymEnumerateModules';
4337
 
function SymEnumerateSymbols64; external ImageHlpLib name 'SymEnumerateSymbols64';
4338
 
function SymEnumerateSymbolsW64; external ImageHlpLib name 'SymEnumerateSymbolsW64';
4339
 
function SymEnumerateSymbols; external ImageHlpLib name 'SymEnumerateSymbols';
4340
 
function SymEnumerateSymbolsW; external ImageHlpLib name 'SymEnumerateSymbolsW';
4341
 
function EnumerateLoadedModules64; external ImageHlpLib name 'EnumerateLoadedModules64';
4342
 
function EnumerateLoadedModules; external ImageHlpLib name 'EnumerateLoadedModules';
4343
 
function SymFunctionTableAccess64; external ImageHlpLib name 'SymFunctionTableAccess64';
4344
 
function SymFunctionTableAccess; external ImageHlpLib name 'SymFunctionTableAccess';
4345
 
function SymGetModuleInfo64; external ImageHlpLib name 'SymGetModuleInfo64';
4346
 
function SymGetModuleInfoW64; external ImageHlpLib name 'SymGetModuleInfoW64';
4347
 
function SymGetModuleInfo; external ImageHlpLib name 'SymGetModuleInfo';
4348
 
function SymGetModuleInfoW; external ImageHlpLib name 'SymGetModuleInfoW';
4349
 
function SymGetModuleBase64; external ImageHlpLib name 'SymGetModuleBase64';
4350
 
function SymGetModuleBase; external ImageHlpLib name 'SymGetModuleBase';
4351
 
function SymGetSymNext64; external ImageHlpLib name 'SymGetSymNext64';
4352
 
function SymGetSymNext; external ImageHlpLib name 'SymGetSymNext';
4353
 
function SymGetSymPrev64; external ImageHlpLib name 'SymGetSymPrev64';
4354
 
function SymGetSymPrev; external ImageHlpLib name 'SymGetSymPrev';
4355
 
function SymGetLineFromAddr64; external ImageHlpLib name 'SymGetLineFromAddr64';
4356
 
function SymGetLineFromAddr; external ImageHlpLib name 'SymGetLineFromAddr';
4357
 
function SymGetLineFromName64; external ImageHlpLib name 'SymGetLineFromName64';
4358
 
function SymGetLineFromName; external ImageHlpLib name 'SymGetLineFromName';
4359
 
function SymGetLineNext64; external ImageHlpLib name 'SymGetLineNext64';
4360
 
function SymGetLineNext; external ImageHlpLib name 'SymGetLineNext';
4361
 
function SymGetLinePrev64; external ImageHlpLib name 'SymGetLinePrev64';
4362
 
function SymGetLinePrev; external ImageHlpLib name 'SymGetLinePrev';
4363
 
function SymMatchFileName; external ImageHlpLib name 'SymMatchFileName';
4364
 
function SymInitialize; external ImageHlpLib name 'SymInitialize';
4365
 
function SymGetSearchPath; external ImageHlpLib name 'SymGetSearchPath';
4366
 
function SymSetSearchPath; external ImageHlpLib name 'SymSetSearchPath';
4367
 
function SymLoadModuleEx; external ImageHlpLib name 'SymLoadModuleEx';
4368
 
function SymLoadModule64; external ImageHlpLib name 'SymLoadModule64';
4369
 
function SymLoadModule; external ImageHlpLib name 'SymLoadModule';
4370
 
function SymUnloadModule64; external ImageHlpLib name 'SymUnloadModule64';
4371
 
function SymUnloadModule; external ImageHlpLib name 'SymUnloadModule';
4372
 
function SymUnDName64; external ImageHlpLib name 'SymUnDName64';
4373
 
function SymUnDName; external ImageHlpLib name 'SymUnDName';
4374
 
function SymRegisterCallback64; external ImageHlpLib name 'SymRegisterCallback64';
4375
 
function SymRegisterFunctionEntryCallback64; external ImageHlpLib name 'SymRegisterFunctionEntryCallback64';
4376
 
function SymRegisterCallback; external ImageHlpLib name 'SymRegisterCallback';
4377
 
function SymRegisterFunctionEntryCallback; external ImageHlpLib name 'SymRegisterFunctionEntryCallback';
4378
 
function SymSetContext; external ImageHlpLib name 'SymSetContext';
4379
 
function SymFromAddr; external ImageHlpLib name 'SymFromAddr';
4380
 
function SymFromName; external ImageHlpLib name 'SymFromName';
4381
 
function SymEnumSymbolsForAddr; external ImageHlpLib name 'SymEnumSymbolsForAddr';
4382
 
function SymEnumSymbols; external ImageHlpLib name 'SymEnumSymbols';
4383
 
function SymGetTypeInfo; external ImageHlpLib name 'SymGetTypeInfo';
4384
 
function SymEnumTypes; external ImageHlpLib name 'SymEnumTypes';
4385
 
function SymGetTypeFromName; external ImageHlpLib name 'SymGetTypeFromName';
4386
 
function SymAddSymbol; external ImageHlpLib name 'SymAddSymbol';
4387
 
function SymDeleteSymbol; external ImageHlpLib name 'SymDeleteSymbol';
4388
 
function DbgHelpCreateUserDump; external ImageHlpLib name 'DbgHelpCreateUserDump';
4389
 
function DbgHelpCreateUserDumpW; external ImageHlpLib name 'DbgHelpCreateUserDumpW';
4390
 
function SymGetSymFromAddr64; external ImageHlpLib name 'SymGetSymFromAddr64';
4391
 
function SymGetSymFromAddr; external ImageHlpLib name 'SymGetSymFromAddr';
4392
 
function SymGetSymFromName64; external ImageHlpLib name 'SymGetSymFromName64';
4393
 
function SymGetSymFromName; external ImageHlpLib name 'SymGetSymFromName';
4394
 
function FindFileInPath; external ImageHlpLib name 'FindFileInPath';
4395
 
function FindFileInSearchPath; external ImageHlpLib name 'FindFileInSearchPath';
4396
 
function SymEnumSym; external ImageHlpLib name 'SymEnumSym';
4397
 
function MiniDumpWriteDump; external ImageHlpLib name 'MiniDumpWriteDump';
4398
 
function MiniDumpReadDumpStream; external ImageHlpLib name 'MiniDumpReadDumpStream';
4399
 
 
4400
 
{$ENDIF DYNAMIC_LINK}
4401
 
 
4402
 
end.
 
1
{******************************************************************************}
 
2
{                                                                              }
 
3
{ Image Help API interface Unit for Object Pascal                              }
 
4
{                                                                              }
 
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
 
6
{ Corporation. All Rights Reserved.                                            }
 
7
{                                                                              }
 
8
{ The original file is: imagehlp.h, released August 2001. The original Pascal  }
 
9
{ code is: ImageHelp.pas, released December 2000. The initial developer of the }
 
10
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl).               }
 
11
{                                                                              }
 
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
 
13
{ Marcel van Brakel. All Rights Reserved.                                      }
 
14
{                                                                              }
 
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
 
16
{                                                                              }
 
17
{ You may retrieve the latest version of this file at the Project JEDI         }
 
18
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
 
19
{                                                                              }
 
20
{ The contents of this file are used with permission, subject to the Mozilla   }
 
21
{ Public License Version 1.1 (the "License"); you may not use this file except }
 
22
{ in compliance with the License. You may obtain a copy of the License at      }
 
23
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
 
24
{                                                                              }
 
25
{ Software distributed under the License is distributed on an "AS IS" basis,   }
 
26
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
 
27
{ the specific language governing rights and limitations under the License.    }
 
28
{                                                                              }
 
29
{ Alternatively, the contents of this file may be used under the terms of the  }
 
30
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
 
31
{ provisions of the LGPL License are applicable instead of those above.        }
 
32
{ If you wish to allow use of your version of this file only under the terms   }
 
33
{ of the LGPL License and not to allow others to use your version of this file }
 
34
{ under the MPL, indicate your decision by deleting  the provisions above and  }
 
35
{ replace  them with the notice and other provisions required by the LGPL      }
 
36
{ License.  If you do not delete the provisions above, a recipient may use     }
 
37
{ your version of this file under either the MPL or the LGPL License.          }
 
38
{                                                                              }
 
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
 
40
{                                                                              }
 
41
{******************************************************************************}
 
42
 
 
43
 
 
44
unit JwaImageHlp;
 
45
 
 
46
{$WEAKPACKAGEUNIT}
 
47
 
 
48
{$HPPEMIT ''}
 
49
{$HPPEMIT '#include "ImageHlp.h"'}
 
50
{$HPPEMIT ''}
 
51
 
 
52
{$I jediapilib.inc}
 
53
 
 
54
interface
 
55
 
 
56
uses
 
57
  Windows, JwaWinBase, JwaWinNT, JwaWinType;
 
58
 
 
59
const
 
60
  IMAGE_SEPARATION = 64*1024;
 
61
  {$EXTERNALSYM IMAGE_SEPARATION}
 
62
 
 
63
type
 
64
  PLOADED_IMAGE = ^LOADED_IMAGE;
 
65
  {$EXTERNALSYM PLOADED_IMAGE}
 
66
  _LOADED_IMAGE = record
 
67
    ModuleName: PSTR;
 
68
    hFile: HANDLE;
 
69
    MappedAddress: PUCHAR;
 
70
    FileHeader: PIMAGE_NT_HEADERS32;
 
71
    LastRvaSection: PIMAGE_SECTION_HEADER;
 
72
    NumberOfSections: ULONG;
 
73
    Sections: PIMAGE_SECTION_HEADER;
 
74
    Characteristics: ULONG;
 
75
    fSystemImage: ByteBool;
 
76
    fDOSImage: ByteBool;
 
77
    Links: LIST_ENTRY;
 
78
    SizeOfImage: ULONG;
 
79
  end;
 
80
  {$EXTERNALSYM _LOADED_IMAGE}
 
81
  LOADED_IMAGE = _LOADED_IMAGE;
 
82
  {$EXTERNALSYM LOADED_IMAGE}
 
83
  TLoadedImage = LOADED_IMAGE;
 
84
  PLoadedImage = PLOADED_IMAGE;
 
85
 
 
86
const
 
87
  MAX_SYM_NAME = 2000;
 
88
  {$EXTERNALSYM MAX_SYM_NAME}
 
89
 
 
90
function BindImage(ImageName, DllPath, SymbolPath: PSTR): BOOL; stdcall;
 
91
{$EXTERNALSYM BindImage}
 
92
 
 
93
type
 
94
  _IMAGEHLP_STATUS_REASON = (
 
95
    BindOutOfMemory,
 
96
    BindRvaToVaFailed,
 
97
    BindNoRoomInImage,
 
98
    BindImportModuleFailed,
 
99
    BindImportProcedureFailed,
 
100
    BindImportModule,
 
101
    BindImportProcedure,
 
102
    BindForwarder,
 
103
    BindForwarderNOT,
 
104
    BindImageModified,
 
105
    BindExpandFileHeaders,
 
106
    BindImageComplete,
 
107
    BindMismatchedSymbols,
 
108
    BindSymbolsNotUpdated,
 
109
    BindImportProcedure32,
 
110
    BindImportProcedure64,
 
111
    BindForwarder32,
 
112
    BindForwarder64,
 
113
    BindForwarderNOT32,
 
114
    BindForwarderNOT64);
 
115
  {$EXTERNALSYM _IMAGEHLP_STATUS_REASON}
 
116
  IMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON;
 
117
  {$EXTERNALSYM IMAGEHLP_STATUS_REASON}
 
118
  TImageHlpStatusReason = IMAGEHLP_STATUS_REASON;
 
119
 
 
120
  PIMAGEHLP_STATUS_ROUTINE = function(Reason: IMAGEHLP_STATUS_REASON;
 
121
    ImageName, DllName: PSTR; Va, Parameter: ULONG_PTR): BOOL; stdcall;
 
122
  {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE}
 
123
  PImageHlpStatusRoutine = PIMAGEHLP_STATUS_ROUTINE;
 
124
 
 
125
  PIMAGEHLP_STATUS_ROUTINE32 = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR;
 
126
    Va: ULONG; Parameter: ULONG_PTR): BOOL; stdcall;
 
127
  {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE32}
 
128
  PImageHlpStatusRoutine23 = PIMAGEHLP_STATUS_ROUTINE32;
 
129
 
 
130
  PIMAGEHLP_STATUS_ROUTINE64 = function(Reason: IMAGEHLP_STATUS_REASON; ImageName, DllName: PSTR;
 
131
    Va: ULONG64; Parameter: ULONG_PTR): BOOL; stdcall;
 
132
  {$EXTERNALSYM PIMAGEHLP_STATUS_ROUTINE64}
 
133
  PImageHlpStatusRoutine64 = PIMAGEHLP_STATUS_ROUTINE64;
 
134
 
 
135
function BindImageEx(Flags: DWORD; ImageName, DllPath, SymbolPath: PSTR;
 
136
  StatusRoutine: PIMAGEHLP_STATUS_ROUTINE): BOOL; stdcall;
 
137
{$EXTERNALSYM BindImageEx}
 
138
 
 
139
const
 
140
  BIND_NO_BOUND_IMPORTS  = $00000001;
 
141
  {$EXTERNALSYM BIND_NO_BOUND_IMPORTS}
 
142
  BIND_NO_UPDATE         = $00000002;
 
143
  {$EXTERNALSYM BIND_NO_UPDATE}
 
144
  BIND_ALL_IMAGES        = $00000004;
 
145
  {$EXTERNALSYM BIND_ALL_IMAGES}
 
146
  BIND_CACHE_IMPORT_DLLS = $00000008; // Cache dll's across calls to BindImageEx (same as NT 3.1->NT 4.0)
 
147
  {$EXTERNALSYM BIND_CACHE_IMPORT_DLLS}
 
148
 
 
149
  BIND_REPORT_64BIT_VA   = $00000010;
 
150
  {$EXTERNALSYM BIND_REPORT_64BIT_VA}
 
151
 
 
152
function ReBaseImage(CurrentImageName: PSTR; SymbolPath: PSTR; fReBase: BOOL;
 
153
  fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
 
154
  var OldImageSize: ULONG; var OldImageBase: ULONG_PTR; var NewImageSize: ULONG;
 
155
  var NewImageBase: ULONG_PTR; TimeStamp: ULONG): BOOL; stdcall;
 
156
{$EXTERNALSYM ReBaseImage}
 
157
 
 
158
function ReBaseImage64(CurrentImageName: PSTR; SymbolPath: PSTR; fReBase: BOOL;
 
159
  fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
 
160
  var OldImageSize: ULONG; var OldImageBase: ULONG64; var NewImageSize: ULONG;
 
161
  var NewImageBase: ULONG64; TimeStamp: ULONG): BOOL; stdcall;
 
162
{$EXTERNALSYM ReBaseImage64}
 
163
 
 
164
//
 
165
// Define checksum return codes.
 
166
//
 
167
 
 
168
const
 
169
  CHECKSUM_SUCCESS         = 0;
 
170
  {$EXTERNALSYM CHECKSUM_SUCCESS}
 
171
  CHECKSUM_OPEN_FAILURE    = 1;
 
172
  {$EXTERNALSYM CHECKSUM_OPEN_FAILURE}
 
173
  CHECKSUM_MAP_FAILURE     = 2;
 
174
  {$EXTERNALSYM CHECKSUM_MAP_FAILURE}
 
175
  CHECKSUM_MAPVIEW_FAILURE = 3;
 
176
  {$EXTERNALSYM CHECKSUM_MAPVIEW_FAILURE}
 
177
  CHECKSUM_UNICODE_FAILURE = 4;
 
178
  {$EXTERNALSYM CHECKSUM_UNICODE_FAILURE}
 
179
 
 
180
// Define Splitsym flags.
 
181
 
 
182
  SPLITSYM_REMOVE_PRIVATE = $00000001; // Remove CV types/symbols and Fixup debug
 
183
  {$EXTERNALSYM SPLITSYM_REMOVE_PRIVATE}
 
184
                                                    //  Used for creating .dbg files that ship
 
185
                                                    //  as part of the product.
 
186
 
 
187
  SPLITSYM_EXTRACT_ALL = $00000002; // Extract all debug info from image.
 
188
  {$EXTERNALSYM SPLITSYM_EXTRACT_ALL}
 
189
                                                    //  Normally, FPO is left in the image
 
190
                                                    //  to allow stack traces through the code.
 
191
                                                    //  Using this switch is similar to linking
 
192
                                                    //  with -debug:none except the .dbg file
 
193
                                                    //  exists...
 
194
 
 
195
  SPLITSYM_SYMBOLPATH_IS_SRC = $00000004; // The SymbolFilePath contains an alternate
 
196
  {$EXTERNALSYM SPLITSYM_SYMBOLPATH_IS_SRC}
 
197
                                                    //  path to locate the pdb.
 
198
 
 
199
//
 
200
// Define checksum function prototypes.
 
201
//
 
202
 
 
203
function CheckSumMappedFile(BaseAddress: PVOID; FileLength: DWORD;
 
204
  var HeaderSum, CheckSum: DWORD): PIMAGE_NT_HEADERS; stdcall;
 
205
{$EXTERNALSYM CheckSumMappedFile}
 
206
 
 
207
function MapFileAndCheckSumA(Filename: PSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall;
 
208
{$EXTERNALSYM MapFileAndCheckSumA}
 
209
function MapFileAndCheckSumW(Filename: PWSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall;
 
210
{$EXTERNALSYM MapFileAndCheckSumW}
 
211
function MapFileAndCheckSum(Filename: PTSTR; var HeaderSum, CheckSum: DWORD): DWORD; stdcall;
 
212
{$EXTERNALSYM MapFileAndCheckSum}
 
213
 
 
214
function GetImageConfigInformation(const LoadedImage: LOADED_IMAGE;
 
215
  var ImageConfigInformation: IMAGE_LOAD_CONFIG_DIRECTORY): BOOL; stdcall;
 
216
{$EXTERNALSYM GetImageConfigInformation}
 
217
 
 
218
function GetImageUnusedHeaderBytes(const LoadedImage: LOADED_IMAGE;
 
219
  var SizeUnusedHeaderBytes: DWORD): DWORD; stdcall;
 
220
{$EXTERNALSYM GetImageUnusedHeaderBytes}
 
221
 
 
222
function SetImageConfigInformation(const LoadedImage: LOADED_IMAGE;
 
223
  const ImageConfigInformation: IMAGE_LOAD_CONFIG_DIRECTORY): BOOL; stdcall;
 
224
{$EXTERNALSYM SetImageConfigInformation}
 
225
 
 
226
// Image Integrity API's
 
227
 
 
228
const
 
229
  CERT_PE_IMAGE_DIGEST_DEBUG_INFO      = $01;
 
230
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_DEBUG_INFO}
 
231
  CERT_PE_IMAGE_DIGEST_RESOURCES       = $02;
 
232
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_RESOURCES}
 
233
  CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = $04;
 
234
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO}
 
235
  CERT_PE_IMAGE_DIGEST_NON_PE_INFO     = $08; // include data outside the PE image
 
236
  {$EXTERNALSYM CERT_PE_IMAGE_DIGEST_NON_PE_INFO}
 
237
 
 
238
  CERT_SECTION_TYPE_ANY = $FF; // Any Certificate type
 
239
  {$EXTERNALSYM CERT_SECTION_TYPE_ANY}
 
240
 
 
241
type
 
242
  DIGEST_HANDLE = PVOID;
 
243
  {$EXTERNALSYM DIGEST_HANDLE}
 
244
  TDigestHandle = DIGEST_HANDLE;
 
245
 
 
246
  DIGEST_FUNCTION = function(refdata: DIGEST_HANDLE; pData: PBYTE; dwLength: DWORD): BOOL; stdcall;
 
247
  {$EXTERNALSYM DIGEST_FUNCTION}
 
248
  TDigestFunction = DIGEST_FUNCTION;
 
249
 
 
250
function ImageGetDigestStream(FileHandle: HANDLE; DigestLevel: DWORD;
 
251
  DigestFunction: DIGEST_FUNCTION; DigestHandle: DIGEST_HANDLE): BOOL; stdcall;
 
252
{$EXTERNALSYM ImageGetDigestStream}
 
253
 
 
254
function ImageAddCertificate(FileHandle: HANDLE; Certificate: PWinCertificate;
 
255
  var Index: DWORD): BOOL; stdcall;
 
256
{$EXTERNALSYM ImageAddCertificate}
 
257
 
 
258
function ImageRemoveCertificate(FileHandle: HANDLE; Index: DWORD): BOOL; stdcall;
 
259
{$EXTERNALSYM ImageRemoveCertificate}
 
260
 
 
261
function ImageEnumerateCertificates(FileHandle: HANDLE; TypeFilter: WORD;
 
262
  var CertificateCount: DWORD; Indices: PDWORD; IndexCount: DWORD): BOOL; stdcall;
 
263
{$EXTERNALSYM ImageEnumerateCertificates}
 
264
 
 
265
function ImageGetCertificateData(FileHandle: HANDLE; CertificateIndex: DWORD;
 
266
  Certificate: PWinCertificate; var RequiredLength: DWORD): BOOL; stdcall;
 
267
{$EXTERNALSYM ImageGetCertificateData}
 
268
 
 
269
function ImageGetCertificateHeader(FileHandle: HANDLE; CertificateIndex: DWORD;
 
270
  Certificateheader: PWinCertificate): BOOL; stdcall;
 
271
{$EXTERNALSYM ImageGetCertificateHeader}
 
272
 
 
273
function ImageLoad(DllName: PSTR; DllPath: PSTR): PLOADED_IMAGE; stdcall;
 
274
{$EXTERNALSYM ImageLoad}
 
275
 
 
276
function ImageUnload(const LoadedImage: LOADED_IMAGE): BOOL; stdcall;
 
277
{$EXTERNALSYM ImageUnload}
 
278
 
 
279
function MapAndLoad(ImageName, DllPath: PSTR; var LoadedImage: LOADED_IMAGE;
 
280
  DotDll: BOOL; ReadOnly: BOOL): BOOL; stdcall;
 
281
{$EXTERNALSYM MapAndLoad}
 
282
 
 
283
function UnMapAndLoad(const LoadedImage: LOADED_IMAGE): BOOL; stdcall;
 
284
{$EXTERNALSYM UnMapAndLoad}
 
285
 
 
286
function TouchFileTimes(FileHandle: HANDLE; pSystemTime: PSYSTEMTIME): BOOL; stdcall;
 
287
{$EXTERNALSYM TouchFileTimes}
 
288
 
 
289
function SplitSymbols(ImageName, SymbolsPath, SymbolFilePath: PSTR; Flags: DWORD): BOOL; stdcall;
 
290
{$EXTERNALSYM SplitSymbols}
 
291
 
 
292
function UpdateDebugInfoFile(ImageFileName, SymbolPath, DebugFilePath: PSTR;
 
293
  const NtHeaders: IMAGE_NT_HEADERS32): BOOL; stdcall;
 
294
{$EXTERNALSYM UpdateDebugInfoFile}
 
295
 
 
296
function UpdateDebugInfoFileEx(ImageFileName, SymbolPath, DebugFilePath: PSTR;
 
297
  const NtHeaders: IMAGE_NT_HEADERS32; OldChecksum: DWORD): BOOL; stdcall;
 
298
{$EXTERNALSYM UpdateDebugInfoFileEx}
 
299
 
 
300
function FindDebugInfoFile(FileName, SymbolPath, DebugFilePath: PSTR): HANDLE; stdcall;
 
301
{$EXTERNALSYM FindDebugInfoFile}
 
302
 
 
303
type
 
304
  PFIND_DEBUG_FILE_CALLBACK = function(FileHandle: HANDLE; FileName: PSTR;
 
305
    CallerData: PVOID): BOOL; stdcall;
 
306
  {$EXTERNALSYM PFIND_DEBUG_FILE_CALLBACK}
 
307
  PFindDebugFileCallback = PFIND_DEBUG_FILE_CALLBACK;
 
308
 
 
309
function FindDebugInfoFileEx(FileName, SymbolPath, DebugFilePath: PSTR;
 
310
  Callback: PFIND_DEBUG_FILE_CALLBACK; CallerData: PVOID): HANDLE; stdcall;
 
311
{$EXTERNALSYM FindDebugInfoFileEx}
 
312
 
 
313
type
 
314
  PFINDFILEINPATHCALLBACK = function(filename: PSTR; context: PVOID): BOOL; stdcall;
 
315
  {$EXTERNALSYM PFINDFILEINPATHCALLBACK}
 
316
 
 
317
function SymFindFileInPath(hprocess: HANDLE; SearchPath, FileName: LPSTR; id: PVOID; two, three, flags: DWORD;
 
318
  FoundFile: LPSTR; callback: PFINDFILEINPATHCALLBACK; context: PVOID): BOOL; stdcall;
 
319
{$EXTERNALSYM SymFindFileInPath}
 
320
 
 
321
function FindExecutableImage(FileName, SymbolPath, ImageFilePath: PSTR): HANDLE; stdcall;
 
322
{$EXTERNALSYM FindExecutableImage}
 
323
 
 
324
type
 
325
  PFIND_EXE_FILE_CALLBACK = function(FileHandle: HANDLE; FileName: PSTR;
 
326
    CallerData: PVOID): BOOL; stdcall;
 
327
  {$EXTERNALSYM PFIND_EXE_FILE_CALLBACK}
 
328
  PFindExeFileCallback = PFIND_EXE_FILE_CALLBACK;
 
329
 
 
330
function FindExecutableImageEx(FileName, SymbolPath, ImageFilePath: PSTR;
 
331
  Callback: PFIND_EXE_FILE_CALLBACK; CallerData: PVOID): HANDLE; stdcall;
 
332
{$EXTERNALSYM FindExecutableImageEx}
 
333
 
 
334
function ImageNtHeader(Base: PVOID): PIMAGE_NT_HEADERS; stdcall;
 
335
{$EXTERNALSYM ImageNtHeader}
 
336
 
 
337
function ImageDirectoryEntryToDataEx(Base: PVOID; MappedAsImage: ByteBool;
 
338
  DirectoryEntry: USHORT; var Size: ULONG; var FoundHeader: PIMAGE_SECTION_HEADER): PVOID; stdcall;
 
339
{$EXTERNALSYM ImageDirectoryEntryToDataEx}
 
340
 
 
341
function ImageDirectoryEntryToData(Base: PVOID; MappedAsImage: ByteBool;
 
342
  DirectoryEntry: USHORT; var Size: ULONG): PVOID; stdcall;
 
343
{$EXTERNALSYM ImageDirectoryEntryToData}
 
344
 
 
345
function ImageRvaToSection(NtHeaders: PIMAGE_NT_HEADERS; Base: PVOID; Rva: ULONG): PIMAGE_SECTION_HEADER; stdcall;
 
346
{$EXTERNALSYM ImageRvaToSection}
 
347
 
 
348
function ImageRvaToVa(NtHeaders: PIMAGE_NT_HEADERS; Base: PVOID; Rva: ULONG;
 
349
  var LastRvaSection: PIMAGE_SECTION_HEADER): PVOID; stdcall;
 
350
{$EXTERNALSYM ImageRvaToVa}
 
351
 
 
352
// Symbol server exports
 
353
 
 
354
type
 
355
  PSYMBOLSERVERPROC = function(a1, a2: LPCSTR; a3: PVOID; a4, a5: DWORD; a6: LPSTR): BOOL; stdcall;
 
356
  {$EXTERNALSYM PSYMBOLSERVERPROC}
 
357
  PSYMBOLSERVEROPENPROC = function: BOOL; stdcall;
 
358
  {$EXTERNALSYM PSYMBOLSERVEROPENPROC}
 
359
  PSYMBOLSERVERCLOSEPROC = function: BOOL; stdcall;
 
360
  {$EXTERNALSYM PSYMBOLSERVERCLOSEPROC}
 
361
  PSYMBOLSERVERSETOPTIONSPROC = function(a1: UINT_PTR; a2: ULONG64): BOOL; stdcall;
 
362
  {$EXTERNALSYM PSYMBOLSERVERSETOPTIONSPROC}
 
363
  PSYMBOLSERVERCALLBACKPROC = function(action: UINT_PTR; data: ULONG64; context: ULONG64): BOOL; stdcall;
 
364
  {$EXTERNALSYM PSYMBOLSERVERCALLBACKPROC}
 
365
  PSYMBOLSERVERGETOPTIONSPROC = function: UINT_PTR; stdcall;
 
366
  {$EXTERNALSYM PSYMBOLSERVERGETOPTIONSPROC}
 
367
  PSYMBOLSERVERPINGPROC = function(a1: LPCSTR): BOOL; stdcall;
 
368
  {$EXTERNALSYM PSYMBOLSERVERPINGPROC}
 
369
 
 
370
const
 
371
  SSRVOPT_CALLBACK   = $01;
 
372
  {$EXTERNALSYM SSRVOPT_CALLBACK}
 
373
  SSRVOPT_DWORD      = $02;
 
374
  {$EXTERNALSYM SSRVOPT_DWORD}
 
375
  SSRVOPT_DWORDPTR   = $04;
 
376
  {$EXTERNALSYM SSRVOPT_DWORDPTR}
 
377
  SSRVOPT_GUIDPTR    = $08;
 
378
  {$EXTERNALSYM SSRVOPT_GUIDPTR}
 
379
  SSRVOPT_OLDGUIDPTR = $10;
 
380
  {$EXTERNALSYM SSRVOPT_OLDGUIDPTR}
 
381
  SSRVOPT_UNATTENDED = $20;
 
382
  {$EXTERNALSYM SSRVOPT_UNATTENDED}
 
383
  SSRVOPT_RESET      = ULONG_PTR(-1);
 
384
  {$EXTERNALSYM SSRVOPT_RESET}
 
385
 
 
386
  SSRVACTION_TRACE   = 1;
 
387
  {$EXTERNALSYM SSRVACTION_TRACE}
 
388
 
 
389
// This api won't be ported to Win64 - Fix your code.
 
390
 
 
391
type
 
392
  PIMAGE_DEBUG_INFORMATION = ^IMAGE_DEBUG_INFORMATION;
 
393
  {$EXTERNALSYM PIMAGE_DEBUG_INFORMATION}
 
394
  _IMAGE_DEBUG_INFORMATION = record
 
395
    List: LIST_ENTRY;
 
396
    ReservedSize: DWORD;
 
397
    ReservedMappedBase: PVOID;
 
398
    ReservedMachine: USHORT;
 
399
    ReservedCharacteristics: USHORT;
 
400
    ReservedCheckSum: DWORD;
 
401
    ImageBase: DWORD;
 
402
    SizeOfImage: DWORD;
 
403
    ReservedNumberOfSections: DWORD;
 
404
    ReservedSections: PIMAGE_SECTION_HEADER;
 
405
    ReservedExportedNamesSize: DWORD;
 
406
    ReservedExportedNames: PSTR;
 
407
    ReservedNumberOfFunctionTableEntries: DWORD;
 
408
    ReservedFunctionTableEntries: PIMAGE_FUNCTION_ENTRY;
 
409
    ReservedLowestFunctionStartingAddress: DWORD;
 
410
    ReservedHighestFunctionEndingAddress: DWORD;
 
411
    ReservedNumberOfFpoTableEntries: DWORD;
 
412
    ReservedFpoTableEntries: PFPO_DATA;
 
413
    SizeOfCoffSymbols: DWORD;
 
414
    CoffSymbols: PIMAGE_COFF_SYMBOLS_HEADER;
 
415
    ReservedSizeOfCodeViewSymbols: DWORD;
 
416
    ReservedCodeViewSymbols: PVOID;
 
417
    ImageFilePath: PSTR;
 
418
    ImageFileName: PSTR;
 
419
    ReservedDebugFilePath: PSTR;
 
420
    ReservedTimeDateStamp: DWORD;
 
421
    ReservedRomImage: BOOL;
 
422
    ReservedDebugDirectory: PIMAGE_DEBUG_DIRECTORY;
 
423
    ReservedNumberOfDebugDirectories: DWORD;
 
424
    ReservedOriginalFunctionTableBaseAddress: DWORD;
 
425
    Reserved: array [0..1] of DWORD;
 
426
  end;
 
427
  {$EXTERNALSYM _IMAGE_DEBUG_INFORMATION}
 
428
  IMAGE_DEBUG_INFORMATION = _IMAGE_DEBUG_INFORMATION;
 
429
  {$EXTERNALSYM IMAGE_DEBUG_INFORMATION}
 
430
  TImageDebugInformation = IMAGE_DEBUG_INFORMATION;
 
431
  PImageDebugInformation = PIMAGE_DEBUG_INFORMATION;
 
432
 
 
433
function MapDebugInformation(FileHandle: HANDLE; FileName, SymbolPath: PSTR;
 
434
  ImageBase: DWORD): PIMAGE_DEBUG_INFORMATION; stdcall;
 
435
{$EXTERNALSYM MapDebugInformation}
 
436
 
 
437
function UnmapDebugInformation(DebugInfo: PIMAGE_DEBUG_INFORMATION): BOOL; stdcall;
 
438
{$EXTERNALSYM UnmapDebugInformation}
 
439
 
 
440
function SearchTreeForFile(RootPath, InputPathName, OutputPathBuffer: PSTR): BOOL; stdcall;
 
441
{$EXTERNALSYM SearchTreeForFile}
 
442
 
 
443
type
 
444
  PENUMDIRTREE_CALLBACK = function(FilePath: LPCSTR; CallerData: PVOID): BOOL; stdcall;
 
445
  {$EXTERNALSYM PENUMDIRTREE_CALLBACK}
 
446
  PEnumDirTreeCallback = PENUMDIRTREE_CALLBACK;
 
447
 
 
448
function EnumDirTree(hProcess: HANDLE; RootPath, InputPathName, OutputPathBuffer: PSTR;
 
449
  Callback: PENUMDIRTREE_CALLBACK; CallbackData: PVOID): BOOL; stdcall;
 
450
{$EXTERNALSYM EnumDirTree}
 
451
 
 
452
function MakeSureDirectoryPathExists(DirPath: PCSTR): BOOL; stdcall;
 
453
{$EXTERNALSYM MakeSureDirectoryPathExists}
 
454
 
 
455
//
 
456
// UnDecorateSymbolName Flags
 
457
//
 
458
 
 
459
const
 
460
  UNDNAME_COMPLETE               = $0000; // Enable full undecoration
 
461
  {$EXTERNALSYM UNDNAME_COMPLETE}
 
462
  UNDNAME_NO_LEADING_UNDERSCORES = $0001; // Remove leading underscores from MS extended keywords
 
463
  {$EXTERNALSYM UNDNAME_NO_LEADING_UNDERSCORES}
 
464
  UNDNAME_NO_MS_KEYWORDS         = $0002; // Disable expansion of MS extended keywords
 
465
  {$EXTERNALSYM UNDNAME_NO_MS_KEYWORDS}
 
466
  UNDNAME_NO_FUNCTION_RETURNS    = $0004; // Disable expansion of return type for primary declaration
 
467
  {$EXTERNALSYM UNDNAME_NO_FUNCTION_RETURNS}
 
468
  UNDNAME_NO_ALLOCATION_MODEL    = $0008; // Disable expansion of the declaration model
 
469
  {$EXTERNALSYM UNDNAME_NO_ALLOCATION_MODEL}
 
470
  UNDNAME_NO_ALLOCATION_LANGUAGE = $0010; // Disable expansion of the declaration language specifier
 
471
  {$EXTERNALSYM UNDNAME_NO_ALLOCATION_LANGUAGE}
 
472
  UNDNAME_NO_MS_THISTYPE         = $0020; // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
 
473
  {$EXTERNALSYM UNDNAME_NO_MS_THISTYPE}
 
474
  UNDNAME_NO_CV_THISTYPE         = $0040; // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
 
475
  {$EXTERNALSYM UNDNAME_NO_CV_THISTYPE}
 
476
  UNDNAME_NO_THISTYPE            = $0060; // Disable all modifiers on the 'this' type
 
477
  {$EXTERNALSYM UNDNAME_NO_THISTYPE}
 
478
  UNDNAME_NO_ACCESS_SPECIFIERS   = $0080; // Disable expansion of access specifiers for members
 
479
  {$EXTERNALSYM UNDNAME_NO_ACCESS_SPECIFIERS}
 
480
  UNDNAME_NO_THROW_SIGNATURES    = $0100; // Disable expansion of 'throw-signatures' for functions and pointers to functions
 
481
  {$EXTERNALSYM UNDNAME_NO_THROW_SIGNATURES}
 
482
  UNDNAME_NO_MEMBER_TYPE         = $0200; // Disable expansion of 'static' or 'virtual'ness of members
 
483
  {$EXTERNALSYM UNDNAME_NO_MEMBER_TYPE}
 
484
  UNDNAME_NO_RETURN_UDT_MODEL    = $0400; // Disable expansion of MS model for UDT returns
 
485
  {$EXTERNALSYM UNDNAME_NO_RETURN_UDT_MODEL}
 
486
  UNDNAME_32_BIT_DECODE          = $0800; // Undecorate 32-bit decorated names
 
487
  {$EXTERNALSYM UNDNAME_32_BIT_DECODE}
 
488
  UNDNAME_NAME_ONLY              = $1000; // Crack only the name for primary declaration;
 
489
  {$EXTERNALSYM UNDNAME_NAME_ONLY}
 
490
                                                                                                   //  return just [scope::]name.  Does expand template params
 
491
  UNDNAME_NO_ARGUMENTS    = $2000; // Don't undecorate arguments to function
 
492
  {$EXTERNALSYM UNDNAME_NO_ARGUMENTS}
 
493
  UNDNAME_NO_SPECIAL_SYMS = $4000; // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
 
494
  {$EXTERNALSYM UNDNAME_NO_SPECIAL_SYMS}
 
495
 
 
496
function UnDecorateSymbolName(DecoratedName: PCSTR; UnDecoratedName: PSTR;
 
497
  UndecoratedLength: DWORD; Flags: DWORD): DWORD; stdcall;
 
498
{$EXTERNALSYM UnDecorateSymbolName}
 
499
 
 
500
//
 
501
// these values are used for synthesized file types
 
502
// that can be passed in as image headers instead of
 
503
// the standard ones from ntimage.h
 
504
//
 
505
 
 
506
const
 
507
  DBHHEADER_DEBUGDIRS    = $1;
 
508
  {$EXTERNALSYM DBHHEADER_DEBUGDIRS}
 
509
 
 
510
type
 
511
  _MODLOAD_DATA = record
 
512
    ssize: DWORD;                  // size of this struct
 
513
    ssig: DWORD;                   // signature identifying the passed data
 
514
    data: PVOID;                   // pointer to passed data
 
515
    size: DWORD;                   // size of passed data
 
516
    flags: DWORD;                  // options
 
517
  end;
 
518
  {$EXTERNALSYM _MODLOAD_DATA}
 
519
  MODLOAD_DATA = _MODLOAD_DATA;
 
520
  {$EXTERNALSYM MODLOAD_DATA}
 
521
  PMODLOAD_DATA = ^MODLOAD_DATA;
 
522
  {$EXTERNALSYM PMODLOAD_DATA}
 
523
  TModLoadData = MODLOAD_DATA;
 
524
  PModLoadData = PMODLOAD_DATA;
 
525
 
 
526
//
 
527
// StackWalking API
 
528
//
 
529
 
 
530
type
 
531
  ADDRESS_MODE = (
 
532
    AddrMode1616,
 
533
    AddrMode1632,
 
534
    AddrModeReal,
 
535
    AddrModeFlat);
 
536
  {$EXTERNALSYM ADDRESS_MODE}
 
537
  TAddressMode = ADDRESS_MODE;
 
538
 
 
539
  LPADDRESS64 = ^ADDRESS64;
 
540
  {$EXTERNALSYM PADDRESS64}
 
541
  _tagADDRESS64 = record
 
542
    Offset: DWORD64;
 
543
    Segment: WORD;
 
544
    Mode: ADDRESS_MODE;
 
545
  end;
 
546
  {$EXTERNALSYM _tagADDRESS64}
 
547
  ADDRESS64 = _tagADDRESS64;
 
548
  {$EXTERNALSYM ADDRESS64}
 
549
  TAddress64 = ADDRESS64;
 
550
  PAddress64 = LPADDRESS64;
 
551
 
 
552
  LPADDRESS = ^ADDRESS;
 
553
  {$EXTERNALSYM PADDRESS}
 
554
  _tagADDRESS = record
 
555
    Offset: DWORD;
 
556
    Segment: WORD;
 
557
    Mode: ADDRESS_MODE;
 
558
  end;
 
559
  {$EXTERNALSYM _tagADDRESS}
 
560
  ADDRESS = _tagADDRESS;
 
561
  {$EXTERNALSYM ADDRESS}
 
562
  TAddress = ADDRESS;
 
563
  PAddress = LPADDRESS;
 
564
 
 
565
procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64);
 
566
{$EXTERNALSYM Address32To64}
 
567
 
 
568
procedure Address64To32(a64: LPADDRESS64; a32: LPADDRESS);
 
569
{$EXTERNALSYM Address64To32}
 
570
 
 
571
//
 
572
// This structure is included in the STACKFRAME structure,
 
573
// and is used to trace through usermode callbacks in a thread's
 
574
// kernel stack.  The values must be copied by the kernel debugger
 
575
// from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets.
 
576
//
 
577
 
 
578
//
 
579
// New KDHELP structure for 64 bit system support.
 
580
// This structure is preferred in new code.
 
581
//
 
582
 
 
583
type
 
584
  PKDHELP64 = ^KDHELP64;
 
585
  {$EXTERNALSYM PKDHELP64}
 
586
  _KDHELP64 = record
 
587
    //
 
588
    // address of kernel thread object, as provided in the
 
589
    // WAIT_STATE_CHANGE packet.
 
590
    //
 
591
    Thread: DWORD64;
 
592
    //
 
593
    // offset in thread object to pointer to the current callback frame
 
594
    // in kernel stack.
 
595
    //
 
596
    ThCallbackStack: DWORD;
 
597
    //
 
598
    // offset in thread object to pointer to the current callback backing
 
599
    // store frame in kernel stack.
 
600
    //
 
601
    ThCallbackBStore: DWORD;
 
602
    //
 
603
    // offsets to values in frame:
 
604
    //
 
605
    // address of next callback frame
 
606
    NextCallback: DWORD;
 
607
    // address of saved frame pointer (if applicable)
 
608
    FramePointer: DWORD;
 
609
    //
 
610
    // Address of the kernel function that calls out to user mode
 
611
    //
 
612
    KiCallUserMode: DWORD64;
 
613
    //
 
614
    // Address of the user mode dispatcher function
 
615
    //
 
616
    KeUserCallbackDispatcher: DWORD64;
 
617
    //
 
618
    // Lowest kernel mode address
 
619
    //
 
620
    SystemRangeStart: DWORD64;
 
621
    Reserved: array [0..7] of DWORD64;
 
622
  end;
 
623
  {$EXTERNALSYM _KDHELP64}
 
624
  KDHELP64 = _KDHELP64;
 
625
  {$EXTERNALSYM KDHELP64}
 
626
  TKdHelp64 = KDHELP64;
 
627
  //PKdHelp64 = PKDHELP64;
 
628
 
 
629
  PKDHELP = ^KDHELP;
 
630
  {$EXTERNALSYM PKDHELP}
 
631
  _KDHELP = record
 
632
    //
 
633
    // address of kernel thread object, as provided in the
 
634
    // WAIT_STATE_CHANGE packet.
 
635
    //
 
636
    Thread: DWORD;
 
637
    //
 
638
    // offset in thread object to pointer to the current callback frame
 
639
    // in kernel stack.
 
640
    //
 
641
    ThCallbackStack: DWORD;
 
642
    //
 
643
    // offsets to values in frame:
 
644
    //
 
645
    // address of next callback frame
 
646
    NextCallback: DWORD;
 
647
    // address of saved frame pointer (if applicable)
 
648
    FramePointer: DWORD;
 
649
    //
 
650
    // Address of the kernel function that calls out to user mode
 
651
    //
 
652
    KiCallUserMode: DWORD;
 
653
    //
 
654
    // Address of the user mode dispatcher function
 
655
    //
 
656
    KeUserCallbackDispatcher: DWORD;
 
657
    //
 
658
    // Lowest kernel mode address
 
659
    //
 
660
    SystemRangeStart: DWORD;
 
661
    //
 
662
    // offset in thread object to pointer to the current callback backing
 
663
    // store frame in kernel stack.
 
664
    //
 
665
    ThCallbackBStore: DWORD;
 
666
    Reserved: array [0..7] of DWORD;
 
667
  end;
 
668
  {$EXTERNALSYM _KDHELP}
 
669
  KDHELP = _KDHELP;
 
670
  {$EXTERNALSYM KDHELP}
 
671
  TKdHelp = KDHELP;
 
672
  //PKdHelp = PKDHELP;
 
673
 
 
674
procedure KdHelp32To64(p32: PKDHELP; p64: PKDHELP64);
 
675
{$EXTERNALSYM KdHelp32To64}
 
676
 
 
677
type
 
678
  LPSTACKFRAME64 = ^STACKFRAME64;
 
679
  {$EXTERNALSYM LPSTACKFRAME64}
 
680
  _tagSTACKFRAME64 = record
 
681
    AddrPC: ADDRESS64; // program counter
 
682
    AddrReturn: ADDRESS64; // return address
 
683
    AddrFrame: ADDRESS64; // frame pointer
 
684
    AddrStack: ADDRESS64; // stack pointer
 
685
    AddrBStore: ADDRESS64; // backing store pointer
 
686
    FuncTableEntry: PVOID; // pointer to pdata/fpo or NULL
 
687
    Params: array [0..3] of DWORD64; // possible arguments to the function
 
688
    Far: BOOL; // WOW far call
 
689
    Virtual: BOOL; // is this a virtual frame?
 
690
    Reserved: array [0..2] of DWORD64;
 
691
    KdHelp: KDHELP64;
 
692
  end;
 
693
  {$EXTERNALSYM _tagSTACKFRAME64}
 
694
  STACKFRAME64 = _tagSTACKFRAME64;
 
695
  {$EXTERNALSYM STACKFRAME64}
 
696
  TStackFrame64 = STACKFRAME64;
 
697
  PStackFrame64 = LPSTACKFRAME64;
 
698
 
 
699
  LPSTACKFRAME = ^STACKFRAME;
 
700
  {$EXTERNALSYM LPSTACKFRAME}
 
701
  _tagSTACKFRAME = record
 
702
    AddrPC: ADDRESS; // program counter
 
703
    AddrReturn: ADDRESS; // return address
 
704
    AddrFrame: ADDRESS; // frame pointer
 
705
    AddrStack: ADDRESS; // stack pointer
 
706
    FuncTableEntry: PVOID; // pointer to pdata/fpo or NULL
 
707
    Params: array [0..3] of DWORD; // possible arguments to the function
 
708
    Far: BOOL; // WOW far call
 
709
    Virtual: BOOL; // is this a virtual frame?
 
710
    Reserved: array [0..2] of DWORD;
 
711
    KdHelp: KDHELP;
 
712
    AddrBStore: ADDRESS; // backing store pointer
 
713
  end;
 
714
  {$EXTERNALSYM _tagSTACKFRAME}
 
715
  STACKFRAME = _tagSTACKFRAME;
 
716
  {$EXTERNALSYM STACKFRAME}
 
717
  TStackFrame = STACKFRAME;
 
718
  PStackFrame = LPSTACKFRAME;
 
719
 
 
720
  PREAD_PROCESS_MEMORY_ROUTINE64 = function(hProcess: HANDLE; qwBaseAddress: DWORD64;
 
721
    lpBuffer: PVOID; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
 
722
  {$EXTERNALSYM PREAD_PROCESS_MEMORY_ROUTINE64}
 
723
  PReadProcessMemoryRoutine64 = PREAD_PROCESS_MEMORY_ROUTINE64;
 
724
 
 
725
  PFUNCTION_TABLE_ACCESS_ROUTINE64 = function(hProcess: HANDLE;
 
726
    AddrBase: DWORD64): PVOID; stdcall;
 
727
  {$EXTERNALSYM PFUNCTION_TABLE_ACCESS_ROUTINE64}
 
728
  PFunctionTableAccessRoutine64 = PFUNCTION_TABLE_ACCESS_ROUTINE64;
 
729
 
 
730
  PGET_MODULE_BASE_ROUTINE64 = function(hProcess: HANDLE;
 
731
    Address: DWORD64): DWORD64; stdcall;
 
732
  {$EXTERNALSYM PGET_MODULE_BASE_ROUTINE64}
 
733
  PGetModuleBaseRoutine64 = PGET_MODULE_BASE_ROUTINE64;
 
734
 
 
735
  PTRANSLATE_ADDRESS_ROUTINE64 = function(hProcess: HANDLE; hThread: HANDLE;
 
736
    const lpaddr: ADDRESS64): DWORD64; stdcall;
 
737
  {$EXTERNALSYM PTRANSLATE_ADDRESS_ROUTINE64}
 
738
  PTranslateAddressRoutine64 = PTRANSLATE_ADDRESS_ROUTINE64;
 
739
 
 
740
function StackWalk64(MachineType: DWORD; hProcess: HANDLE; hThread: HANDLE;
 
741
  var StackFrame: STACKFRAME64; ContextRecord: PVOID;
 
742
  ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64;
 
743
  FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64;
 
744
  GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64;
 
745
  TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64): BOOL; stdcall;
 
746
{$EXTERNALSYM StackWalk64}
 
747
 
 
748
type
 
749
  PREAD_PROCESS_MEMORY_ROUTINE = function(hProcess: HANDLE;
 
750
    lpBaseAddress: DWORD; lpBuffer: PVOID; nSize: DWORD;
 
751
    var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
 
752
  {$EXTERNALSYM PREAD_PROCESS_MEMORY_ROUTINE}
 
753
  PreadProcessMemoryRoutine = PREAD_PROCESS_MEMORY_ROUTINE;
 
754
 
 
755
  PFUNCTION_TABLE_ACCESS_ROUTINE = function(hProcess: HANDLE; AddrBase: DWORD): PVOID; stdcall;
 
756
  {$EXTERNALSYM PFUNCTION_TABLE_ACCESS_ROUTINE}
 
757
  PFunctionTableAccessRoutine = PFUNCTION_TABLE_ACCESS_ROUTINE;
 
758
 
 
759
  PGET_MODULE_BASE_ROUTINE = function(hProcess: HANDLE; Address: DWORD): DWORD; stdcall;
 
760
  {$EXTERNALSYM PGET_MODULE_BASE_ROUTINE}
 
761
  PGetModuleBaseRoutine = PGET_MODULE_BASE_ROUTINE;
 
762
 
 
763
  PTRANSLATE_ADDRESS_ROUTINE = function(hProcess: HANDLE; hThread: HANDLE;
 
764
    const lpaddr: ADDRESS): DWORD; stdcall;
 
765
  {$EXTERNALSYM PTRANSLATE_ADDRESS_ROUTINE}
 
766
  PTranslateAddressRoutine = PTRANSLATE_ADDRESS_ROUTINE;
 
767
 
 
768
function StackWalk(MachineType: DWORD; hProcess: HANDLE; hThread: HANDLE;
 
769
  var StackFrame: STACKFRAME; ContextRecord: PVOID;
 
770
  ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE;
 
771
  FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE;
 
772
  GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE;
 
773
  TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE): BOOL; stdcall;
 
774
{$EXTERNALSYM StackWalk}
 
775
 
 
776
const
 
777
  API_VERSION_NUMBER = 9;
 
778
  {$EXTERNALSYM API_VERSION_NUMBER}
 
779
 
 
780
type
 
781
  LPAPI_VERSION = ^API_VERSION;
 
782
  {$EXTERNALSYM LPAPI_VERSION}
 
783
  API_VERSION = record
 
784
    MajorVersion: USHORT;
 
785
    MinorVersion: USHORT;
 
786
    Revision: USHORT;
 
787
    Reserved: USHORT;
 
788
  end;
 
789
  {$EXTERNALSYM API_VERSION}
 
790
  TApiVersion = API_VERSION;
 
791
  PApiVersion = LPAPI_VERSION;
 
792
 
 
793
function ImagehlpApiVersion: LPAPI_VERSION; stdcall;
 
794
{$EXTERNALSYM ImagehlpApiVersion}
 
795
 
 
796
function ImagehlpApiVersionEx(const AppVersion: API_VERSION): LPAPI_VERSION; stdcall;
 
797
{$EXTERNALSYM ImagehlpApiVersionEx}
 
798
 
 
799
function GetTimestampForLoadedLibrary(Module: HMODULE): DWORD; stdcall;
 
800
{$EXTERNALSYM GetTimestampForLoadedLibrary}
 
801
 
 
802
//
 
803
// typedefs for function pointers
 
804
//
 
805
 
 
806
type
 
807
  PSYM_ENUMMODULES_CALLBACK64 = function(ModuleName: PSTR; BaseOfDll: DWORD64;
 
808
    UserContext: PVOID): BOOL; stdcall;
 
809
  {$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK64}
 
810
  PSymEnummodulesCallback64 = PSYM_ENUMMODULES_CALLBACK64;
 
811
 
 
812
  PSYM_ENUMSYMBOLS_CALLBACK64 = function(SymbolName: PSTR; SymbolAddress: DWORD64;
 
813
    SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
814
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64}
 
815
  PSymEnumsymbolsCallback64 = PSYM_ENUMSYMBOLS_CALLBACK64;
 
816
 
 
817
  PSYM_ENUMSYMBOLS_CALLBACK64W = function(SymbolName: PWSTR;
 
818
    SymbolAddress: DWORD64; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
819
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64W}
 
820
  PSymEnumsymbolsCallback64w = PSYM_ENUMSYMBOLS_CALLBACK64W;
 
821
 
 
822
  PENUMLOADED_MODULES_CALLBACK64 = function(ModuleName: PSTR;
 
823
    ModuleBase: DWORD64; ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
824
  {$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK64}
 
825
  PSnumloadedModulesCallback64 = PENUMLOADED_MODULES_CALLBACK64;
 
826
 
 
827
  PSYMBOL_REGISTERED_CALLBACK64 = function(hProcess: HANDLE; ActionCode: ULONG;
 
828
    CallbackData: ULONG64; UserContext: ULONG64): BOOL; stdcall;
 
829
  {$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK64}
 
830
  PSymbolRegisteredCallback64 = PSYMBOL_REGISTERED_CALLBACK64;
 
831
 
 
832
  PSYMBOL_FUNCENTRY_CALLBACK = function(hProcess: HANDLE; AddrBase: DWORD;
 
833
    UserContext: PVOID): PVOID; stdcall;
 
834
  {$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK}
 
835
  PSymbolFuncentryCallback = PSYMBOL_FUNCENTRY_CALLBACK;
 
836
 
 
837
  PSYMBOL_FUNCENTRY_CALLBACK64 = function(hProcess: HANDLE; AddrBase: ULONG64;
 
838
    UserContext: ULONG64): PVOID; stdcall;
 
839
  {$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK64}
 
840
  PSymbolFuncentryCallback64 = PSYMBOL_FUNCENTRY_CALLBACK64;
 
841
 
 
842
  PSYM_ENUMMODULES_CALLBACK = function(ModuleName: PSTR; BaseOfDll: ULONG;
 
843
    UserContext: PVOID): BOOL; stdcall;
 
844
  {$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK}
 
845
  PSymEnummodulesCallback = PSYM_ENUMMODULES_CALLBACK;
 
846
 
 
847
  PSYM_ENUMSYMBOLS_CALLBACK = function(SymbolName: PSTR; SymbolAddress: ULONG;
 
848
    SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
849
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK}
 
850
  PSymEnumsymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK;
 
851
 
 
852
  PSYM_ENUMSYMBOLS_CALLBACKW = function(SymbolName: PWSTR; SymbolAddress: ULONG;
 
853
    SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
854
  {$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACKW}
 
855
  PSymEnumsymbolsCallbackw = PSYM_ENUMSYMBOLS_CALLBACKW;
 
856
 
 
857
  PENUMLOADED_MODULES_CALLBACK = function(ModuleName: PSTR; ModuleBase: ULONG;
 
858
    ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
859
  {$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK}
 
860
  PEnumloadedModulesCallback = PENUMLOADED_MODULES_CALLBACK;
 
861
 
 
862
  PSYMBOL_REGISTERED_CALLBACK = function(hProcess: HANDLE; ActionCode: ULONG;
 
863
    CallbackData: PVOID; UserContext: PVOID): BOOL; stdcall;
 
864
  {$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK}
 
865
  PSymbolRegisteredCallback = PSYMBOL_REGISTERED_CALLBACK;
 
866
 
 
867
//
 
868
// flags found in SYMBOL_INFO.Flags
 
869
//
 
870
 
 
871
const
 
872
  SYMFLAG_VALUEPRESENT   = $00000001;
 
873
  {$EXTERNALSYM SYMFLAG_VALUEPRESENT}
 
874
  SYMFLAG_REGISTER       = $00000008;
 
875
  {$EXTERNALSYM SYMFLAG_REGISTER}
 
876
  SYMFLAG_REGREL         = $00000010;
 
877
  {$EXTERNALSYM SYMFLAG_REGREL}
 
878
  SYMFLAG_FRAMEREL       = $00000020;
 
879
  {$EXTERNALSYM SYMFLAG_FRAMEREL}
 
880
  SYMFLAG_PARAMETER      = $00000040;
 
881
  {$EXTERNALSYM SYMFLAG_PARAMETER}
 
882
  SYMFLAG_LOCAL          = $00000080;
 
883
  {$EXTERNALSYM SYMFLAG_LOCAL}
 
884
  SYMFLAG_CONSTANT       = $00000100;
 
885
  {$EXTERNALSYM SYMFLAG_CONSTANT}
 
886
  SYMFLAG_EXPORT         = $00000200;
 
887
  {$EXTERNALSYM SYMFLAG_EXPORT}
 
888
  SYMFLAG_FORWARDER      = $00000400;
 
889
  {$EXTERNALSYM SYMFLAG_FORWARDER}
 
890
  SYMFLAG_FUNCTION       = $00000800;
 
891
  {$EXTERNALSYM SYMFLAG_FUNCTION}
 
892
  SYMFLAG_VIRTUAL        = $00001000;
 
893
  {$EXTERNALSYM SYMFLAG_VIRTUAL}
 
894
  SYMFLAG_THUNK          = $00002000;
 
895
  {$EXTERNALSYM SYMFLAG_THUNK}
 
896
  SYMFLAG_TLSREL         = $00004000;
 
897
  {$EXTERNALSYM SYMFLAG_TLSREL}
 
898
 
 
899
//
 
900
// symbol type enumeration
 
901
//
 
902
 
 
903
type
 
904
  SYM_TYPE = (
 
905
    SymNone,
 
906
    SymCoff,
 
907
    SymCv,
 
908
    SymPdb,
 
909
    SymExport,
 
910
    SymDeferred,
 
911
    SymSym,                   // .sym file
 
912
    SymDia,
 
913
    SymVirtual,
 
914
    NumSymTypes);
 
915
  {$EXTERNALSYM SYM_TYPE}
 
916
  TSymType = SYM_TYPE;
 
917
 
 
918
//
 
919
// symbol data structure
 
920
//
 
921
 
 
922
  PIMAGEHLP_SYMBOL64 = ^IMAGEHLP_SYMBOL64;
 
923
  {$EXTERNALSYM PIMAGEHLP_SYMBOL64}
 
924
  _IMAGEHLP_SYMBOL64 = record
 
925
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL64)
 
926
    Address: DWORD64; // virtual address including dll base address
 
927
    Size: DWORD; // estimated size of symbol, can be zero
 
928
    Flags: DWORD; // info about the symbols, see the SYMF defines
 
929
    MaxNameLength: DWORD; // maximum size of symbol name in 'Name'
 
930
    Name: array [0..0] of CHAR; // symbol name (null terminated string)
 
931
  end;
 
932
  {$EXTERNALSYM _IMAGEHLP_SYMBOL64}
 
933
  IMAGEHLP_SYMBOL64 = _IMAGEHLP_SYMBOL64;
 
934
  {$EXTERNALSYM IMAGEHLP_SYMBOL64}
 
935
  TImageHlpSymbol64 = IMAGEHLP_SYMBOL64;
 
936
  PImageHlpSymbol64 = PIMAGEHLP_SYMBOL64;
 
937
 
 
938
  _IMAGEHLP_SYMBOL64_PACKAGE = record
 
939
    sym: IMAGEHLP_SYMBOL64;
 
940
    name: array [0..MAX_SYM_NAME] of CHAR;
 
941
  end;
 
942
  {$EXTERNALSYM _IMAGEHLP_SYMBOL64_PACKAGE}
 
943
  IMAGEHLP_SYMBOL64_PACKAGE = _IMAGEHLP_SYMBOL64_PACKAGE;
 
944
  {$EXTERNALSYM IMAGEHLP_SYMBOL64_PACKAGE}
 
945
  PIMAGEHLP_SYMBOL64_PACKAGE = ^IMAGEHLP_SYMBOL64_PACKAGE;
 
946
  {$EXTERNALSYM PIMAGEHLP_SYMBOL64_PACKAGE}
 
947
  TImageHlpSymbol64Package = IMAGEHLP_SYMBOL64_PACKAGE;
 
948
  PImageHlpSymbol64Package = PIMAGEHLP_SYMBOL64_PACKAGE;  
 
949
 
 
950
//#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
 
951
//
 
952
//#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
 
953
//#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
 
954
//#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
 
955
//#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
 
956
//
 
957
//#else
 
958
 
 
959
  PIMAGEHLP_SYMBOL = ^IMAGEHLP_SYMBOL;
 
960
  {$EXTERNALSYM PIMAGEHLP_SYMBOL}
 
961
  _IMAGEHLP_SYMBOL = record
 
962
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL)
 
963
    Address: DWORD; // virtual address including dll base address
 
964
    Size: DWORD; // estimated size of symbol, can be zero
 
965
    Flags: DWORD; // info about the symbols, see the SYMF defines
 
966
    MaxNameLength: DWORD; // maximum size of symbol name in 'Name'
 
967
    Name: array [0..0] of CHAR; // symbol name (null terminated string)
 
968
  end;
 
969
  {$EXTERNALSYM _IMAGEHLP_SYMBOL}
 
970
  IMAGEHLP_SYMBOL = _IMAGEHLP_SYMBOL;
 
971
  {$EXTERNALSYM IMAGEHLP_SYMBOL}
 
972
  TImageHlpSymbol = IMAGEHLP_SYMBOL;
 
973
  PImageHlpSymbol = PIMAGEHLP_SYMBOL;
 
974
 
 
975
  _IMAGEHLP_SYMBOL_PACKAGE = record
 
976
    sym: IMAGEHLP_SYMBOL;
 
977
    name: array [0..MAX_SYM_NAME] of CHAR;
 
978
  end;
 
979
  {$EXTERNALSYM _IMAGEHLP_SYMBOL_PACKAGE}
 
980
  IMAGEHLP_SYMBOL_PACKAGE = _IMAGEHLP_SYMBOL_PACKAGE;
 
981
  {$EXTERNALSYM IMAGEHLP_SYMBOL_PACKAGE}
 
982
  PIMAGEHLP_SYMBOL_PACKAGE = ^IMAGEHLP_SYMBOL_PACKAGE;
 
983
  {$EXTERNALSYM PIMAGEHLP_SYMBOL_PACKAGE}
 
984
  TImageHlpSymbolPackage = IMAGEHLP_SYMBOL_PACKAGE;
 
985
  PImageHlpSymbolPackage = PIMAGEHLP_SYMBOL_PACKAGE;
 
986
 
 
987
//#endif
 
988
 
 
989
//
 
990
// module data structure
 
991
//
 
992
 
 
993
  PIMAGEHLP_MODULE64 = ^IMAGEHLP_MODULE64;
 
994
  {$EXTERNALSYM PIMAGEHLP_MODULE64}
 
995
  _IMAGEHLP_MODULE64 = record
 
996
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64)
 
997
    BaseOfImage: DWORD64; // base load address of module
 
998
    ImageSize: DWORD; // virtual size of the loaded module
 
999
    TimeDateStamp: DWORD; // date/time stamp from pe header
 
1000
    CheckSum: DWORD; // checksum from the pe header
 
1001
    NumSyms: DWORD; // number of symbols in the symbol table
 
1002
    SymType: SYM_TYPE; // type of symbols loaded
 
1003
    ModuleName: array [0..3] of CHAR; // module name
 
1004
    ImageName: array [0..255] of CHAR; // image name
 
1005
    LoadedImageName: array [0..255] of CHAR; // symbol file name
 
1006
  end;
 
1007
  {$EXTERNALSYM _IMAGEHLP_MODULE64}
 
1008
  IMAGEHLP_MODULE64 = _IMAGEHLP_MODULE64;
 
1009
  {$EXTERNALSYM IMAGEHLP_MODULE64}
 
1010
  TImageHlpModule64 = IMAGEHLP_MODULE64;
 
1011
  PImageHlpModule64 = PIMAGEHLP_MODULE64;
 
1012
 
 
1013
  PIMAGEHLP_MODULEW64 = ^IMAGEHLP_MODULEW64;
 
1014
  {$EXTERNALSYM PIMAGEHLP_MODULEW64}
 
1015
  _IMAGEHLP_MODULE64W = record
 
1016
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64)
 
1017
    BaseOfImage: DWORD64; // base load address of module
 
1018
    ImageSize: DWORD; // virtual size of the loaded module
 
1019
    TimeDateStamp: DWORD; // date/time stamp from pe header
 
1020
    CheckSum: DWORD; // checksum from the pe header
 
1021
    NumSyms: DWORD; // number of symbols in the symbol table
 
1022
    SymType: SYM_TYPE; // type of symbols loaded
 
1023
    ModuleName: array [0..31] of WCHAR; // module name
 
1024
    ImageName: array [0..255] of WCHAR; // image name
 
1025
    LoadedImageName: array [0..255] of WCHAR; // symbol file name
 
1026
  end;
 
1027
  {$EXTERNALSYM _IMAGEHLP_MODULE64W}
 
1028
  IMAGEHLP_MODULEW64 = _IMAGEHLP_MODULE64W;
 
1029
  {$EXTERNALSYM IMAGEHLP_MODULEW64}
 
1030
  TImageHlpModuleW64 = IMAGEHLP_MODULEW64;
 
1031
  PImageHlpModuleW64 = PIMAGEHLP_MODULEW64;
 
1032
 
 
1033
  PIMAGEHLP_MODULE = ^IMAGEHLP_MODULE;
 
1034
  {$EXTERNALSYM PIMAGEHLP_MODULE}
 
1035
  _IMAGEHLP_MODULE = record
 
1036
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE)
 
1037
    BaseOfImage: DWORD; // base load address of module
 
1038
    ImageSize: DWORD; // virtual size of the loaded module
 
1039
    TimeDateStamp: DWORD; // date/time stamp from pe header
 
1040
    CheckSum: DWORD; // checksum from the pe header
 
1041
    NumSyms: DWORD; // number of symbols in the symbol table
 
1042
    SymType: SYM_TYPE; // type of symbols loaded
 
1043
    ModuleName: array [0..31] of CHAR; // module name
 
1044
    ImageName: array [0..255] of CHAR; // image name
 
1045
    LoadedImageName: array [0..255] of CHAR; // symbol file name
 
1046
  end;
 
1047
  {$EXTERNALSYM _IMAGEHLP_MODULE}
 
1048
  IMAGEHLP_MODULE = _IMAGEHLP_MODULE;
 
1049
  {$EXTERNALSYM IMAGEHLP_MODULE}
 
1050
  TImageHlpModule = IMAGEHLP_MODULE;
 
1051
  PImageHlpModule = PIMAGEHLP_MODULE;
 
1052
 
 
1053
  PIMAGEHLP_MODULEW = ^IMAGEHLP_MODULEW;
 
1054
  {$EXTERNALSYM PIMAGEHLP_MODULEW}
 
1055
  _IMAGEHLP_MODULEW = record
 
1056
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE)
 
1057
    BaseOfImage: DWORD; // base load address of module
 
1058
    ImageSize: DWORD; // virtual size of the loaded module
 
1059
    TimeDateStamp: DWORD; // date/time stamp from pe header
 
1060
    CheckSum: DWORD; // checksum from the pe header
 
1061
    NumSyms: DWORD; // number of symbols in the symbol table
 
1062
    SymType: SYM_TYPE; // type of symbols loaded
 
1063
    ModuleName: array [0..31] of WCHAR; // module name
 
1064
    ImageName: array [0..255] of WCHAR; // image name
 
1065
    LoadedImageName: array [0..255] of WCHAR; // symbol file name
 
1066
  end;
 
1067
  {$EXTERNALSYM _IMAGEHLP_MODULEW}
 
1068
  IMAGEHLP_MODULEW = _IMAGEHLP_MODULEW;
 
1069
  {$EXTERNALSYM IMAGEHLP_MODULEW}
 
1070
  TImageHlpModuleW = IMAGEHLP_MODULEW;
 
1071
  PImageHlpModuleW = PIMAGEHLP_MODULEW;
 
1072
 
 
1073
//
 
1074
// source file line data structure
 
1075
//
 
1076
 
 
1077
  PIMAGEHLP_LINE64 = ^IMAGEHLP_LINE64;
 
1078
  {$EXTERNALSYM PIMAGEHLP_LINE64}
 
1079
  _IMAGEHLP_LINE64 = record
 
1080
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE64)
 
1081
    Key: PVOID; // internal
 
1082
    LineNumber: DWORD; // line number in file
 
1083
    FileName: PCHAR; // full filename
 
1084
    Address: DWORD64; // first instruction of line
 
1085
  end;
 
1086
  {$EXTERNALSYM _IMAGEHLP_LINE64}
 
1087
  IMAGEHLP_LINE64 = _IMAGEHLP_LINE64;
 
1088
  {$EXTERNALSYM IMAGEHLP_LINE64}
 
1089
  TImageHlpLine64 = IMAGEHLP_LINE64;
 
1090
  PImageHlpLine64 = PIMAGEHLP_LINE64;
 
1091
 
 
1092
  PIMAGEHLP_LINE = ^IMAGEHLP_LINE;
 
1093
  {$EXTERNALSYM PIMAGEHLP_LINE}
 
1094
  _IMAGEHLP_LINE = record
 
1095
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
 
1096
    Key: PVOID; // internal
 
1097
    LineNumber: DWORD; // line number in file
 
1098
    FileName: PCHAR; // full filename
 
1099
    Address: DWORD; // first instruction of line
 
1100
  end;
 
1101
  {$EXTERNALSYM _IMAGEHLP_LINE}
 
1102
  IMAGEHLP_LINE = _IMAGEHLP_LINE;
 
1103
  {$EXTERNALSYM IMAGEHLP_LINE}
 
1104
  TImageHlpLine = IMAGEHLP_LINE;
 
1105
  PImageHlpLine = PIMAGEHLP_LINE;
 
1106
 
 
1107
//
 
1108
// source file structure
 
1109
//
 
1110
 
 
1111
type
 
1112
  _SOURCEFILE = record
 
1113
    ModBase: DWORD64;                // base address of loaded module
 
1114
    FileName: PCHAR;                 // full filename of source
 
1115
  end;
 
1116
  {$EXTERNALSYM _SOURCEFILE}
 
1117
  SOURCEFILE = _SOURCEFILE;
 
1118
  {$EXTERNALSYM SOURCEFILE}
 
1119
  PSOURCEFILE = ^SOURCEFILE;
 
1120
  {$EXTERNALSYM PSOURCEFILE}
 
1121
  TSourceFile = SOURCEFILE;
 
1122
 
 
1123
//
 
1124
// data structures used for registered symbol callbacks
 
1125
//
 
1126
 
 
1127
const
 
1128
  CBA_DEFERRED_SYMBOL_LOAD_START    = $00000001;
 
1129
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_START}
 
1130
  CBA_DEFERRED_SYMBOL_LOAD_COMPLETE = $00000002;
 
1131
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_COMPLETE}
 
1132
  CBA_DEFERRED_SYMBOL_LOAD_FAILURE  = $00000003;
 
1133
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_FAILURE}
 
1134
  CBA_SYMBOLS_UNLOADED              = $00000004;
 
1135
  {$EXTERNALSYM CBA_SYMBOLS_UNLOADED}
 
1136
  CBA_DUPLICATE_SYMBOL              = $00000005;
 
1137
  {$EXTERNALSYM CBA_DUPLICATE_SYMBOL}
 
1138
  CBA_READ_MEMORY                   = $00000006;
 
1139
  {$EXTERNALSYM CBA_READ_MEMORY}
 
1140
  CBA_DEFERRED_SYMBOL_LOAD_CANCEL   = $00000007;
 
1141
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_CANCEL}
 
1142
  CBA_SET_OPTIONS                   = $00000008;
 
1143
  {$EXTERNALSYM CBA_SET_OPTIONS}
 
1144
  CBA_EVENT                         = $00000010;
 
1145
  {$EXTERNALSYM CBA_EVENT}
 
1146
  CBA_DEFERRED_SYMBOL_LOAD_PARTIAL  = $00000020;
 
1147
  {$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_PARTIAL}
 
1148
  CBA_DEBUG_INFO                    = $10000000;
 
1149
  {$EXTERNALSYM CBA_DEBUG_INFO}
 
1150
 
 
1151
type
 
1152
  PIMAGEHLP_CBA_READ_MEMORY = ^IMAGEHLP_CBA_READ_MEMORY;
 
1153
  {$EXTERNALSYM PIMAGEHLP_CBA_READ_MEMORY}
 
1154
  _IMAGEHLP_CBA_READ_MEMORY = record
 
1155
    addr: DWORD64; // address to read from
 
1156
    buf: PVOID; // buffer to read to
 
1157
    bytes: DWORD; // amount of bytes to read
 
1158
    bytesread: LPDWORD; // pointer to store amount of bytes read
 
1159
  end;
 
1160
  {$EXTERNALSYM _IMAGEHLP_CBA_READ_MEMORY}
 
1161
  IMAGEHLP_CBA_READ_MEMORY = _IMAGEHLP_CBA_READ_MEMORY;
 
1162
  {$EXTERNALSYM IMAGEHLP_CBA_READ_MEMORY}
 
1163
  TImageHlpCbaReadMemory = IMAGEHLP_CBA_READ_MEMORY;
 
1164
  PImageHlpCbaReadMemory = PIMAGEHLP_CBA_READ_MEMORY;
 
1165
 
 
1166
const
 
1167
  sevInfo    = 0;
 
1168
  {$EXTERNALSYM sevInfo}
 
1169
  sevProblem = 1;
 
1170
  {$EXTERNALSYM sevProblem}
 
1171
  sevAttn    = 2;
 
1172
  {$EXTERNALSYM sevAttn}
 
1173
  sevFatal   = 3;
 
1174
  {$EXTERNALSYM sevFatal}
 
1175
  sevMax     = 4; // unused
 
1176
  {$EXTERNALSYM sevMax}
 
1177
 
 
1178
type
 
1179
  _IMAGEHLP_CBA_EVENT = record
 
1180
    severity: DWORD;                                     // values from sevInfo to sevFatal
 
1181
    code: DWORD;                                         // numerical code IDs the error
 
1182
    desc: PCHAR;                                         // may contain a text description of the error
 
1183
    object_: PVOID;                                      // value dependant upon the error code
 
1184
  end;
 
1185
  {$EXTERNALSYM _IMAGEHLP_CBA_EVENT}
 
1186
  IMAGEHLP_CBA_EVENT = _IMAGEHLP_CBA_EVENT;
 
1187
  {$EXTERNALSYM IMAGEHLP_CBA_EVENT}
 
1188
  PIMAGEHLP_CBA_EVENT = ^IMAGEHLP_CBA_EVENT;
 
1189
  {$EXTERNALSYM PIMAGEHLP_CBA_EVENT}
 
1190
  TImageHlpCbaEvent = IMAGEHLP_CBA_EVENT;
 
1191
  PImageHlpCbaEvent = PIMAGEHLP_CBA_EVENT;
 
1192
 
 
1193
  PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
 
1194
  {$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD64}
 
1195
  _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = record
 
1196
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64)
 
1197
    BaseOfImage: DWORD64; // base load address of module
 
1198
    CheckSum: DWORD; // checksum from the pe header
 
1199
    TimeDateStamp: DWORD; // date/time stamp from pe header
 
1200
    FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name
 
1201
    Reparse: ByteBool; // load failure reparse
 
1202
    hFile: HANDLE; // file handle, if passed
 
1203
    Flags: DWORD; //
 
1204
  end;
 
1205
  {$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD64}
 
1206
  IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = _IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
 
1207
  {$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD64}
 
1208
  TImageHlpDeferredSymbolLoad64 = IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
 
1209
  PImageHlpDeferredSymbolLoad64 = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
 
1210
 
 
1211
const
 
1212
  DSLFLAG_MISMATCHED_PDB = $1;
 
1213
  {$EXTERNALSYM DSLFLAG_MISMATCHED_PDB}
 
1214
  DSLFLAG_MISMATCHED_DBG = $2;
 
1215
  {$EXTERNALSYM DSLFLAG_MISMATCHED_DBG}
 
1216
 
 
1217
type
 
1218
  PIMAGEHLP_DEFERRED_SYMBOL_LOAD = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD;
 
1219
  {$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD}
 
1220
  _IMAGEHLP_DEFERRED_SYMBOL_LOAD = record
 
1221
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD)
 
1222
    BaseOfImage: DWORD; // base load address of module
 
1223
    CheckSum: DWORD; // checksum from the pe header
 
1224
    TimeDateStamp: DWORD; // date/time stamp from pe header
 
1225
    FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name
 
1226
    Reparse: ByteBool; // load failure reparse
 
1227
    hFile: HANDLE; // file handle, if passed    
 
1228
  end;
 
1229
  {$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD}
 
1230
  IMAGEHLP_DEFERRED_SYMBOL_LOAD = _IMAGEHLP_DEFERRED_SYMBOL_LOAD;
 
1231
  {$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD}
 
1232
  TImageHlpDeferredSymbolLoad = IMAGEHLP_DEFERRED_SYMBOL_LOAD;
 
1233
  PImageHlpDeferredSymbolLoad = PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
 
1234
 
 
1235
  PIMAGEHLP_DUPLICATE_SYMBOL64 = ^IMAGEHLP_DUPLICATE_SYMBOL64;
 
1236
  {$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL64}
 
1237
  _IMAGEHLP_DUPLICATE_SYMBOL64 = record
 
1238
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64)
 
1239
    NumberOfDups: DWORD; // number of duplicates in the Symbol array
 
1240
    Symbol: PIMAGEHLP_SYMBOL64; // array of duplicate symbols
 
1241
    SelectedSymbol: DWORD; // symbol selected (-1 to start)
 
1242
  end;
 
1243
  {$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL64}
 
1244
  IMAGEHLP_DUPLICATE_SYMBOL64 = _IMAGEHLP_DUPLICATE_SYMBOL64;
 
1245
  {$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL64}
 
1246
  TImageHlpDuplicateSymbol64 = IMAGEHLP_DUPLICATE_SYMBOL64;
 
1247
  PImageHlpDuplicateSymbol64 = PIMAGEHLP_DUPLICATE_SYMBOL64;
 
1248
 
 
1249
  PIMAGEHLP_DUPLICATE_SYMBOL = ^IMAGEHLP_DUPLICATE_SYMBOL;
 
1250
  {$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL}
 
1251
  _IMAGEHLP_DUPLICATE_SYMBOL = record
 
1252
    SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL)
 
1253
    NumberOfDups: DWORD; // number of duplicates in the Symbol array
 
1254
    Symbol: PIMAGEHLP_SYMBOL; // array of duplicate symbols
 
1255
    SelectedSymbol: DWORD; // symbol selected (-1 to start)
 
1256
  end;
 
1257
  {$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL}
 
1258
  IMAGEHLP_DUPLICATE_SYMBOL = _IMAGEHLP_DUPLICATE_SYMBOL;
 
1259
  {$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL}
 
1260
  TImageHlpDuplicateSymbol = IMAGEHLP_DUPLICATE_SYMBOL;
 
1261
  PImageHlpDuplicateSymbol = PIMAGEHLP_DUPLICATE_SYMBOL;
 
1262
 
 
1263
// If dbghelp ever needs to display graphical UI, it will use this as the parent window.
 
1264
 
 
1265
//BOOL
 
1266
//SymSetParentWindow(
 
1267
//    HWND hwnd
 
1268
//    );
 
1269
 
 
1270
//
 
1271
// options that are set/returned by SymSetOptions() & SymGetOptions()
 
1272
// these are used as a mask
 
1273
//
 
1274
 
 
1275
const
 
1276
  SYMOPT_CASE_INSENSITIVE  = $00000001;
 
1277
  {$EXTERNALSYM SYMOPT_CASE_INSENSITIVE}
 
1278
  SYMOPT_UNDNAME           = $00000002;
 
1279
  {$EXTERNALSYM SYMOPT_UNDNAME}
 
1280
  SYMOPT_DEFERRED_LOADS    = $00000004;
 
1281
  {$EXTERNALSYM SYMOPT_DEFERRED_LOADS}
 
1282
  SYMOPT_NO_CPP            = $00000008;
 
1283
  {$EXTERNALSYM SYMOPT_NO_CPP}
 
1284
  SYMOPT_LOAD_LINES        = $00000010;
 
1285
  {$EXTERNALSYM SYMOPT_LOAD_LINES}
 
1286
  SYMOPT_OMAP_FIND_NEAREST = $00000020;
 
1287
  {$EXTERNALSYM SYMOPT_OMAP_FIND_NEAREST}
 
1288
  SYMOPT_LOAD_ANYTHING         = $00000040;
 
1289
  {$EXTERNALSYM SYMOPT_LOAD_ANYTHING}
 
1290
  SYMOPT_IGNORE_CVREC          = $00000080;
 
1291
  {$EXTERNALSYM SYMOPT_IGNORE_CVREC}
 
1292
  SYMOPT_NO_UNQUALIFIED_LOADS  = $00000100;
 
1293
  {$EXTERNALSYM SYMOPT_NO_UNQUALIFIED_LOADS}
 
1294
  SYMOPT_FAIL_CRITICAL_ERRORS  = $00000200;
 
1295
  {$EXTERNALSYM SYMOPT_FAIL_CRITICAL_ERRORS}
 
1296
  SYMOPT_EXACT_SYMBOLS         = $00000400;
 
1297
  {$EXTERNALSYM SYMOPT_EXACT_SYMBOLS}
 
1298
  SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = $00000800;
 
1299
  {$EXTERNALSYM SYMOPT_ALLOW_ABSOLUTE_SYMBOLS}
 
1300
  SYMOPT_IGNORE_NT_SYMPATH      = $00001000;
 
1301
  {$EXTERNALSYM SYMOPT_IGNORE_NT_SYMPATH}
 
1302
  SYMOPT_INCLUDE_32BIT_MODULES = $00002000;
 
1303
  {$EXTERNALSYM SYMOPT_INCLUDE_32BIT_MODULES}
 
1304
  SYMOPT_PUBLICS_ONLY          = $00004000;
 
1305
  {$EXTERNALSYM SYMOPT_PUBLICS_ONLY}
 
1306
  SYMOPT_NO_PUBLICS            = $00008000;
 
1307
  {$EXTERNALSYM SYMOPT_NO_PUBLICS}
 
1308
  SYMOPT_AUTO_PUBLICS          = $00010000;
 
1309
  {$EXTERNALSYM SYMOPT_AUTO_PUBLICS}
 
1310
  SYMOPT_NO_IMAGE_SEARCH       = $00020000;
 
1311
  {$EXTERNALSYM SYMOPT_NO_IMAGE_SEARCH}
 
1312
  SYMOPT_SECURE                = $00040000;
 
1313
  {$EXTERNALSYM SYMOPT_SECURE}
 
1314
 
 
1315
  SYMOPT_DEBUG             = DWORD($80000000);
 
1316
  {$EXTERNALSYM SYMOPT_DEBUG}
 
1317
 
 
1318
function SymSetOptions(SymOptions: DWORD): DWORD; stdcall;
 
1319
{$EXTERNALSYM SymSetOptions}
 
1320
 
 
1321
function SymGetOptions: DWORD; stdcall;
 
1322
{$EXTERNALSYM SymGetOptions}
 
1323
 
 
1324
function SymCleanup(hProcess: HANDLE): BOOL; stdcall;
 
1325
{$EXTERNALSYM SymCleanup}
 
1326
 
 
1327
function SymMatchString(string_, expression: LPSTR; fCase: BOOL): BOOL; stdcall;
 
1328
{$EXTERNALSYM SymMatchString}
 
1329
 
 
1330
type
 
1331
  PSYM_ENUMSOURCFILES_CALLBACK = function(pSourceFile: PSOURCEFILE; UserContext: PVOID): BOOL; stdcall;
 
1332
  {$EXTERNALSYM PSYM_ENUMSOURCFILES_CALLBACK}
 
1333
  PSymEnumSourceFilesCallback = PSYM_ENUMSOURCFILES_CALLBACK;
 
1334
 
 
1335
function SymEnumSourceFiles(hProcess: HANDLE; ModBase: ULONG64; Mask: LPSTR;
 
1336
  cbSrcFiles: PSYM_ENUMSOURCFILES_CALLBACK; UserContext: PVOID): BOOL; stdcall;
 
1337
{$EXTERNALSYM SymEnumSourceFiles}
 
1338
 
 
1339
function SymEnumerateModules64(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK64;
 
1340
  UserContext: PVOID): BOOL; stdcall;
 
1341
{$EXTERNALSYM SymEnumerateModules64}
 
1342
 
 
1343
function SymEnumerateModules(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK;
 
1344
  UserContext: PVOID): BOOL; stdcall;
 
1345
{$EXTERNALSYM SymEnumerateModules}
 
1346
 
 
1347
function SymEnumerateSymbols64(hProcess: HANDLE; BaseOfDll: DWORD64;
 
1348
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK64; UserContext: PVOID): BOOL; stdcall;
 
1349
{$EXTERNALSYM SymEnumerateSymbols64}
 
1350
 
 
1351
function SymEnumerateSymbolsW64(hProcess: HANDLE; BaseOfDll: DWORD64;
 
1352
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK64W; UserContext: PVOID): BOOL; stdcall;
 
1353
{$EXTERNALSYM SymEnumerateSymbolsW64}
 
1354
 
 
1355
function SymEnumerateSymbols(hProcess: HANDLE; BaseOfDll: DWORD;
 
1356
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
 
1357
{$EXTERNALSYM SymEnumerateSymbols}
 
1358
 
 
1359
function SymEnumerateSymbolsW(hProcess: HANDLE; BaseOfDll: DWORD;
 
1360
  EnumSymbolsCallback: PSYM_ENUMSYMBOLS_CALLBACKW; UserContext: PVOID): BOOL; stdcall;
 
1361
{$EXTERNALSYM SymEnumerateSymbolsW}
 
1362
 
 
1363
function EnumerateLoadedModules64(hProcess: HANDLE; EnumLoadedModulesCallback: PENUMLOADED_MODULES_CALLBACK64;
 
1364
  UserContext: PVOID): BOOL; stdcall;
 
1365
{$EXTERNALSYM EnumerateLoadedModules64}
 
1366
 
 
1367
function EnumerateLoadedModules(hProcess: HANDLE; EnumLoadedModulesCallback: PENUMLOADED_MODULES_CALLBACK;
 
1368
  UserContext: PVOID): BOOL; stdcall;
 
1369
{$EXTERNALSYM EnumerateLoadedModules}
 
1370
 
 
1371
function SymFunctionTableAccess64(hProcess: HANDLE; AddrBase: DWORD64): PVOID; stdcall;
 
1372
{$EXTERNALSYM SymFunctionTableAccess64}
 
1373
 
 
1374
function SymFunctionTableAccess(hProcess: HANDLE; AddrBase: DWORD): PVOID; stdcall;
 
1375
{$EXTERNALSYM SymFunctionTableAccess}
 
1376
 
 
1377
function SymGetModuleInfo64(hProcess: HANDLE; qwAddr: DWORD64;
 
1378
  var ModuleInfo: IMAGEHLP_MODULE64): BOOL; stdcall;
 
1379
{$EXTERNALSYM SymGetModuleInfo64}
 
1380
 
 
1381
function SymGetModuleInfoW64(hProcess: HANDLE; qwAddr: DWORD64;
 
1382
  var ModuleInfo: IMAGEHLP_MODULEW64): BOOL; stdcall;
 
1383
{$EXTERNALSYM SymGetModuleInfoW64}
 
1384
 
 
1385
function SymGetModuleInfo(hProcess: HANDLE; dwAddr: DWORD;
 
1386
  var ModuleInfo: IMAGEHLP_MODULE): BOOL; stdcall;
 
1387
{$EXTERNALSYM SymGetModuleInfo}
 
1388
 
 
1389
function SymGetModuleInfoW(hProcess: HANDLE; dwAddr: DWORD;
 
1390
  var ModuleInfo: IMAGEHLP_MODULEW): BOOL; stdcall;
 
1391
{$EXTERNALSYM SymGetModuleInfoW}
 
1392
 
 
1393
function SymGetModuleBase64(hProcess: HANDLE; qwAddr: DWORD64): DWORD64; stdcall;
 
1394
{$EXTERNALSYM SymGetModuleBase64}
 
1395
 
 
1396
function SymGetModuleBase(hProcess: HANDLE; dwAddr: DWORD): DWORD; stdcall;
 
1397
{$EXTERNALSYM SymGetModuleBase}
 
1398
 
 
1399
function SymGetSymNext64(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL64): BOOL; stdcall;
 
1400
{$EXTERNALSYM SymGetSymNext64}
 
1401
 
 
1402
function SymGetSymNext(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL): BOOL; stdcall;
 
1403
{$EXTERNALSYM SymGetSymNext}
 
1404
 
 
1405
function SymGetSymPrev64(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL64): BOOL; stdcall;
 
1406
{$EXTERNALSYM SymGetSymPrev64}
 
1407
 
 
1408
function SymGetSymPrev(hProcess: HANDLE; var Symbol: IMAGEHLP_SYMBOL): BOOL; stdcall;
 
1409
{$EXTERNALSYM SymGetSymPrev}
 
1410
 
 
1411
function SymGetLineFromAddr64(hProcess: HANDLE; qwAddr: DWORD64;
 
1412
  var pdwDisplacement: DWORD; var Line64: IMAGEHLP_LINE64): BOOL; stdcall;
 
1413
{$EXTERNALSYM SymGetLineFromAddr64}
 
1414
 
 
1415
function SymGetLineFromAddr(hProcess: HANDLE; dwAddr: DWORD;
 
1416
  var pdwDisplacement: DWORD; var Line: IMAGEHLP_LINE): BOOL; stdcall;
 
1417
{$EXTERNALSYM SymGetLineFromAddr}
 
1418
 
 
1419
function SymGetLineFromName64(hProcess: HANDLE; ModuleName: PSTR; FileName: PSTR;
 
1420
  dwLineNumber: DWORD; var plDisplacement: LONG; var Line: IMAGEHLP_LINE64): BOOL; stdcall;
 
1421
{$EXTERNALSYM SymGetLineFromName64}
 
1422
 
 
1423
function SymGetLineFromName(hProcess: HANDLE; ModuleName: PSTR; FileName: PSTR;
 
1424
  dwLineNumber: DWORD; var plDisplacement: LONG; var Line: IMAGEHLP_LINE): BOOL; stdcall;
 
1425
{$EXTERNALSYM SymGetLineFromName}
 
1426
 
 
1427
function SymGetLineNext64(hProcess: HANDLE; var Line: IMAGEHLP_LINE64): BOOL; stdcall;
 
1428
{$EXTERNALSYM SymGetLineNext64}
 
1429
 
 
1430
function SymGetLineNext(hProcess: HANDLE; var Line: IMAGEHLP_LINE): BOOL; stdcall;
 
1431
{$EXTERNALSYM SymGetLineNext}
 
1432
 
 
1433
function SymGetLinePrev64(hProcess: HANDLE; var Line: IMAGEHLP_LINE64): BOOL; stdcall;
 
1434
{$EXTERNALSYM SymGetLinePrev64}
 
1435
 
 
1436
function SymGetLinePrev(hProcess: HANDLE; var Line: IMAGEHLP_LINE): BOOL; stdcall;
 
1437
{$EXTERNALSYM SymGetLinePrev}
 
1438
 
 
1439
function SymMatchFileName(FileName, Match: PSTR; var FileNameStop, MatchStop: PSTR): BOOL; stdcall;
 
1440
{$EXTERNALSYM SymMatchFileName}
 
1441
 
 
1442
function SymInitialize(hProcess: HANDLE; UserSearchPath: PSTR; fInvadeProcess: BOOL): BOOL; stdcall;
 
1443
{$EXTERNALSYM SymInitialize}
 
1444
 
 
1445
function SymGetSearchPath(hProcess: HANDLE; SearchPath: PSTR; SearchPathLength: DWORD): BOOL; stdcall;
 
1446
{$EXTERNALSYM SymGetSearchPath}
 
1447
 
 
1448
function SymSetSearchPath(hProcess: HANDLE; SearchPath: PSTR): BOOL; stdcall;
 
1449
{$EXTERNALSYM SymSetSearchPath}
 
1450
 
 
1451
function SymLoadModule64(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR;
 
1452
  BaseOfDll: DWORD64; SizeOfDll: DWORD): DWORD64; stdcall;
 
1453
{$EXTERNALSYM SymLoadModule64}
 
1454
 
 
1455
const
 
1456
  SLMFLAG_VIRTUAL = $1;
 
1457
  {$EXTERNALSYM SLMFLAG_VIRTUAL}
 
1458
 
 
1459
function SymLoadModuleEx(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR; BaseOfDll: DWORD64;
 
1460
  DllSize: DWORD; Data: PMODLOAD_DATA; Flag: DWORD): DWORD64; stdcall;
 
1461
{$EXTERNALSYM SymLoadModuleEx}
 
1462
 
 
1463
function SymLoadModule(hProcess, hFile: HANDLE; ImageName, ModuleName: PSTR;
 
1464
  BaseOfDll: DWORD; SizeOfDll: DWORD): DWORD; stdcall;
 
1465
{$EXTERNALSYM SymLoadModule}
 
1466
 
 
1467
function SymUnloadModule64(hProcess: HANDLE; BaseOfDll: DWORD64): BOOL; stdcall;
 
1468
{$EXTERNALSYM SymUnloadModule64}
 
1469
 
 
1470
function SymUnloadModule(hProcess: HANDLE; BaseOfDll: DWORD): BOOL; stdcall;
 
1471
{$EXTERNALSYM SymUnloadModule}
 
1472
 
 
1473
function SymUnDName64(const sym: IMAGEHLP_SYMBOL64; UnDecName: PSTR;
 
1474
  UnDecNameLength: DWORD): BOOL; stdcall;
 
1475
{$EXTERNALSYM SymUnDName64}
 
1476
 
 
1477
function SymUnDName(const sym: IMAGEHLP_SYMBOL; UnDecName: PSTR;
 
1478
  UnDecNameLength: DWORD): BOOL; stdcall;
 
1479
{$EXTERNALSYM SymUnDName}
 
1480
 
 
1481
function SymRegisterCallback64(hProcess: HANDLE; CallbackFunction: PSYMBOL_REGISTERED_CALLBACK64;
 
1482
  UserContext: ULONG64): BOOL; stdcall;
 
1483
{$EXTERNALSYM SymRegisterCallback64}
 
1484
 
 
1485
function SymRegisterFunctionEntryCallback64(hProcess: HANDLE; CallbackFunction: PSYMBOL_FUNCENTRY_CALLBACK64;
 
1486
  UserContext: ULONG64): BOOL; stdcall;
 
1487
{$EXTERNALSYM SymRegisterFunctionEntryCallback64}
 
1488
 
 
1489
function SymRegisterCallback(hProcess: HANDLE; CallbackFunction: PSYMBOL_REGISTERED_CALLBACK;
 
1490
  UserContext: PVOID): BOOL; stdcall;
 
1491
{$EXTERNALSYM SymRegisterCallback}
 
1492
 
 
1493
function SymRegisterFunctionEntryCallback(hProcess: HANDLE; CallbackFunction: PSYMBOL_FUNCENTRY_CALLBACK;
 
1494
  UserContext: PVOID): BOOL; stdcall;
 
1495
{$EXTERNALSYM SymRegisterFunctionEntryCallback}
 
1496
 
 
1497
type
 
1498
  PIMAGEHLP_SYMBOL_SRC = ^IMAGEHLP_SYMBOL_SRC;
 
1499
  {$EXTERNALSYM PIMAGEHLP_SYMBOL_SRC}
 
1500
  _IMAGEHLP_SYMBOL_SRC = record
 
1501
    sizeofstruct: DWORD;
 
1502
    type_: DWORD;
 
1503
    file_: array [0..MAX_PATH - 1] of Char;
 
1504
  end;
 
1505
  {$EXTERNALSYM _IMAGEHLP_SYMBOL_SRC}
 
1506
  IMAGEHLP_SYMBOL_SRC = _IMAGEHLP_SYMBOL_SRC;
 
1507
  {$EXTERNALSYM IMAGEHLP_SYMBOL_SRC}
 
1508
  TImageHlpSymbolSrc = IMAGEHLP_SYMBOL_SRC;
 
1509
  PImageHlpSymbolSrc = PIMAGEHLP_SYMBOL_SRC;
 
1510
 
 
1511
  PMODULE_TYPE_INFO = ^MODULE_TYPE_INFO;
 
1512
  {$EXTERNALSYM PMODULE_TYPE_INFO}
 
1513
  _MODULE_TYPE_INFO = record
 
1514
    dataLength: USHORT;
 
1515
    leaf: USHORT;
 
1516
    data: array [0..0] of BYTE;
 
1517
  end;
 
1518
  {$EXTERNALSYM _MODULE_TYPE_INFO}
 
1519
  MODULE_TYPE_INFO = _MODULE_TYPE_INFO;
 
1520
  {$EXTERNALSYM MODULE_TYPE_INFO}
 
1521
  TModuleTypeInfo = MODULE_TYPE_INFO;
 
1522
  PModuleTypeInfo = PMODULE_TYPE_INFO;
 
1523
 
 
1524
type
 
1525
  PSYMBOL_INFO = ^SYMBOL_INFO;
 
1526
  {$EXTERNALSYM PSYMBOL_INFO}
 
1527
  _SYMBOL_INFO = record
 
1528
    SizeOfStruct: ULONG;
 
1529
    TypeIndex: ULONG; // Type Index of symbol
 
1530
    Reserved: array [0..1] of ULONG64;
 
1531
    Info: ULONG;
 
1532
    Size: ULONG;
 
1533
    ModBase: ULONG64; // Base Address of module comtaining this symbol
 
1534
    Flags: ULONG;
 
1535
    Value: ULONG64; // Value of symbol, ValuePresent should be 1
 
1536
    Address: ULONG64; // Address of symbol including base address of module
 
1537
    Register_: ULONG; // register holding value or pointer to value
 
1538
    Scope: ULONG; // scope of the symbol
 
1539
    Tag: ULONG; // pdb classification
 
1540
    NameLen: ULONG; // Actual length of name
 
1541
    MaxNameLen: ULONG;
 
1542
    Name: array [0..0] of CHAR; // Name of symbol
 
1543
  end;
 
1544
  {$EXTERNALSYM _SYMBOL_INFO}
 
1545
  SYMBOL_INFO = _SYMBOL_INFO;
 
1546
  {$EXTERNALSYM SYMBOL_INFO}
 
1547
  TSymbolInfo = SYMBOL_INFO;
 
1548
  PSymbolInfo = PSYMBOL_INFO;
 
1549
 
 
1550
  _SYMBOL_INFO_PACKAGE = record
 
1551
    si: SYMBOL_INFO;
 
1552
    name: array [0..MAX_SYM_NAME] of CHAR;
 
1553
  end;
 
1554
  {$EXTERNALSYM _SYMBOL_INFO_PACKAGE}
 
1555
  SYMBOL_INFO_PACKAGE = _SYMBOL_INFO_PACKAGE;
 
1556
  {$EXTERNALSYM SYMBOL_INFO_PACKAGE}
 
1557
  PSYMBOL_INFO_PACKAGE = ^SYMBOL_INFO_PACKAGE;
 
1558
  {$EXTERNALSYM PSYMBOL_INFO_PACKAGE}
 
1559
  TSymbolInfoPackage = SYMBOL_INFO_PACKAGE;
 
1560
  PSymbolInfoPackage = PSYMBOL_INFO_PACKAGE;
 
1561
 
 
1562
  PIMAGEHLP_STACK_FRAME = ^IMAGEHLP_STACK_FRAME;
 
1563
  {$EXTERNALSYM PIMAGEHLP_STACK_FRAME}
 
1564
  _IMAGEHLP_STACK_FRAME = record
 
1565
    InstructionOffset: ULONG64;
 
1566
    ReturnOffset: ULONG64;
 
1567
    FrameOffset: ULONG64;
 
1568
    StackOffset: ULONG64;
 
1569
    BackingStoreOffset: ULONG64;
 
1570
    FuncTableEntry: ULONG64;
 
1571
    Params: array [0..3] of ULONG64;
 
1572
    Reserved: array [0..4] of ULONG64;
 
1573
    Virtual_: BOOL;
 
1574
    Reserved2: ULONG;
 
1575
  end;
 
1576
  {$EXTERNALSYM _IMAGEHLP_STACK_FRAME}
 
1577
  IMAGEHLP_STACK_FRAME = _IMAGEHLP_STACK_FRAME;
 
1578
  {$EXTERNALSYM IMAGEHLP_STACK_FRAME}
 
1579
  TImageHlpStackFrame = IMAGEHLP_STACK_FRAME;
 
1580
  PImageHlpStackFrame = PIMAGEHLP_STACK_FRAME;
 
1581
 
 
1582
  IMAGEHLP_CONTEXT = LPVOID;
 
1583
  {$EXTERNALSYM IMAGEHLP_CONTEXT}
 
1584
  PIMAGEHLP_CONTEXT = ^IMAGEHLP_CONTEXT;
 
1585
  {$EXTERNALSYM PIMAGEHLP_CONTEXT}
 
1586
  TImageHlpContext = IMAGEHLP_CONTEXT;
 
1587
  PImageHlpContext = PIMAGEHLP_CONTEXT;
 
1588
 
 
1589
function SymSetContext(hProcess: HANDLE; StackFrame: PIMAGEHLP_STACK_FRAME; Context: PIMAGEHLP_CONTEXT): BOOL; stdcall;
 
1590
{$EXTERNALSYM SymSetContext}
 
1591
 
 
1592
function SymFromAddr(hProcess: HANDLE; Address: DWORD64; Displacement: PDWORD64; Symbol: PSYMBOL_INFO): BOOL; stdcall;
 
1593
{$EXTERNALSYM SymFromAddr}
 
1594
 
 
1595
// While SymFromName will provide a symbol from a name,
 
1596
// SymEnumSymbols can provide the same matching information
 
1597
// for ALL symbols with a matching name, even regular
 
1598
// expressions.  That way you can search across modules
 
1599
// and differentiate between identically named symbols.
 
1600
 
 
1601
function SymFromName(hProcess: HANDLE; Name: LPSTR; Symbol: PSYMBOL_INFO): BOOL; stdcall;
 
1602
{$EXTERNALSYM SymFromName}
 
1603
 
 
1604
type
 
1605
  PSYM_ENUMERATESYMBOLS_CALLBACK = function(pSymInfo: PSYMBOL_INFO; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
 
1606
  {$EXTERNALSYM PSYM_ENUMERATESYMBOLS_CALLBACK}
 
1607
  PSymEnumerateSymbolsCallback = PSYM_ENUMERATESYMBOLS_CALLBACK;
 
1608
 
 
1609
function SymEnumSymbols(hProcess: HANDLE; BaseOfDll: ULONG64; Mask: PCSTR; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
 
1610
{$EXTERNALSYM SymEnumSymbols}
 
1611
 
 
1612
function SymEnumSymbolsForAddr(hProcess: HANDLE; Address: DWORD64;
 
1613
  EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
 
1614
{$EXTERNALSYM SymEnumSymbolsForAddr}
 
1615
 
 
1616
type
 
1617
  _IMAGEHLP_SYMBOL_TYPE_INFO = (
 
1618
    TI_GET_SYMTAG,
 
1619
    TI_GET_SYMNAME,
 
1620
    TI_GET_LENGTH,
 
1621
    TI_GET_TYPE,
 
1622
    TI_GET_TYPEID,
 
1623
    TI_GET_BASETYPE,
 
1624
    TI_GET_ARRAYINDEXTYPEID,
 
1625
    TI_FINDCHILDREN,
 
1626
    TI_GET_DATAKIND,
 
1627
    TI_GET_ADDRESSOFFSET,
 
1628
    TI_GET_OFFSET,
 
1629
    TI_GET_VALUE,
 
1630
    TI_GET_COUNT,
 
1631
    TI_GET_CHILDRENCOUNT,
 
1632
    TI_GET_BITPOSITION,
 
1633
    TI_GET_VIRTUALBASECLASS,
 
1634
    TI_GET_VIRTUALTABLESHAPEID,
 
1635
    TI_GET_VIRTUALBASEPOINTEROFFSET,
 
1636
    TI_GET_CLASSPARENTID,
 
1637
    TI_GET_NESTED,
 
1638
    TI_GET_SYMINDEX,
 
1639
    TI_GET_LEXICALPARENT,
 
1640
    TI_GET_ADDRESS,
 
1641
    TI_GET_THISADJUST,
 
1642
    TI_GET_UDTKIND,
 
1643
    TI_IS_EQUIV_TO,
 
1644
    TI_GET_CALLING_CONVENTION);
 
1645
  {$EXTERNALSYM _IMAGEHLP_SYMBOL_TYPE_INFO}
 
1646
  IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO;
 
1647
  {$EXTERNALSYM IMAGEHLP_SYMBOL_TYPE_INFO}
 
1648
  TImageHlpSymbolTypeInfo = IMAGEHLP_SYMBOL_TYPE_INFO;
 
1649
 
 
1650
  PTI_FINDCHILDREN_PARAMS = ^TI_FINDCHILDREN_PARAMS;
 
1651
  {$EXTERNALSYM PTI_FINDCHILDREN_PARAMS}
 
1652
  _TI_FINDCHILDREN_PARAMS = record
 
1653
    Count: ULONG;
 
1654
    Start: ULONG;
 
1655
    ChildId: array [0..0] of ULONG;
 
1656
  end;
 
1657
  {$EXTERNALSYM _TI_FINDCHILDREN_PARAMS}
 
1658
  TI_FINDCHILDREN_PARAMS = _TI_FINDCHILDREN_PARAMS;
 
1659
  {$EXTERNALSYM TI_FINDCHILDREN_PARAMS}
 
1660
  TTiFindChildrenParams = TI_FINDCHILDREN_PARAMS;
 
1661
  PTiFindChildrenParams = PTI_FINDCHILDREN_PARAMS;
 
1662
 
 
1663
function SymGetTypeInfo(hProcess: HANDLE; ModBase: DWORD64; TypeId: ULONG; GetType: IMAGEHLP_SYMBOL_TYPE_INFO; pInfo: PVOID): BOOL; stdcall;
 
1664
{$EXTERNALSYM SymGetTypeInfo}
 
1665
 
 
1666
function SymEnumTypes(hProcess: HANDLE; BaseOfDll: ULONG64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
 
1667
{$EXTERNALSYM SymEnumTypes}
 
1668
 
 
1669
function SymGetTypeFromName(hProcess: HANDLE; BaseOfDll: ULONG64; Name: LPSTR; Symbol: PSYMBOL_INFO): BOOL; stdcall;
 
1670
{$EXTERNALSYM SymGetTypeFromName}
 
1671
 
 
1672
function SymAddSymbol(hProcess: HANDLE; BaseOfDll: ULONG64; Name: PCSTR; Address: DWORD64; Size, Flags: DWORD): BOOL; stdcall;
 
1673
{$EXTERNALSYM SymAddSymbol}
 
1674
 
 
1675
function SymDeleteSymbol(hProcess: HANDLE; BaseOfDll: ULONG64; Name: PCSTR; Address: DWORD64; Flags: DWORD): BOOL; stdcall;
 
1676
{$EXTERNALSYM SymDeleteSymbol}
 
1677
 
 
1678
//
 
1679
// Full user-mode dump creation.
 
1680
//
 
1681
 
 
1682
type
 
1683
  PDBGHELP_CREATE_USER_DUMP_CALLBACK = function(DataType: DWORD; var Data: PVOID; DataLength: LPDWORD; UserData: PVOID): BOOL; stdcall;
 
1684
  {$EXTERNALSYM PDBGHELP_CREATE_USER_DUMP_CALLBACK}
 
1685
  PDbgHelpCreateUserDumpCallback = PDBGHELP_CREATE_USER_DUMP_CALLBACK;
 
1686
 
 
1687
function DbgHelpCreateUserDump(FileName: LPSTR; Callback: PDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData: PVOID): BOOL; stdcall;
 
1688
{$EXTERNALSYM DbgHelpCreateUserDump}
 
1689
 
 
1690
function DbgHelpCreateUserDumpW(FileName: LPWSTR; Callback: PDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData: PVOID): BOOL; stdcall;
 
1691
{$EXTERNALSYM DbgHelpCreateUserDumpW}
 
1692
 
 
1693
// -----------------------------------------------------------------
 
1694
// The following 4 legacy APIs are fully supported, but newer
 
1695
// ones are recommended.  SymFromName and SymFromAddr provide
 
1696
// much more detailed info on the returned symbol.
 
1697
 
 
1698
function SymGetSymFromAddr64(hProcess: HANDLE; qwAddr: DWORD64; pdwDisplacement: PDWORD64; Symbol: PIMAGEHLP_SYMBOL64): BOOL; stdcall;
 
1699
{$EXTERNALSYM SymGetSymFromAddr64}
 
1700
 
 
1701
function SymGetSymFromAddr(hProcess: HANDLE; dwAddr: DWORD; pdwDisplacement: PDWORD; Symbol: PIMAGEHLP_SYMBOL): BOOL; stdcall;
 
1702
{$EXTERNALSYM SymGetSymFromAddr}
 
1703
 
 
1704
// While following two APIs will provide a symbol from a name,
 
1705
// SymEnumSymbols can provide the same matching information
 
1706
// for ALL symbols with a matching name, even regular
 
1707
// expressions.  That way you can search across modules
 
1708
// and differentiate between identically named symbols.
 
1709
 
 
1710
function SymGetSymFromName64(hProcess: HANDLE; Name: PSTR; Symbol: PIMAGEHLP_SYMBOL64): BOOL; stdcall;
 
1711
{$EXTERNALSYM SymGetSymFromName64}
 
1712
 
 
1713
function SymGetSymFromName(hProcess: HANDLE; Name: PSTR; Symbol: PIMAGEHLP_SYMBOL): BOOL; stdcall;
 
1714
{$EXTERNALSYM SymGetSymFromName}
 
1715
 
 
1716
// -----------------------------------------------------------------
 
1717
// The following APIs exist only for backwards compatibility
 
1718
// with a pre-release version documented in an MSDN release.
 
1719
 
 
1720
// You should use SymFindFileInPath if you want to maintain
 
1721
// future compatibility.
 
1722
 
 
1723
function FindFileInPath(hprocess: HANDLE; SearchPath: LPSTR; FileName: LPSTR; id: PVOID; two: DWORD; three: DWORD; flags: DWORD; FilePath: LPSTR): BOOL; stdcall;
 
1724
{$EXTERNALSYM FindFileInPath}
 
1725
 
 
1726
// You should use SymFindFileInPath if you want to maintain
 
1727
// future compatibility.
 
1728
 
 
1729
function FindFileInSearchPath(hprocess: HANDLE; SearchPath: LPSTR; FileName: LPSTR; one: DWORD; two: DWORD; three: DWORD; FilePath: LPSTR): BOOL; stdcall;
 
1730
{$EXTERNALSYM FindFileInSearchPath}
 
1731
 
 
1732
function SymEnumSym(hProcess: HANDLE; BaseOfDll: ULONG64; EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACK; UserContext: PVOID): BOOL; stdcall;
 
1733
{$EXTERNALSYM SymEnumSym}
 
1734
 
 
1735
// These values should not be used.
 
1736
// They have been replaced by SYMFLAG_ values.
 
1737
 
 
1738
const
 
1739
  SYMF_OMAP_GENERATED  = $00000001;
 
1740
  SYMF_OMAP_MODIFIED   = $00000002;
 
1741
  SYMF_REGISTER        = $00000008;
 
1742
  SYMF_REGREL          = $00000010;
 
1743
  SYMF_FRAMEREL        = $00000020;
 
1744
  SYMF_PARAMETER       = $00000040;
 
1745
  SYMF_LOCAL           = $00000080;
 
1746
  SYMF_CONSTANT        = $00000100;
 
1747
  SYMF_EXPORT          = $00000200;
 
1748
  SYMF_FORWARDER       = $00000400;
 
1749
  SYMF_FUNCTION        = $00000800;
 
1750
  SYMF_VIRTUAL         = $00001000;
 
1751
  SYMF_THUNK           = $00002000;
 
1752
  SYMF_TLSREL          = $00004000;
 
1753
 
 
1754
// These values should also not be used.
 
1755
// They have been replaced by SYMFLAG_ values.
 
1756
 
 
1757
  IMAGEHLP_SYMBOL_INFO_VALUEPRESENT         = 1;
 
1758
  IMAGEHLP_SYMBOL_INFO_REGISTER             = SYMF_REGISTER;        // 0x0008
 
1759
  IMAGEHLP_SYMBOL_INFO_REGRELATIVE          = SYMF_REGREL;          // 0x0010
 
1760
  IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE        = SYMF_FRAMEREL;        // 0x0020
 
1761
  IMAGEHLP_SYMBOL_INFO_PARAMETER            = SYMF_PARAMETER;       // 0x0040
 
1762
  IMAGEHLP_SYMBOL_INFO_LOCAL                = SYMF_LOCAL;           // 0x0080
 
1763
  IMAGEHLP_SYMBOL_INFO_CONSTANT             = SYMF_CONSTANT;        // 0x0100
 
1764
  IMAGEHLP_SYMBOL_FUNCTION                  = SYMF_FUNCTION;        // 0x0800
 
1765
  IMAGEHLP_SYMBOL_VIRTUAL                   = SYMF_VIRTUAL;         // 0x1000
 
1766
  IMAGEHLP_SYMBOL_THUNK                     = SYMF_THUNK;           // 0x2000
 
1767
  IMAGEHLP_SYMBOL_INFO_TLSRELATIVE          = SYMF_TLSREL;          // 0x4000
 
1768
 
 
1769
const
 
1770
  MINIDUMP_SIGNATURE = 'PMDM';
 
1771
  {$EXTERNALSYM MINIDUMP_SIGNATURE}
 
1772
  MINIDUMP_VERSION   = 42899;
 
1773
  {$EXTERNALSYM MINIDUMP_VERSION}
 
1774
 
 
1775
type
 
1776
  RVA = DWORD;
 
1777
  {$EXTERNALSYM RVA}
 
1778
  RVA64 = ULONG64;
 
1779
  {$EXTERNALSYM RVA64}
 
1780
 
 
1781
  _MINIDUMP_LOCATION_DESCRIPTOR = record
 
1782
    DataSize: ULONG32;
 
1783
    Rva: RVA;
 
1784
  end;
 
1785
  {$EXTERNALSYM _MINIDUMP_LOCATION_DESCRIPTOR}
 
1786
  MINIDUMP_LOCATION_DESCRIPTOR = _MINIDUMP_LOCATION_DESCRIPTOR;
 
1787
  {$EXTERNALSYM MINIDUMP_LOCATION_DESCRIPTOR}
 
1788
  TMinidumpLocationDescriptor = MINIDUMP_LOCATION_DESCRIPTOR;
 
1789
  PMinidumpLocationDescriptor = ^MINIDUMP_LOCATION_DESCRIPTOR;
 
1790
 
 
1791
  _MINIDUMP_LOCATION_DESCRIPTOR64 = record
 
1792
    DataSize: ULONG64;
 
1793
    Rva: RVA64;
 
1794
  end;
 
1795
  {$EXTERNALSYM _MINIDUMP_LOCATION_DESCRIPTOR64}
 
1796
  MINIDUMP_LOCATION_DESCRIPTOR64 = _MINIDUMP_LOCATION_DESCRIPTOR64;
 
1797
  {$EXTERNALSYM MINIDUMP_LOCATION_DESCRIPTOR64}
 
1798
  TMinidumpLocationDescriptor64 = MINIDUMP_LOCATION_DESCRIPTOR64;
 
1799
  PMinidumpLocationDescriptor64 = ^MINIDUMP_LOCATION_DESCRIPTOR64;
 
1800
 
 
1801
  PMINIDUMP_MEMORY_DESCRIPTOR = ^MINIDUMP_MEMORY_DESCRIPTOR;
 
1802
  {$EXTERNALSYM PMINIDUMP_MEMORY_DESCRIPTOR}
 
1803
  _MINIDUMP_MEMORY_DESCRIPTOR = record
 
1804
    StartOfMemoryRange: ULONG64;
 
1805
    Memory: MINIDUMP_LOCATION_DESCRIPTOR;
 
1806
  end;
 
1807
  {$EXTERNALSYM _MINIDUMP_MEMORY_DESCRIPTOR}
 
1808
  MINIDUMP_MEMORY_DESCRIPTOR = _MINIDUMP_MEMORY_DESCRIPTOR;
 
1809
  {$EXTERNALSYM MINIDUMP_MEMORY_DESCRIPTOR}
 
1810
  TMinidumpMemoryDescriptor = MINIDUMP_MEMORY_DESCRIPTOR;
 
1811
  PMinidumpMemoryDescriptor = PMINIDUMP_MEMORY_DESCRIPTOR;
 
1812
 
 
1813
// DESCRIPTOR64 is used for full-memory minidumps where
 
1814
// all of the raw memory is laid out sequentially at the
 
1815
// end of the dump.  There is no need for individual RVAs
 
1816
// as the RVA is the base RVA plus the sum of the preceeding
 
1817
// data blocks.
 
1818
 
 
1819
  PMINIDUMP_MEMORY_DESCRIPTOR64 = ^MINIDUMP_MEMORY_DESCRIPTOR64;
 
1820
  {$EXTERNALSYM PMINIDUMP_MEMORY_DESCRIPTOR64}
 
1821
  _MINIDUMP_MEMORY_DESCRIPTOR64 = record
 
1822
    StartOfMemoryRange: ULONG64;
 
1823
    DataSize: ULONG64;
 
1824
  end;
 
1825
  {$EXTERNALSYM _MINIDUMP_MEMORY_DESCRIPTOR64}
 
1826
  MINIDUMP_MEMORY_DESCRIPTOR64 = _MINIDUMP_MEMORY_DESCRIPTOR64;
 
1827
  {$EXTERNALSYM MINIDUMP_MEMORY_DESCRIPTOR64}
 
1828
  TMinidumpMemoryDescriptor64 = MINIDUMP_MEMORY_DESCRIPTOR64;
 
1829
  PMinidumpMemoryDescriptor64 = PMINIDUMP_MEMORY_DESCRIPTOR64;
 
1830
 
 
1831
  PMINIDUMP_HEADER = ^MINIDUMP_HEADER;
 
1832
  {$EXTERNALSYM PMINIDUMP_HEADER}
 
1833
  _MINIDUMP_HEADER = record
 
1834
    Signature: ULONG32;
 
1835
    Version: ULONG32;
 
1836
    NumberOfStreams: ULONG32;
 
1837
    StreamDirectoryRva: RVA;
 
1838
    CheckSum: ULONG32;
 
1839
    U: record
 
1840
    case Integer of
 
1841
      0: (Reserved: ULONG32);
 
1842
      1: (TimeDateStamp: ULONG32);
 
1843
    end;
 
1844
    Flags: ULONG64;
 
1845
  end;
 
1846
  {$EXTERNALSYM _MINIDUMP_HEADER}
 
1847
  MINIDUMP_HEADER = _MINIDUMP_HEADER;
 
1848
  {$EXTERNALSYM MINIDUMP_HEADER}
 
1849
  TMinidumpHeader = MINIDUMP_HEADER;
 
1850
  PMinidumpHeader = PMINIDUMP_HEADER;
 
1851
 
 
1852
//
 
1853
// The MINIDUMP_HEADER field StreamDirectoryRva points to 
 
1854
// an array of MINIDUMP_DIRECTORY structures.
 
1855
//
 
1856
 
 
1857
  PMINIDUMP_DIRECTORY = ^MINIDUMP_DIRECTORY;
 
1858
  {$EXTERNALSYM PMINIDUMP_DIRECTORY}
 
1859
  _MINIDUMP_DIRECTORY = record
 
1860
    StreamType: ULONG32;
 
1861
    Location: MINIDUMP_LOCATION_DESCRIPTOR;
 
1862
  end;
 
1863
  {$EXTERNALSYM _MINIDUMP_DIRECTORY}
 
1864
  MINIDUMP_DIRECTORY = _MINIDUMP_DIRECTORY;
 
1865
  {$EXTERNALSYM MINIDUMP_DIRECTORY}
 
1866
  TMinidumpDirectory = MINIDUMP_DIRECTORY;
 
1867
  PMinidumpDirectory = PMINIDUMP_DIRECTORY;
 
1868
 
 
1869
  PMINIDUMP_STRING = ^MINIDUMP_STRING;
 
1870
  {$EXTERNALSYM PMINIDUMP_STRING}
 
1871
  _MINIDUMP_STRING = record
 
1872
    Length: ULONG32; // Length in bytes of the string
 
1873
    Buffer: PWCHAR; // Variable size buffer
 
1874
  end;
 
1875
  {$EXTERNALSYM _MINIDUMP_STRING}
 
1876
  MINIDUMP_STRING = _MINIDUMP_STRING;
 
1877
  {$EXTERNALSYM MINIDUMP_STRING}
 
1878
  TMinidumpString = MINIDUMP_STRING;
 
1879
  PMinidumpString = PMINIDUMP_STRING;
 
1880
 
 
1881
//
 
1882
// The MINIDUMP_DIRECTORY field StreamType may be one of the following types.
 
1883
// Types will be added in the future, so if a program reading the minidump
 
1884
// header encounters a stream type it does not understand it should ignore
 
1885
// the data altogether. Any tag above LastReservedStream will not be used by
 
1886
// the system and is reserved for program-specific information.
 
1887
//
 
1888
 
 
1889
const
 
1890
  UnusedStream                = 0;
 
1891
  {$EXTERNALSYM UnusedStream}
 
1892
  ReservedStream0             = 1;
 
1893
  {$EXTERNALSYM ReservedStream0}
 
1894
  ReservedStream1             = 2;
 
1895
  {$EXTERNALSYM ReservedStream1}
 
1896
  ThreadListStream            = 3;
 
1897
  {$EXTERNALSYM ThreadListStream}
 
1898
  ModuleListStream            = 4;
 
1899
  {$EXTERNALSYM ModuleListStream}
 
1900
  MemoryListStream            = 5;
 
1901
  {$EXTERNALSYM MemoryListStream}
 
1902
  ExceptionStream             = 6;
 
1903
  {$EXTERNALSYM ExceptionStream}
 
1904
  SystemInfoStream            = 7;
 
1905
  {$EXTERNALSYM SystemInfoStream}
 
1906
  ThreadExListStream          = 8;
 
1907
  {$EXTERNALSYM ThreadExListStream}
 
1908
  Memory64ListStream          = 9;
 
1909
  {$EXTERNALSYM Memory64ListStream}
 
1910
  CommentStreamA              = 10;
 
1911
  {$EXTERNALSYM CommentStreamA}
 
1912
  CommentStreamW              = 11;
 
1913
  {$EXTERNALSYM CommentStreamW}
 
1914
  HandleDataStream            = 12;
 
1915
  {$EXTERNALSYM HandleDataStream}
 
1916
  FunctionTableStream         = 13;
 
1917
  {$EXTERNALSYM FunctionTableStream}
 
1918
  UnloadedModuleListStream   = 14;
 
1919
  {$EXTERNALSYM UnloadedModuleListStream}
 
1920
  MiscInfoStream             = 15;
 
1921
  {$EXTERNALSYM MiscInfoStream}
 
1922
 
 
1923
  LastReservedStream          = $ffff;
 
1924
  {$EXTERNALSYM LastReservedStream}
 
1925
 
 
1926
type
 
1927
  _MINIDUMP_STREAM_TYPE = DWORD;
 
1928
  {$EXTERNALSYM MINIDUMP_STREAM_TYPE}
 
1929
  MINIDUMP_STREAM_TYPE = _MINIDUMP_STREAM_TYPE;
 
1930
  {$EXTERNALSYM _MINIDUMP_STREAM_TYPE}
 
1931
  TMinidumpStreamType = MINIDUMP_STREAM_TYPE;
 
1932
 
 
1933
//
 
1934
// The minidump system information contains processor and
 
1935
// Operating System specific information.
 
1936
//
 
1937
 
 
1938
type
 
1939
  _CPU_INFORMATION = record
 
1940
    case Integer of
 
1941
 
 
1942
        //
 
1943
        // X86 platforms use CPUID function to obtain processor information.
 
1944
        //
 
1945
 
 
1946
        0: (
 
1947
 
 
1948
          //
 
1949
          // CPUID Subfunction 0, register EAX (VendorId [0]),
 
1950
          // EBX (VendorId [1]) and ECX (VendorId [2]).
 
1951
          //
 
1952
 
 
1953
          VendorId: array [0..2] of ULONG32;
 
1954
 
 
1955
          //
 
1956
          // CPUID Subfunction 1, register EAX
 
1957
          //
 
1958
 
 
1959
          VersionInformation: ULONG32;
 
1960
 
 
1961
          //
 
1962
          // CPUID Subfunction 1, register EDX
 
1963
          //
 
1964
 
 
1965
          FeatureInformation: ULONG32;
 
1966
 
 
1967
          //
 
1968
          // CPUID, Subfunction 80000001, register EBX. This will only
 
1969
          // be obtained if the vendor id is "AuthenticAMD".
 
1970
          //
 
1971
 
 
1972
          AMDExtendedCpuFeatures: ULONG32);
 
1973
 
 
1974
        //
 
1975
        // Non-x86 platforms use processor feature flags.
 
1976
        //
 
1977
 
 
1978
        1: (
 
1979
          ProcessorFeatures: array [0..1] of ULONG64);
 
1980
    end;
 
1981
 
 
1982
  _MINIDUMP_SYSTEM_INFO = record
 
1983
 
 
1984
    //
 
1985
    // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all
 
1986
    // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ).
 
1987
    //
 
1988
 
 
1989
    ProcessorArchitecture: USHORT;
 
1990
    ProcessorLevel: USHORT;
 
1991
    ProcessorRevision: USHORT;
 
1992
 
 
1993
    U: record
 
1994
    case Integer of
 
1995
      0: (Reserved0: USHORT);
 
1996
      1: (
 
1997
        NumberOfProcessors: UCHAR;
 
1998
        ProductType: UCHAR);
 
1999
    end;
 
2000
 
 
2001
    //
 
2002
    // MajorVersion, MinorVersion, BuildNumber, PlatformId and
 
2003
    // CSDVersion are all taken from the OSVERSIONINFO structure
 
2004
    // returned by GetVersionEx( ).
 
2005
    //
 
2006
 
 
2007
    MajorVersion: ULONG32;
 
2008
    MinorVersion: ULONG32;
 
2009
    BuildNumber: ULONG32;
 
2010
    PlatformId: ULONG32;
 
2011
 
 
2012
    //
 
2013
    // RVA to a CSDVersion string in the string table.
 
2014
    //
 
2015
 
 
2016
    CSDVersionRva: RVA;
 
2017
 
 
2018
    U2: record
 
2019
    case Integer of
 
2020
      0: (Reserved1: ULONG32);
 
2021
      1: (
 
2022
        SuiteMask: USHORT;
 
2023
        Reserved2: USHORT);
 
2024
    end;
 
2025
    
 
2026
    //
 
2027
    // CPU information is obtained from one of two places.
 
2028
    //
 
2029
    //  1) On x86 computers, CPU_INFORMATION is obtained from the CPUID
 
2030
    //     instruction. You must use the X86 portion of the union for X86
 
2031
    //     computers.
 
2032
    //
 
2033
    //  2) On non-x86 architectures, CPU_INFORMATION is obtained by calling
 
2034
    //     IsProcessorFeatureSupported().
 
2035
    //
 
2036
 
 
2037
    Cpu: _CPU_INFORMATION;
 
2038
  end;
 
2039
  {$EXTERNALSYM _MINIDUMP_SYSTEM_INFO}
 
2040
  MINIDUMP_SYSTEM_INFO = _MINIDUMP_SYSTEM_INFO;
 
2041
  {$EXTERNALSYM MINIDUMP_SYSTEM_INFO}
 
2042
  PMINIDUMP_SYSTEM_INFO = ^MINIDUMP_SYSTEM_INFO;
 
2043
  {$EXTERNALSYM PMINIDUMP_SYSTEM_INFO}
 
2044
  TMinidumpSystemInfo = MINIDUMP_SYSTEM_INFO;
 
2045
  PMinidumpSystemInfo = PMINIDUMP_SYSTEM_INFO;
 
2046
 
 
2047
  CPU_INFORMATION = _CPU_INFORMATION;
 
2048
  {$EXTERNALSYM CPU_INFORMATION}
 
2049
  PCPU_INFORMATION = CPU_INFORMATION;
 
2050
  {$EXTERNALSYM PCPU_INFORMATION}
 
2051
 
 
2052
//
 
2053
// The minidump thread contains standard thread
 
2054
// information plus an RVA to the memory for this 
 
2055
// thread and an RVA to the CONTEXT structure for
 
2056
// this thread.
 
2057
//
 
2058
 
 
2059
//
 
2060
// ThreadId must be 4 bytes on all architectures.
 
2061
//
 
2062
 
 
2063
// C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4);
 
2064
 
 
2065
type
 
2066
  PMINIDUMP_THREAD = ^MINIDUMP_THREAD;
 
2067
  {$EXTERNALSYM PMINIDUMP_THREAD}
 
2068
  _MINIDUMP_THREAD = record
 
2069
    ThreadId: ULONG32;
 
2070
    SuspendCount: ULONG32;
 
2071
    PriorityClass: ULONG32;
 
2072
    Priority: ULONG32;
 
2073
    Teb: ULONG64;
 
2074
    Stack: MINIDUMP_MEMORY_DESCRIPTOR;
 
2075
    ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR;
 
2076
  end;
 
2077
  {$EXTERNALSYM _MINIDUMP_THREAD}
 
2078
  MINIDUMP_THREAD = _MINIDUMP_THREAD;
 
2079
  {$EXTERNALSYM MINIDUMP_THREAD}
 
2080
  TMinidumpThread = MINIDUMP_THREAD;
 
2081
  PMinidumpThread = PMINIDUMP_THREAD;
 
2082
 
 
2083
//
 
2084
// The thread list is a container of threads.
 
2085
//
 
2086
 
 
2087
  PMINIDUMP_THREAD_LIST = ^MINIDUMP_THREAD_LIST;
 
2088
  {$EXTERNALSYM PMINIDUMP_THREAD_LIST}
 
2089
  _MINIDUMP_THREAD_LIST = record
 
2090
    NumberOfThreads: ULONG32;
 
2091
    Threads: array [0..0] of MINIDUMP_THREAD;
 
2092
  end;
 
2093
  {$EXTERNALSYM _MINIDUMP_THREAD_LIST}
 
2094
  MINIDUMP_THREAD_LIST = _MINIDUMP_THREAD_LIST;
 
2095
  {$EXTERNALSYM MINIDUMP_THREAD_LIST}
 
2096
  TMinidumpThreadList = MINIDUMP_THREAD_LIST;
 
2097
  PMinidumpThreadList = PMINIDUMP_THREAD_LIST;
 
2098
 
 
2099
  PMINIDUMP_THREAD_EX = ^MINIDUMP_THREAD_EX;
 
2100
  {$EXTERNALSYM PMINIDUMP_THREAD_EX}
 
2101
  _MINIDUMP_THREAD_EX = record
 
2102
    ThreadId: ULONG32;
 
2103
    SuspendCount: ULONG32;
 
2104
    PriorityClass: ULONG32;
 
2105
    Priority: ULONG32;
 
2106
    Teb: ULONG64;
 
2107
    Stack: MINIDUMP_MEMORY_DESCRIPTOR;
 
2108
    ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR;
 
2109
    BackingStore: MINIDUMP_MEMORY_DESCRIPTOR;
 
2110
  end;
 
2111
  {$EXTERNALSYM _MINIDUMP_THREAD_EX}
 
2112
  MINIDUMP_THREAD_EX = _MINIDUMP_THREAD_EX;
 
2113
  {$EXTERNALSYM MINIDUMP_THREAD_EX}
 
2114
  TMinidumpThreadEx = MINIDUMP_THREAD_EX;
 
2115
  PMinidumpThreadEx = PMINIDUMP_THREAD_EX;
 
2116
 
 
2117
//
 
2118
// The thread list is a container of threads.
 
2119
//
 
2120
 
 
2121
  PMINIDUMP_THREAD_EX_LIST = ^MINIDUMP_THREAD_EX_LIST;
 
2122
  {$EXTERNALSYM PMINIDUMP_THREAD_EX_LIST}
 
2123
  _MINIDUMP_THREAD_EX_LIST = record
 
2124
    NumberOfThreads: ULONG32;
 
2125
    Threads: array [0..0] of MINIDUMP_THREAD_EX;
 
2126
  end;
 
2127
  {$EXTERNALSYM _MINIDUMP_THREAD_EX_LIST}
 
2128
  MINIDUMP_THREAD_EX_LIST = _MINIDUMP_THREAD_EX_LIST;
 
2129
  {$EXTERNALSYM MINIDUMP_THREAD_EX_LIST}
 
2130
  TMinidumpThreadExList = MINIDUMP_THREAD_EX_LIST;
 
2131
  PMinidumpThreadExList = PMINIDUMP_THREAD_EX_LIST;
 
2132
 
 
2133
//
 
2134
// The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64.
 
2135
//
 
2136
 
 
2137
  PMINIDUMP_EXCEPTION = ^MINIDUMP_EXCEPTION;
 
2138
  {$EXTERNALSYM PMINIDUMP_EXCEPTION}
 
2139
  _MINIDUMP_EXCEPTION = record
 
2140
    ExceptionCode: ULONG32;
 
2141
    ExceptionFlags: ULONG32;
 
2142
    ExceptionRecord: ULONG64;
 
2143
    ExceptionAddress: ULONG64;
 
2144
    NumberParameters: ULONG32;
 
2145
    __unusedAlignment: ULONG32;
 
2146
    ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of ULONG64;
 
2147
  end;
 
2148
  {$EXTERNALSYM _MINIDUMP_EXCEPTION}
 
2149
  MINIDUMP_EXCEPTION = _MINIDUMP_EXCEPTION;
 
2150
  {$EXTERNALSYM MINIDUMP_EXCEPTION}
 
2151
  TMinidumpException = MINIDUMP_EXCEPTION;
 
2152
  PMinidumpException = PMINIDUMP_EXCEPTION;
 
2153
 
 
2154
//
 
2155
// The exception information stream contains the id of the thread that caused
 
2156
// the exception (ThreadId), the exception record for the exception
 
2157
// (ExceptionRecord) and an RVA to the thread context where the exception
 
2158
// occured.
 
2159
//
 
2160
 
 
2161
  PMINIDUMP_EXCEPTION_STREAM = ^MINIDUMP_EXCEPTION_STREAM;
 
2162
  {$EXTERNALSYM PMINIDUMP_EXCEPTION_STREAM}
 
2163
  _MINIDUMP_EXCEPTION_STREAM = record
 
2164
    ThreadId: ULONG32;
 
2165
    __alignment: ULONG32;
 
2166
    ExceptionRecord: MINIDUMP_EXCEPTION;
 
2167
    ThreadContext: MINIDUMP_LOCATION_DESCRIPTOR;
 
2168
  end;
 
2169
  {$EXTERNALSYM _MINIDUMP_EXCEPTION_STREAM}
 
2170
  MINIDUMP_EXCEPTION_STREAM = _MINIDUMP_EXCEPTION_STREAM;
 
2171
  {$EXTERNALSYM MINIDUMP_EXCEPTION_STREAM}
 
2172
  TMinidumpExceptionStream = MINIDUMP_EXCEPTION_STREAM;
 
2173
  PMinidumpExceptionStream = PMINIDUMP_EXCEPTION_STREAM;
 
2174
 
 
2175
//
 
2176
// The MINIDUMP_MODULE contains information about a
 
2177
// a specific module. It includes the CheckSum and
 
2178
// the TimeDateStamp for the module so the module
 
2179
// can be reloaded during the analysis phase.
 
2180
//
 
2181
 
 
2182
  PMINIDUMP_MODULE = ^MINIDUMP_MODULE;
 
2183
  {$EXTERNALSYM PMINIDUMP_MODULE}
 
2184
  _MINIDUMP_MODULE = record
 
2185
    BaseOfImage: ULONG64;
 
2186
    SizeOfImage: ULONG32;
 
2187
    CheckSum: ULONG32;
 
2188
    TimeDateStamp: ULONG32;
 
2189
    ModuleNameRva: RVA;
 
2190
    VersionInfo: VS_FIXEDFILEINFO;
 
2191
    CvRecord: MINIDUMP_LOCATION_DESCRIPTOR;
 
2192
    MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR;
 
2193
    Reserved0: ULONG64; // Reserved for future use.
 
2194
    Reserved1: ULONG64; // Reserved for future use.
 
2195
  end;
 
2196
  {$EXTERNALSYM _MINIDUMP_MODULE}
 
2197
  MINIDUMP_MODULE = _MINIDUMP_MODULE;
 
2198
  {$EXTERNALSYM MINIDUMP_MODULE}
 
2199
  TMinidumpModule = MINIDUMP_MODULE;
 
2200
  PMinidumpModule = PMINIDUMP_MODULE;
 
2201
 
 
2202
//
 
2203
// The minidump module list is a container for modules.
 
2204
//
 
2205
 
 
2206
  PMINIDUMP_MODULE_LIST = ^MINIDUMP_MODULE_LIST;
 
2207
  {$EXTERNALSYM PMINIDUMP_MODULE_LIST}
 
2208
  _MINIDUMP_MODULE_LIST = record
 
2209
    NumberOfModules: ULONG32;
 
2210
    Modules: array [0..0] of MINIDUMP_MODULE;
 
2211
  end;
 
2212
  {$EXTERNALSYM _MINIDUMP_MODULE_LIST}
 
2213
  MINIDUMP_MODULE_LIST = _MINIDUMP_MODULE_LIST;
 
2214
  {$EXTERNALSYM MINIDUMP_MODULE_LIST}
 
2215
  TMinidumpModuleList = MINIDUMP_MODULE_LIST;
 
2216
  PMinidumpModuleList = PMINIDUMP_MODULE_LIST;
 
2217
 
 
2218
//
 
2219
// Memory Ranges
 
2220
//
 
2221
 
 
2222
  PMINIDUMP_MEMORY_LIST = ^MINIDUMP_MEMORY_LIST;
 
2223
  {$EXTERNALSYM PMINIDUMP_MEMORY_LIST}
 
2224
  _MINIDUMP_MEMORY_LIST = record
 
2225
    NumberOfMemoryRanges: ULONG32;
 
2226
    MemoryRanges: array [0..0] of MINIDUMP_MEMORY_DESCRIPTOR;
 
2227
  end;
 
2228
  {$EXTERNALSYM _MINIDUMP_MEMORY_LIST}
 
2229
  MINIDUMP_MEMORY_LIST = _MINIDUMP_MEMORY_LIST;
 
2230
  {$EXTERNALSYM MINIDUMP_MEMORY_LIST}
 
2231
  TMinidumpMemoryList = MINIDUMP_MEMORY_LIST;
 
2232
  PMinidumpMemoryList = PMINIDUMP_MEMORY_LIST;
 
2233
 
 
2234
  PMINIDUMP_MEMORY64_LIST = ^MINIDUMP_MEMORY64_LIST;
 
2235
  {$EXTERNALSYM PMINIDUMP_MEMORY64_LIST}
 
2236
  _MINIDUMP_MEMORY64_LIST = record
 
2237
    NumberOfMemoryRanges: ULONG64;
 
2238
    BaseRva: RVA64;
 
2239
    MemoryRanges: array [0..0] of MINIDUMP_MEMORY_DESCRIPTOR64;
 
2240
  end;
 
2241
  {$EXTERNALSYM _MINIDUMP_MEMORY64_LIST}
 
2242
  MINIDUMP_MEMORY64_LIST = _MINIDUMP_MEMORY64_LIST;
 
2243
  {$EXTERNALSYM MINIDUMP_MEMORY64_LIST}
 
2244
  TMinidumpMemory64List = MINIDUMP_MEMORY64_LIST;
 
2245
  PMinidumpMemory64List = PMINIDUMP_MEMORY64_LIST;
 
2246
 
 
2247
//
 
2248
// Support for user supplied exception information.
 
2249
//
 
2250
 
 
2251
  PMINIDUMP_EXCEPTION_INFORMATION = ^MINIDUMP_EXCEPTION_INFORMATION;
 
2252
  {$EXTERNALSYM PMINIDUMP_EXCEPTION_INFORMATION}
 
2253
  _MINIDUMP_EXCEPTION_INFORMATION = record
 
2254
    ThreadId: DWORD;
 
2255
    ExceptionPointers: PEXCEPTION_POINTERS;
 
2256
    ClientPointers: BOOL;
 
2257
  end;
 
2258
  {$EXTERNALSYM _MINIDUMP_EXCEPTION_INFORMATION}
 
2259
  MINIDUMP_EXCEPTION_INFORMATION = _MINIDUMP_EXCEPTION_INFORMATION;
 
2260
  {$EXTERNALSYM MINIDUMP_EXCEPTION_INFORMATION}
 
2261
  TMinidumpExceptionInformation = MINIDUMP_EXCEPTION_INFORMATION;
 
2262
  PMinidumpExceptionInformation = PMINIDUMP_EXCEPTION_INFORMATION;
 
2263
 
 
2264
//
 
2265
// Support for capturing system handle state at the time of the dump.
 
2266
//
 
2267
 
 
2268
  PMINIDUMP_HANDLE_DESCRIPTOR = ^MINIDUMP_HANDLE_DESCRIPTOR;
 
2269
  {$EXTERNALSYM PMINIDUMP_HANDLE_DESCRIPTOR}
 
2270
  _MINIDUMP_HANDLE_DESCRIPTOR = record
 
2271
    Handle: ULONG64;
 
2272
    TypeNameRva: RVA;
 
2273
    ObjectNameRva: RVA;
 
2274
    Attributes: ULONG32;
 
2275
    GrantedAccess: ULONG32;
 
2276
    HandleCount: ULONG32;
 
2277
    PointerCount: ULONG32;
 
2278
  end;
 
2279
  {$EXTERNALSYM _MINIDUMP_HANDLE_DESCRIPTOR}
 
2280
  MINIDUMP_HANDLE_DESCRIPTOR = _MINIDUMP_HANDLE_DESCRIPTOR;
 
2281
  {$EXTERNALSYM MINIDUMP_HANDLE_DESCRIPTOR}
 
2282
  TMinidumpHandleDescriptor = MINIDUMP_HANDLE_DESCRIPTOR;
 
2283
  PMinidumpHandleDescriptor = PMINIDUMP_HANDLE_DESCRIPTOR;
 
2284
 
 
2285
  PMINIDUMP_HANDLE_DATA_STREAM = ^MINIDUMP_HANDLE_DATA_STREAM;
 
2286
  {$EXTERNALSYM PMINIDUMP_HANDLE_DATA_STREAM}
 
2287
  _MINIDUMP_HANDLE_DATA_STREAM = record
 
2288
    SizeOfHeader: ULONG32;
 
2289
    SizeOfDescriptor: ULONG32;
 
2290
    NumberOfDescriptors: ULONG32;
 
2291
    Reserved: ULONG32;
 
2292
  end;
 
2293
  {$EXTERNALSYM _MINIDUMP_HANDLE_DATA_STREAM}
 
2294
  MINIDUMP_HANDLE_DATA_STREAM = _MINIDUMP_HANDLE_DATA_STREAM;
 
2295
  {$EXTERNALSYM MINIDUMP_HANDLE_DATA_STREAM}
 
2296
  TMinidumpHandleDataStream = MINIDUMP_HANDLE_DATA_STREAM;
 
2297
  PMinidumpHandleDataStream = PMINIDUMP_HANDLE_DATA_STREAM;
 
2298
 
 
2299
//
 
2300
// Support for capturing dynamic function table state at the time of the dump.
 
2301
//
 
2302
 
 
2303
  PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = ^MINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
 
2304
  {$EXTERNALSYM PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR}
 
2305
  _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = record
 
2306
    MinimumAddress: ULONG64;
 
2307
    MaximumAddress: ULONG64;
 
2308
    BaseAddress: ULONG64;
 
2309
    EntryCount: ULONG32;
 
2310
    SizeOfAlignPad: ULONG32;
 
2311
  end;
 
2312
  {$EXTERNALSYM _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR}
 
2313
  MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
 
2314
  {$EXTERNALSYM MINIDUMP_FUNCTION_TABLE_DESCRIPTOR}
 
2315
  TMinidumpFunctionTableDescriptor = MINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
 
2316
  PMinidumpFunctionTableDescriptor = PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
 
2317
 
 
2318
  PMINIDUMP_FUNCTION_TABLE_STREAM = ^MINIDUMP_FUNCTION_TABLE_STREAM;
 
2319
  {$EXTERNALSYM PMINIDUMP_FUNCTION_TABLE_STREAM}
 
2320
  _MINIDUMP_FUNCTION_TABLE_STREAM = record
 
2321
    SizeOfHeader: ULONG32;
 
2322
    SizeOfDescriptor: ULONG32;
 
2323
    SizeOfNativeDescriptor: ULONG32;
 
2324
    SizeOfFunctionEntry: ULONG32;
 
2325
    NumberOfDescriptors: ULONG32;
 
2326
    SizeOfAlignPad: ULONG32;
 
2327
  end;
 
2328
  {$EXTERNALSYM _MINIDUMP_FUNCTION_TABLE_STREAM}
 
2329
  MINIDUMP_FUNCTION_TABLE_STREAM = _MINIDUMP_FUNCTION_TABLE_STREAM;
 
2330
  {$EXTERNALSYM MINIDUMP_FUNCTION_TABLE_STREAM}
 
2331
  TMinidumpFunctionTableStream = MINIDUMP_FUNCTION_TABLE_STREAM;
 
2332
  PMinidumpFunctionTableStream = PMINIDUMP_FUNCTION_TABLE_STREAM;
 
2333
 
 
2334
//
 
2335
// The MINIDUMP_UNLOADED_MODULE contains information about a
 
2336
// a specific module that was previously loaded but no
 
2337
// longer is.  This can help with diagnosing problems where
 
2338
// callers attempt to call code that is no longer loaded.
 
2339
//
 
2340
 
 
2341
  _MINIDUMP_UNLOADED_MODULE = record
 
2342
    BaseOfImage: ULONG64;
 
2343
    SizeOfImage: ULONG32;
 
2344
    CheckSum: ULONG32;
 
2345
    TimeDateStamp: ULONG32;
 
2346
    ModuleNameRva: RVA;
 
2347
  end;
 
2348
  {$EXTERNALSYM _MINIDUMP_UNLOADED_MODULE}
 
2349
  MINIDUMP_UNLOADED_MODULE = _MINIDUMP_UNLOADED_MODULE;
 
2350
  {$EXTERNALSYM MINIDUMP_UNLOADED_MODULE}
 
2351
  PMINIDUMP_UNLOADED_MODULE = ^MINIDUMP_UNLOADED_MODULE;
 
2352
  {$EXTERNALSYM PMINIDUMP_UNLOADED_MODULE}
 
2353
  TMiniDumpUnloadedModule = MINIDUMP_UNLOADED_MODULE;
 
2354
  PMiniDumpUnloadedModule = PMINIDUMP_UNLOADED_MODULE;
 
2355
 
 
2356
//
 
2357
// The minidump unloaded module list is a container for unloaded modules.
 
2358
//
 
2359
 
 
2360
  _MINIDUMP_UNLOADED_MODULE_LIST = record
 
2361
    SizeOfHeader: ULONG32;
 
2362
    SizeOfEntry: ULONG32;
 
2363
    NumberOfEntries: ULONG32;
 
2364
  end;
 
2365
  {$EXTERNALSYM _MINIDUMP_UNLOADED_MODULE_LIST}
 
2366
  MINIDUMP_UNLOADED_MODULE_LIST = _MINIDUMP_UNLOADED_MODULE_LIST;
 
2367
  {$EXTERNALSYM MINIDUMP_UNLOADED_MODULE_LIST}
 
2368
  PMINIDUMP_UNLOADED_MODULE_LIST = ^MINIDUMP_UNLOADED_MODULE_LIST;
 
2369
  {$EXTERNALSYM PMINIDUMP_UNLOADED_MODULE_LIST}
 
2370
  TMiniDumpUnloadedModuleList = MINIDUMP_UNLOADED_MODULE_LIST;
 
2371
  PMiniDumpUnloadedModuleList = PMINIDUMP_UNLOADED_MODULE_LIST;
 
2372
 
 
2373
//
 
2374
// The miscellaneous information stream contains a variety
 
2375
// of small pieces of information.  A member is valid if
 
2376
// it's within the available size and its corresponding
 
2377
// bit is set.
 
2378
//
 
2379
 
 
2380
const
 
2381
  MINIDUMP_MISC1_PROCESS_ID    = $00000001;
 
2382
  {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_ID}
 
2383
  MINIDUMP_MISC1_PROCESS_TIMES = $00000002;
 
2384
  {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_TIMES}
 
2385
 
 
2386
type
 
2387
  _MINIDUMP_MISC_INFO = record
 
2388
    SizeOfInfo: ULONG32;
 
2389
    Flags1: ULONG32;
 
2390
    ProcessId: ULONG32;
 
2391
    ProcessCreateTime: ULONG32;
 
2392
    ProcessUserTime: ULONG32;
 
2393
    ProcessKernelTime: ULONG32;
 
2394
  end;
 
2395
  {$EXTERNALSYM _MINIDUMP_MISC_INFO}
 
2396
  MINIDUMP_MISC_INFO = _MINIDUMP_MISC_INFO;
 
2397
  {$EXTERNALSYM MINIDUMP_MISC_INFO}
 
2398
  PMINIDUMP_MISC_INFO = ^MINIDUMP_MISC_INFO;
 
2399
  {$EXTERNALSYM PMINIDUMP_MISC_INFO}
 
2400
  TMiniDumpMiscInfo = MINIDUMP_MISC_INFO;
 
2401
  PMiniDumpMiscInfo = PMINIDUMP_MISC_INFO;
 
2402
 
 
2403
//
 
2404
// Support for arbitrary user-defined information.
 
2405
//
 
2406
 
 
2407
  PMINIDUMP_USER_RECORD = ^MINIDUMP_USER_RECORD;
 
2408
  {$EXTERNALSYM PMINIDUMP_USER_RECORD}
 
2409
  _MINIDUMP_USER_RECORD = record
 
2410
    Type_: ULONG32;
 
2411
    Memory: MINIDUMP_LOCATION_DESCRIPTOR;
 
2412
  end;
 
2413
  {$EXTERNALSYM _MINIDUMP_USER_RECORD}
 
2414
  MINIDUMP_USER_RECORD = _MINIDUMP_USER_RECORD;
 
2415
  {$EXTERNALSYM MINIDUMP_USER_RECORD}
 
2416
  TMinidumpUserRecord = MINIDUMP_USER_RECORD;
 
2417
  PMinidumpUserRecord = PMINIDUMP_USER_RECORD;
 
2418
 
 
2419
  PMINIDUMP_USER_STREAM = ^MINIDUMP_USER_STREAM;
 
2420
  {$EXTERNALSYM PMINIDUMP_USER_STREAM}
 
2421
  _MINIDUMP_USER_STREAM = record
 
2422
    Type_: ULONG32;
 
2423
    BufferSize: ULONG;
 
2424
    Buffer: PVOID;
 
2425
  end;
 
2426
  {$EXTERNALSYM _MINIDUMP_USER_STREAM}
 
2427
  MINIDUMP_USER_STREAM = _MINIDUMP_USER_STREAM;
 
2428
  {$EXTERNALSYM MINIDUMP_USER_STREAM}
 
2429
  TMinidumpUserStream = MINIDUMP_USER_STREAM;
 
2430
  PMinidumpUserStream = PMINIDUMP_USER_STREAM;
 
2431
 
 
2432
  PMINIDUMP_USER_STREAM_INFORMATION = ^MINIDUMP_USER_STREAM_INFORMATION;
 
2433
  {$EXTERNALSYM PMINIDUMP_USER_STREAM_INFORMATION}
 
2434
  _MINIDUMP_USER_STREAM_INFORMATION = record
 
2435
    UserStreamCount: ULONG;
 
2436
    UserStreamArray: PMINIDUMP_USER_STREAM;
 
2437
  end;
 
2438
  {$EXTERNALSYM _MINIDUMP_USER_STREAM_INFORMATION}
 
2439
  MINIDUMP_USER_STREAM_INFORMATION = _MINIDUMP_USER_STREAM_INFORMATION;
 
2440
  {$EXTERNALSYM MINIDUMP_USER_STREAM_INFORMATION}
 
2441
  TMinidumpUserStreamInformation = MINIDUMP_USER_STREAM_INFORMATION;
 
2442
  PMinidumpUserStreamInformation = PMINIDUMP_USER_STREAM_INFORMATION;
 
2443
 
 
2444
//
 
2445
// Callback support.
 
2446
//
 
2447
 
 
2448
  _MINIDUMP_CALLBACK_TYPE = (
 
2449
    ModuleCallback,
 
2450
    ThreadCallback,
 
2451
    ThreadExCallback,
 
2452
    IncludeThreadCallback,
 
2453
    IncludeModuleCallback);
 
2454
  {$EXTERNALSYM _MINIDUMP_CALLBACK_TYPE}
 
2455
  MINIDUMP_CALLBACK_TYPE = _MINIDUMP_CALLBACK_TYPE;
 
2456
  {$EXTERNALSYM MINIDUMP_CALLBACK_TYPE}
 
2457
  TMinidumpCallbackType = MINIDUMP_CALLBACK_TYPE;
 
2458
 
 
2459
  PMINIDUMP_THREAD_CALLBACK = ^MINIDUMP_THREAD_CALLBACK;
 
2460
  {$EXTERNALSYM PMINIDUMP_THREAD_CALLBACK}
 
2461
  _MINIDUMP_THREAD_CALLBACK = record
 
2462
    ThreadId: ULONG;
 
2463
    ThreadHandle: HANDLE;
 
2464
    Context: CONTEXT;
 
2465
    SizeOfContext: ULONG;
 
2466
    StackBase: ULONG64;
 
2467
    StackEnd: ULONG64;
 
2468
  end;
 
2469
  {$EXTERNALSYM _MINIDUMP_THREAD_CALLBACK}
 
2470
  MINIDUMP_THREAD_CALLBACK = _MINIDUMP_THREAD_CALLBACK;
 
2471
  {$EXTERNALSYM MINIDUMP_THREAD_CALLBACK}
 
2472
  TMinidumpThreadCallback = MINIDUMP_THREAD_CALLBACK;
 
2473
  PMinidumpThreadCallback = PMINIDUMP_THREAD_CALLBACK;
 
2474
 
 
2475
  PMINIDUMP_THREAD_EX_CALLBACK = ^MINIDUMP_THREAD_EX_CALLBACK;
 
2476
  {$EXTERNALSYM PMINIDUMP_THREAD_EX_CALLBACK}
 
2477
  _MINIDUMP_THREAD_EX_CALLBACK = record
 
2478
    ThreadId: ULONG;
 
2479
    ThreadHandle: HANDLE;
 
2480
    Context: CONTEXT;
 
2481
    SizeOfContext: ULONG;
 
2482
    StackBase: ULONG64;
 
2483
    StackEnd: ULONG64;
 
2484
    BackingStoreBase: ULONG64;
 
2485
    BackingStoreEnd: ULONG64;
 
2486
  end;
 
2487
  {$EXTERNALSYM _MINIDUMP_THREAD_EX_CALLBACK}
 
2488
  MINIDUMP_THREAD_EX_CALLBACK = _MINIDUMP_THREAD_EX_CALLBACK;
 
2489
  {$EXTERNALSYM MINIDUMP_THREAD_EX_CALLBACK}
 
2490
  TMinidumpThreadExCallback = MINIDUMP_THREAD_EX_CALLBACK;
 
2491
  PMinidumpThreadExCallback = PMINIDUMP_THREAD_EX_CALLBACK;
 
2492
 
 
2493
  PMINIDUMP_INCLUDE_THREAD_CALLBACK = ^MINIDUMP_INCLUDE_THREAD_CALLBACK;
 
2494
  {$EXTERNALSYM PMINIDUMP_INCLUDE_THREAD_CALLBACK}
 
2495
  _MINIDUMP_INCLUDE_THREAD_CALLBACK = record
 
2496
    ThreadId: ULONG;
 
2497
  end;
 
2498
  {$EXTERNALSYM _MINIDUMP_INCLUDE_THREAD_CALLBACK}
 
2499
  MINIDUMP_INCLUDE_THREAD_CALLBACK = _MINIDUMP_INCLUDE_THREAD_CALLBACK;
 
2500
  {$EXTERNALSYM MINIDUMP_INCLUDE_THREAD_CALLBACK}
 
2501
  TMinidumpIncludeThreadCallback = MINIDUMP_INCLUDE_THREAD_CALLBACK;
 
2502
  PMinidumpIncludeThreadCallback = PMINIDUMP_INCLUDE_THREAD_CALLBACK;
 
2503
 
 
2504
const
 
2505
  ThreadWriteThread            = $0001;
 
2506
  {$EXTERNALSYM ThreadWriteThread}
 
2507
  ThreadWriteStack             = $0002;
 
2508
  {$EXTERNALSYM ThreadWriteStack}
 
2509
  ThreadWriteContext           = $0004;
 
2510
  {$EXTERNALSYM ThreadWriteContext}
 
2511
  ThreadWriteBackingStore      = $0008;
 
2512
  {$EXTERNALSYM ThreadWriteBackingStore}
 
2513
  ThreadWriteInstructionWindow = $0010;
 
2514
  {$EXTERNALSYM ThreadWriteInstructionWindow}
 
2515
  ThreadWriteThreadData        = $0020;
 
2516
  {$EXTERNALSYM ThreadWriteThreadData}
 
2517
 
 
2518
type
 
2519
  _THREAD_WRITE_FLAGS = DWORD;
 
2520
  {$EXTERNALSYM _THREAD_WRITE_FLAGS}
 
2521
  THREAD_WRITE_FLAGS = _THREAD_WRITE_FLAGS;
 
2522
  {$EXTERNALSYM THREAD_WRITE_FLAGS}
 
2523
  TThreadWriteFlags = THREAD_WRITE_FLAGS;
 
2524
 
 
2525
type
 
2526
  PMINIDUMP_MODULE_CALLBACK = ^MINIDUMP_MODULE_CALLBACK;
 
2527
  {$EXTERNALSYM PMINIDUMP_MODULE_CALLBACK}
 
2528
  _MINIDUMP_MODULE_CALLBACK = record
 
2529
    FullPath: PWCHAR;
 
2530
    BaseOfImage: ULONG64;
 
2531
    SizeOfImage: ULONG;
 
2532
    CheckSum: ULONG;
 
2533
    TimeDateStamp: ULONG;
 
2534
    VersionInfo: VS_FIXEDFILEINFO;
 
2535
    CvRecord: PVOID;
 
2536
    SizeOfCvRecord: ULONG;
 
2537
    MiscRecord: PVOID;
 
2538
    SizeOfMiscRecord: ULONG;
 
2539
  end;
 
2540
  {$EXTERNALSYM _MINIDUMP_MODULE_CALLBACK}
 
2541
  MINIDUMP_MODULE_CALLBACK = _MINIDUMP_MODULE_CALLBACK;
 
2542
  {$EXTERNALSYM MINIDUMP_MODULE_CALLBACK}
 
2543
  TMinidumpModuleCallback = MINIDUMP_MODULE_CALLBACK;
 
2544
  PMinidumpModuleCallback = PMINIDUMP_MODULE_CALLBACK;
 
2545
 
 
2546
  PMINIDUMP_INCLUDE_MODULE_CALLBACK = ^MINIDUMP_INCLUDE_MODULE_CALLBACK;
 
2547
  {$EXTERNALSYM PMINIDUMP_INCLUDE_MODULE_CALLBACK}
 
2548
  _MINIDUMP_INCLUDE_MODULE_CALLBACK = record
 
2549
    BaseOfImage: ULONG64;
 
2550
  end;
 
2551
  {$EXTERNALSYM _MINIDUMP_INCLUDE_MODULE_CALLBACK}
 
2552
  MINIDUMP_INCLUDE_MODULE_CALLBACK = _MINIDUMP_INCLUDE_MODULE_CALLBACK;
 
2553
  {$EXTERNALSYM MINIDUMP_INCLUDE_MODULE_CALLBACK}
 
2554
  TMinidumpIncludeModuleCallback = MINIDUMP_INCLUDE_MODULE_CALLBACK;
 
2555
  PMinidumpIncludeModuleCallback = PMINIDUMP_INCLUDE_MODULE_CALLBACK;
 
2556
 
 
2557
const
 
2558
  ModuleWriteModule        = $0001;
 
2559
  {$EXTERNALSYM ModuleWriteModule}
 
2560
  ModuleWriteDataSeg       = $0002;
 
2561
  {$EXTERNALSYM ModuleWriteDataSeg}
 
2562
  ModuleWriteMiscRecord    = $0004;
 
2563
  {$EXTERNALSYM ModuleWriteMiscRecord}
 
2564
  ModuleWriteCvRecord      = $0008;
 
2565
  {$EXTERNALSYM ModuleWriteCvRecord}
 
2566
  ModuleReferencedByMemory = $0010;
 
2567
  {$EXTERNALSYM ModuleReferencedByMemory}
 
2568
 
 
2569
type
 
2570
  _MODULE_WRITE_FLAGS = DWORD;
 
2571
  {$EXTERNALSYM _MODULE_WRITE_FLAGS}
 
2572
  MODULE_WRITE_FLAGS = _MODULE_WRITE_FLAGS;
 
2573
  {$EXTERNALSYM MODULE_WRITE_FLAGS}
 
2574
  TModuleWriteFlags = MODULE_WRITE_FLAGS;
 
2575
 
 
2576
  _MINIDUMP_CALLBACK_INPUT = record
 
2577
    ProcessId: ULONG;
 
2578
    ProcessHandle: HANDLE;
 
2579
    CallbackType: ULONG;
 
2580
    case Integer of
 
2581
      0: (Thread: MINIDUMP_THREAD_CALLBACK);
 
2582
      1: (ThreadEx: MINIDUMP_THREAD_EX_CALLBACK);
 
2583
      2: (Module: MINIDUMP_MODULE_CALLBACK);
 
2584
      3: (IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK);
 
2585
      4: (IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK);
 
2586
  end;
 
2587
  {$EXTERNALSYM _MINIDUMP_CALLBACK_INPUT}
 
2588
  MINIDUMP_CALLBACK_INPUT = _MINIDUMP_CALLBACK_INPUT;
 
2589
  {$EXTERNALSYM MINIDUMP_CALLBACK_INPUT}
 
2590
  PMINIDUMP_CALLBACK_INPUT = ^MINIDUMP_CALLBACK_INPUT;
 
2591
  {$EXTERNALSYM PMINIDUMP_CALLBACK_INPUT}
 
2592
  TminidumpCallbackInput = MINIDUMP_CALLBACK_INPUT;
 
2593
 
 
2594
  PMINIDUMP_CALLBACK_OUTPUT = ^MINIDUMP_CALLBACK_OUTPUT;
 
2595
  {$EXTERNALSYM PMINIDUMP_CALLBACK_OUTPUT}
 
2596
  _MINIDUMP_CALLBACK_OUTPUT = record
 
2597
    case Integer of
 
2598
      0: (ModuleWriteFlags: ULONG);
 
2599
      1: (ThreadWriteFlags: ULONG);
 
2600
  end;
 
2601
  {$EXTERNALSYM _MINIDUMP_CALLBACK_OUTPUT}
 
2602
  MINIDUMP_CALLBACK_OUTPUT = _MINIDUMP_CALLBACK_OUTPUT;
 
2603
  {$EXTERNALSYM MINIDUMP_CALLBACK_OUTPUT}
 
2604
  TMinidumpCallbackOutput = MINIDUMP_CALLBACK_OUTPUT;
 
2605
  PMinidumpCallbackOutput = PMINIDUMP_CALLBACK_OUTPUT;
 
2606
 
 
2607
//
 
2608
// A normal minidump contains just the information
 
2609
// necessary to capture stack traces for all of the
 
2610
// existing threads in a process.
 
2611
//
 
2612
// A minidump with data segments includes all of the data
 
2613
// sections from loaded modules in order to capture
 
2614
// global variable contents.  This can make the dump much
 
2615
// larger if many modules have global data.
 
2616
//
 
2617
// A minidump with full memory includes all of the accessible
 
2618
// memory in the process and can be very large.  A minidump
 
2619
// with full memory always has the raw memory data at the end
 
2620
// of the dump so that the initial structures in the dump can
 
2621
// be mapped directly without having to include the raw
 
2622
// memory information.
 
2623
//
 
2624
// Stack and backing store memory can be filtered to remove
 
2625
// data unnecessary for stack walking.  This can improve
 
2626
// compression of stacks and also deletes data that may
 
2627
// be private and should not be stored in a dump.
 
2628
// Memory can also be scanned to see what modules are
 
2629
// referenced by stack and backing store memory to allow
 
2630
// omission of other modules to reduce dump size.
 
2631
// In either of these modes the ModuleReferencedByMemory flag
 
2632
// is set for all modules referenced before the base
 
2633
// module callbacks occur.
 
2634
//
 
2635
// On some operating systems a list of modules that were
 
2636
// recently unloaded is kept in addition to the currently
 
2637
// loaded module list.  This information can be saved in
 
2638
// the dump if desired.
 
2639
//
 
2640
// Stack and backing store memory can be scanned for referenced
 
2641
// pages in order to pick up data referenced by locals or other
 
2642
// stack memory.  This can increase the size of a dump significantly.
 
2643
//
 
2644
// Module paths may contain undesired information such as user names
 
2645
// or other important directory names so they can be stripped.  This
 
2646
// option reduces the ability to locate the proper image later
 
2647
// and should only be used in certain situations.
 
2648
//
 
2649
// Complete operating system per-process and per-thread information can
 
2650
// be gathered and stored in the dump.
 
2651
//
 
2652
// The virtual address space can be scanned for various types
 
2653
// of memory to be included in the dump.
 
2654
//
 
2655
 
 
2656
const
 
2657
  MiniDumpNormal         = $0000;
 
2658
  {$EXTERNALSYM MiniDumpNormal}
 
2659
  MiniDumpWithDataSegs   = $0001;
 
2660
  {$EXTERNALSYM MiniDumpWithDataSegs}
 
2661
  MiniDumpWithFullMemory = $0002;
 
2662
  {$EXTERNALSYM MiniDumpWithFullMemory}
 
2663
  MiniDumpWithHandleData = $0004;
 
2664
  {$EXTERNALSYM MiniDumpWithHandleData}
 
2665
  MiniDumpFilterMemory   = $0008;
 
2666
  {$EXTERNALSYM MiniDumpFilterMemory}
 
2667
  MiniDumpScanMemory     = $0010;
 
2668
  {$EXTERNALSYM MiniDumpScanMemory}
 
2669
  MiniDumpWithUnloadedModules            = $0020;
 
2670
  {$EXTERNALSYM MiniDumpWithUnloadedModules}
 
2671
  MiniDumpWithIndirectlyReferencedMemory = $0040;
 
2672
  {$EXTERNALSYM MiniDumpWithIndirectlyReferencedMemory}
 
2673
  MiniDumpFilterModulePaths              = $0080;
 
2674
  {$EXTERNALSYM MiniDumpFilterModulePaths}
 
2675
  MiniDumpWithProcessThreadData          = $0100;
 
2676
  {$EXTERNALSYM MiniDumpWithProcessThreadData}
 
2677
  MiniDumpWithPrivateReadWriteMemory     = $0200;
 
2678
  {$EXTERNALSYM MiniDumpWithPrivateReadWriteMemory}
 
2679
 
 
2680
type
 
2681
  _MINIDUMP_TYPE = DWORD;
 
2682
  {$EXTERNALSYM _MINIDUMP_TYPE}
 
2683
  MINIDUMP_TYPE = _MINIDUMP_TYPE;
 
2684
  {$EXTERNALSYM MINIDUMP_TYPE}
 
2685
  TMinidumpType = MINIDUMP_TYPE;
 
2686
 
 
2687
//
 
2688
// The minidump callback should modify the FieldsToWrite parameter to reflect
 
2689
// what portions of the specified thread or module should be written to the
 
2690
// file.
 
2691
//
 
2692
 
 
2693
  MINIDUMP_CALLBACK_ROUTINE = function(CallbackParam: PVOID; CallbackInput: PMINIDUMP_CALLBACK_INPUT;
 
2694
    CallbackOutput: PMINIDUMP_CALLBACK_OUTPUT): BOOL; stdcall;
 
2695
  {$EXTERNALSYM MINIDUMP_CALLBACK_ROUTINE}
 
2696
  TMinidumpCallbackRoutine = MINIDUMP_CALLBACK_ROUTINE;
 
2697
 
 
2698
  PMINIDUMP_CALLBACK_INFORMATION = ^MINIDUMP_CALLBACK_INFORMATION;
 
2699
  {$EXTERNALSYM PMINIDUMP_CALLBACK_INFORMATION}
 
2700
  _MINIDUMP_CALLBACK_INFORMATION = record
 
2701
    CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE;
 
2702
    CallbackParam: PVOID;
 
2703
  end;
 
2704
  {$EXTERNALSYM _MINIDUMP_CALLBACK_INFORMATION}
 
2705
  MINIDUMP_CALLBACK_INFORMATION = _MINIDUMP_CALLBACK_INFORMATION;
 
2706
  {$EXTERNALSYM MINIDUMP_CALLBACK_INFORMATION}
 
2707
  TMinidumpCallbackInformation = MINIDUMP_CALLBACK_INFORMATION;
 
2708
  PMinidumpCallbackInformation = PMINIDUMP_CALLBACK_INFORMATION;
 
2709
 
 
2710
//++
 
2711
//
 
2712
// PVOID
 
2713
// RVA_TO_ADDR(
 
2714
//     PVOID Mapping,
 
2715
//     ULONG Rva
 
2716
//     )
 
2717
//
 
2718
// Routine Description:
 
2719
//
 
2720
//     Map an RVA that is contained within a mapped file to it's associated
 
2721
//     flat address.
 
2722
//
 
2723
// Arguments:
 
2724
//
 
2725
//     Mapping - Base address of mapped file containing the RVA.
 
2726
//
 
2727
//     Rva - An Rva to fixup.
 
2728
//
 
2729
// Return Values:
 
2730
//
 
2731
//     A pointer to the desired data.
 
2732
//
 
2733
//--
 
2734
 
 
2735
function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer;
 
2736
{$EXTERNALSYM RVA_TO_ADDR}
 
2737
 
 
2738
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;
 
2739
{$EXTERNALSYM MiniDumpWriteDump}
 
2740
 
 
2741
function MiniDumpReadDumpStream(BaseOfDump: PVOID; StreamNumber: ULONG; var Dir: PMINIDUMP_DIRECTORY; var StreamPointer: PVOID; var StreamSize: ULONG): BOOL; stdcall;
 
2742
{$EXTERNALSYM MiniDumpReadDumpStream}
 
2743
 
 
2744
implementation
 
2745
 
 
2746
const
 
2747
  ImageHlpLib = 'imagehlp.dll';
 
2748
  {$IFDEF UNICODE}
 
2749
  AWSuffix = 'W';
 
2750
  {$ELSE}
 
2751
  AWSuffix = 'A';
 
2752
  {$ENDIF UNICODE}
 
2753
 
 
2754
procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64);
 
2755
begin
 
2756
  a64^.Offset := {ULONG64(LONG64(LONG(}a32^.Offset{)))};
 
2757
  a64^.Segment := a32^.Segment;
 
2758
  a64^.Mode := a32^.Mode;
 
2759
end;
 
2760
 
 
2761
procedure Address64To32(a64: LPADDRESS64; a32: LPADDRESS);
 
2762
begin
 
2763
  a32^.Offset := ULONG(a64^.Offset);
 
2764
  a32^.Segment := a64^.Segment;
 
2765
  a32^.Mode := a64^.Mode;
 
2766
end;
 
2767
 
 
2768
procedure KdHelp32To64(p32: PKDHELP; p64: PKDHELP64);
 
2769
begin
 
2770
  p64^.Thread := p32^.Thread;
 
2771
  p64^.ThCallbackStack := p32^.ThCallbackStack;
 
2772
  p64^.NextCallback := p32^.NextCallback;
 
2773
  p64^.FramePointer := p32^.FramePointer;
 
2774
  p64^.KiCallUserMode := p32^.KiCallUserMode;
 
2775
  p64^.KeUserCallbackDispatcher := p32^.KeUserCallbackDispatcher;
 
2776
  p64^.SystemRangeStart := p32^.SystemRangeStart;
 
2777
end;
 
2778
 
 
2779
function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer;
 
2780
begin
 
2781
  Result := Pointer(Cardinal(Mapping) + Cardinal(Rva));
 
2782
end;
 
2783
 
 
2784
{$IFDEF DYNAMIC_LINK}
 
2785
 
 
2786
var
 
2787
  _BindImage: Pointer;
 
2788
 
 
2789
function BindImage;
 
2790
begin
 
2791
  GetProcedureAddress(_BindImage, ImageHlpLib, 'BindImage');
 
2792
  asm
 
2793
        MOV     ESP, EBP
 
2794
        POP     EBP
 
2795
        JMP     [_BindImage]
 
2796
  end;
 
2797
end;
 
2798
 
 
2799
var
 
2800
  _BindImageEx: Pointer;
 
2801
 
 
2802
function BindImageEx;
 
2803
begin
 
2804
  GetProcedureAddress(_BindImageEx, ImageHlpLib, 'BindImageEx');
 
2805
  asm
 
2806
        MOV     ESP, EBP
 
2807
        POP     EBP
 
2808
        JMP     [_BindImageEx]
 
2809
  end;
 
2810
end;
 
2811
 
 
2812
var
 
2813
  _ReBaseImage: Pointer;
 
2814
 
 
2815
function ReBaseImage;
 
2816
begin
 
2817
  GetProcedureAddress(_ReBaseImage, ImageHlpLib, 'ReBaseImage');
 
2818
  asm
 
2819
        MOV     ESP, EBP
 
2820
        POP     EBP
 
2821
        JMP     [_ReBaseImage]
 
2822
  end;
 
2823
end;
 
2824
 
 
2825
var
 
2826
  _ReBaseImage64: Pointer;
 
2827
 
 
2828
function ReBaseImage64;
 
2829
begin
 
2830
  GetProcedureAddress(_ReBaseImage64, ImageHlpLib, 'ReBaseImage64');
 
2831
  asm
 
2832
        MOV     ESP, EBP
 
2833
        POP     EBP
 
2834
        JMP     [_ReBaseImage64]
 
2835
  end;
 
2836
end;
 
2837
 
 
2838
var
 
2839
  _CheckSumMappedFile: Pointer;
 
2840
 
 
2841
function CheckSumMappedFile;
 
2842
begin
 
2843
  GetProcedureAddress(_CheckSumMappedFile, ImageHlpLib, 'CheckSumMappedFile');
 
2844
  asm
 
2845
        MOV     ESP, EBP
 
2846
        POP     EBP
 
2847
        JMP     [_CheckSumMappedFile]
 
2848
  end;
 
2849
end;
 
2850
 
 
2851
var
 
2852
  _MapFileAndCheckSumA: Pointer;
 
2853
 
 
2854
function MapFileAndCheckSumA;
 
2855
begin
 
2856
  GetProcedureAddress(_MapFileAndCheckSumA, ImageHlpLib, 'MapFileAndCheckSumA');
 
2857
  asm
 
2858
        MOV     ESP, EBP
 
2859
        POP     EBP
 
2860
        JMP     [_MapFileAndCheckSumA]
 
2861
  end;
 
2862
end;
 
2863
 
 
2864
var
 
2865
  _MapFileAndCheckSumW: Pointer;
 
2866
 
 
2867
function MapFileAndCheckSumW;
 
2868
begin
 
2869
  GetProcedureAddress(_MapFileAndCheckSumW, ImageHlpLib, 'MapFileAndCheckSumW');
 
2870
  asm
 
2871
        MOV     ESP, EBP
 
2872
        POP     EBP
 
2873
        JMP     [_MapFileAndCheckSumW]
 
2874
  end;
 
2875
end;
 
2876
 
 
2877
var
 
2878
  _MapFileAndCheckSum: Pointer;
 
2879
 
 
2880
function MapFileAndCheckSum;
 
2881
begin
 
2882
  GetProcedureAddress(_MapFileAndCheckSum, ImageHlpLib, 'MapFileAndCheckSum' + AWSuffix);
 
2883
  asm
 
2884
        MOV     ESP, EBP
 
2885
        POP     EBP
 
2886
        JMP     [_MapFileAndCheckSum]
 
2887
  end;
 
2888
end;
 
2889
 
 
2890
var
 
2891
  _GetImageConfigInformation: Pointer;
 
2892
 
 
2893
function GetImageConfigInformation;
 
2894
begin
 
2895
  GetProcedureAddress(_GetImageConfigInformation, ImageHlpLib, 'GetImageConfigInformation');
 
2896
  asm
 
2897
        MOV     ESP, EBP
 
2898
        POP     EBP
 
2899
        JMP     [_GetImageConfigInformation]
 
2900
  end;
 
2901
end;
 
2902
 
 
2903
var
 
2904
  _GetImageUnusedHeaderBytes: Pointer;
 
2905
 
 
2906
function GetImageUnusedHeaderBytes;
 
2907
begin
 
2908
  GetProcedureAddress(_GetImageUnusedHeaderBytes, ImageHlpLib, 'GetImageUnusedHeaderBytes');
 
2909
  asm
 
2910
        MOV     ESP, EBP
 
2911
        POP     EBP
 
2912
        JMP     [_GetImageUnusedHeaderBytes]
 
2913
  end;
 
2914
end;
 
2915
 
 
2916
var
 
2917
  _SetImageConfigInformation: Pointer;
 
2918
 
 
2919
function SetImageConfigInformation;
 
2920
begin
 
2921
  GetProcedureAddress(_SetImageConfigInformation, ImageHlpLib, 'SetImageConfigInformation');
 
2922
  asm
 
2923
        MOV     ESP, EBP
 
2924
        POP     EBP
 
2925
        JMP     [_SetImageConfigInformation]
 
2926
  end;
 
2927
end;
 
2928
 
 
2929
var
 
2930
  _ImageGetDigestStream: Pointer;
 
2931
 
 
2932
function ImageGetDigestStream;
 
2933
begin
 
2934
  GetProcedureAddress(_ImageGetDigestStream, ImageHlpLib, 'ImageGetDigestStream');
 
2935
  asm
 
2936
        MOV     ESP, EBP
 
2937
        POP     EBP
 
2938
        JMP     [_ImageGetDigestStream]
 
2939
  end;
 
2940
end;
 
2941
 
 
2942
var
 
2943
  _ImageAddCertificate: Pointer;
 
2944
 
 
2945
function ImageAddCertificate;
 
2946
begin
 
2947
  GetProcedureAddress(_ImageAddCertificate, ImageHlpLib, 'ImageAddCertificate');
 
2948
  asm
 
2949
        MOV     ESP, EBP
 
2950
        POP     EBP
 
2951
        JMP     [_ImageAddCertificate]
 
2952
  end;
 
2953
end;
 
2954
 
 
2955
var
 
2956
  _ImageRemoveCertificate: Pointer;
 
2957
 
 
2958
function ImageRemoveCertificate;
 
2959
begin
 
2960
  GetProcedureAddress(_ImageRemoveCertificate, ImageHlpLib, 'ImageRemoveCertificate');
 
2961
  asm
 
2962
        MOV     ESP, EBP
 
2963
        POP     EBP
 
2964
        JMP     [_ImageRemoveCertificate]
 
2965
  end;
 
2966
end;
 
2967
 
 
2968
var
 
2969
  _ImageEnumerateCertificates: Pointer;
 
2970
 
 
2971
function ImageEnumerateCertificates;
 
2972
begin
 
2973
  GetProcedureAddress(_ImageEnumerateCertificates, ImageHlpLib, 'ImageEnumerateCertificates');
 
2974
  asm
 
2975
        MOV     ESP, EBP
 
2976
        POP     EBP
 
2977
        JMP     [_ImageEnumerateCertificates]
 
2978
  end;
 
2979
end;
 
2980
 
 
2981
var
 
2982
  _ImageGetCertificateData: Pointer;
 
2983
 
 
2984
function ImageGetCertificateData;
 
2985
begin
 
2986
  GetProcedureAddress(_ImageGetCertificateData, ImageHlpLib, 'ImageGetCertificateData');
 
2987
  asm
 
2988
        MOV     ESP, EBP
 
2989
        POP     EBP
 
2990
        JMP     [_ImageGetCertificateData]
 
2991
  end;
 
2992
end;
 
2993
 
 
2994
var
 
2995
  _ImageGetCertificateHeader: Pointer;
 
2996
 
 
2997
function ImageGetCertificateHeader;
 
2998
begin
 
2999
  GetProcedureAddress(_ImageGetCertificateHeader, ImageHlpLib, 'ImageGetCertificateHeader');
 
3000
  asm
 
3001
        MOV     ESP, EBP
 
3002
        POP     EBP
 
3003
        JMP     [_ImageGetCertificateHeader]
 
3004
  end;
 
3005
end;
 
3006
 
 
3007
var
 
3008
  _ImageLoad: Pointer;
 
3009
 
 
3010
function ImageLoad;
 
3011
begin
 
3012
  GetProcedureAddress(_ImageLoad, ImageHlpLib, 'ImageLoad');
 
3013
  asm
 
3014
        MOV     ESP, EBP
 
3015
        POP     EBP
 
3016
        JMP     [_ImageLoad]
 
3017
  end;
 
3018
end;
 
3019
 
 
3020
var
 
3021
  _ImageUnload: Pointer;
 
3022
 
 
3023
function ImageUnload;
 
3024
begin
 
3025
  GetProcedureAddress(_ImageUnload, ImageHlpLib, 'ImageUnload');
 
3026
  asm
 
3027
        MOV     ESP, EBP
 
3028
        POP     EBP
 
3029
        JMP     [_ImageUnload]
 
3030
  end;
 
3031
end;
 
3032
 
 
3033
var
 
3034
  _MapAndLoad: Pointer;
 
3035
 
 
3036
function MapAndLoad;
 
3037
begin
 
3038
  GetProcedureAddress(_MapAndLoad, ImageHlpLib, 'MapAndLoad');
 
3039
  asm
 
3040
        MOV     ESP, EBP
 
3041
        POP     EBP
 
3042
        JMP     [_MapAndLoad]
 
3043
  end;
 
3044
end;
 
3045
 
 
3046
var
 
3047
  _UnMapAndLoad: Pointer;
 
3048
 
 
3049
function UnMapAndLoad;
 
3050
begin
 
3051
  GetProcedureAddress(_UnMapAndLoad, ImageHlpLib, 'UnMapAndLoad');
 
3052
  asm
 
3053
        MOV     ESP, EBP
 
3054
        POP     EBP
 
3055
        JMP     [_UnMapAndLoad]
 
3056
  end;
 
3057
end;
 
3058
 
 
3059
var
 
3060
  _TouchFileTimes: Pointer;
 
3061
 
 
3062
function TouchFileTimes;
 
3063
begin
 
3064
  GetProcedureAddress(_TouchFileTimes, ImageHlpLib, 'TouchFileTimes');
 
3065
  asm
 
3066
        MOV     ESP, EBP
 
3067
        POP     EBP
 
3068
        JMP     [_TouchFileTimes]
 
3069
  end;
 
3070
end;
 
3071
 
 
3072
var
 
3073
  _SplitSymbols: Pointer;
 
3074
 
 
3075
function SplitSymbols;
 
3076
begin
 
3077
  GetProcedureAddress(_SplitSymbols, ImageHlpLib, 'SplitSymbols');
 
3078
  asm
 
3079
        MOV     ESP, EBP
 
3080
        POP     EBP
 
3081
        JMP     [_SplitSymbols]
 
3082
  end;
 
3083
end;
 
3084
 
 
3085
var
 
3086
  _UpdateDebugInfoFile: Pointer;
 
3087
 
 
3088
function UpdateDebugInfoFile;
 
3089
begin
 
3090
  GetProcedureAddress(_UpdateDebugInfoFile, ImageHlpLib, 'UpdateDebugInfoFile');
 
3091
  asm
 
3092
        MOV     ESP, EBP
 
3093
        POP     EBP
 
3094
        JMP     [_UpdateDebugInfoFile]
 
3095
  end;
 
3096
end;
 
3097
 
 
3098
var
 
3099
  _UpdateDebugInfoFileEx: Pointer;
 
3100
 
 
3101
function UpdateDebugInfoFileEx;
 
3102
begin
 
3103
  GetProcedureAddress(_UpdateDebugInfoFileEx, ImageHlpLib, 'UpdateDebugInfoFileEx');
 
3104
  asm
 
3105
        MOV     ESP, EBP
 
3106
        POP     EBP
 
3107
        JMP     [_UpdateDebugInfoFileEx]
 
3108
  end;
 
3109
end;
 
3110
 
 
3111
var
 
3112
  _FindDebugInfoFile: Pointer;
 
3113
 
 
3114
function FindDebugInfoFile;
 
3115
begin
 
3116
  GetProcedureAddress(_FindDebugInfoFile, ImageHlpLib, 'FindDebugInfoFile');
 
3117
  asm
 
3118
        MOV     ESP, EBP
 
3119
        POP     EBP
 
3120
        JMP     [_FindDebugInfoFile]
 
3121
  end;
 
3122
end;
 
3123
 
 
3124
var
 
3125
  _FindDebugInfoFileEx: Pointer;
 
3126
 
 
3127
function FindDebugInfoFileEx;
 
3128
begin
 
3129
  GetProcedureAddress(_FindDebugInfoFileEx, ImageHlpLib, 'FindDebugInfoFileEx');
 
3130
  asm
 
3131
        MOV     ESP, EBP
 
3132
        POP     EBP
 
3133
        JMP     [_FindDebugInfoFileEx]
 
3134
  end;
 
3135
end;
 
3136
 
 
3137
var
 
3138
  _SymFindFileInPath: Pointer;
 
3139
 
 
3140
function SymFindFileInPath;
 
3141
begin
 
3142
  GetProcedureAddress(_SymFindFileInPath, ImageHlpLib, 'SymFindFileInPath');
 
3143
  asm
 
3144
        MOV     ESP, EBP
 
3145
        POP     EBP
 
3146
        JMP     [_SymFindFileInPath]
 
3147
  end;
 
3148
end;
 
3149
 
 
3150
var
 
3151
  _FindExecutableImage: Pointer;
 
3152
 
 
3153
function FindExecutableImage;
 
3154
begin
 
3155
  GetProcedureAddress(_FindExecutableImage, ImageHlpLib, 'FindExecutableImage');
 
3156
  asm
 
3157
        MOV     ESP, EBP
 
3158
        POP     EBP
 
3159
        JMP     [_FindExecutableImage]
 
3160
  end;
 
3161
end;
 
3162
 
 
3163
var
 
3164
  _FindExecutableImageEx: Pointer;
 
3165
 
 
3166
function FindExecutableImageEx;
 
3167
begin
 
3168
  GetProcedureAddress(_FindExecutableImageEx, ImageHlpLib, 'FindExecutableImageEx');
 
3169
  asm
 
3170
        MOV     ESP, EBP
 
3171
        POP     EBP
 
3172
        JMP     [_FindExecutableImageEx]
 
3173
  end;
 
3174
end;
 
3175
 
 
3176
var
 
3177
  _ImageNtHeader: Pointer;
 
3178
 
 
3179
function ImageNtHeader;
 
3180
begin
 
3181
  GetProcedureAddress(_ImageNtHeader, ImageHlpLib, 'ImageNtHeader');
 
3182
  asm
 
3183
        MOV     ESP, EBP
 
3184
        POP     EBP
 
3185
        JMP     [_ImageNtHeader]
 
3186
  end;
 
3187
end;
 
3188
 
 
3189
var
 
3190
  _ImageDirectoryEntryToDataEx: Pointer;
 
3191
 
 
3192
function ImageDirectoryEntryToDataEx;
 
3193
begin
 
3194
  GetProcedureAddress(_ImageDirectoryEntryToDataEx, ImageHlpLib, 'ImageDirectoryEntryToDataEx');
 
3195
  asm
 
3196
        MOV     ESP, EBP
 
3197
        POP     EBP
 
3198
        JMP     [_ImageDirectoryEntryToDataEx]
 
3199
  end;
 
3200
end;
 
3201
 
 
3202
var
 
3203
  _ImageDirectoryEntryToData: Pointer;
 
3204
 
 
3205
function ImageDirectoryEntryToData;
 
3206
begin
 
3207
  GetProcedureAddress(_ImageDirectoryEntryToData, ImageHlpLib, 'ImageDirectoryEntryToData');
 
3208
  asm
 
3209
        MOV     ESP, EBP
 
3210
        POP     EBP
 
3211
        JMP     [_ImageDirectoryEntryToData]
 
3212
  end;
 
3213
end;
 
3214
 
 
3215
var
 
3216
  _ImageRvaToSection: Pointer;
 
3217
 
 
3218
function ImageRvaToSection;
 
3219
begin
 
3220
  GetProcedureAddress(_ImageRvaToSection, ImageHlpLib, 'ImageRvaToSection');
 
3221
  asm
 
3222
        MOV     ESP, EBP
 
3223
        POP     EBP
 
3224
        JMP     [_ImageRvaToSection]
 
3225
  end;
 
3226
end;
 
3227
 
 
3228
var
 
3229
  _ImageRvaToVa: Pointer;
 
3230
 
 
3231
function ImageRvaToVa;
 
3232
begin
 
3233
  GetProcedureAddress(_ImageRvaToVa, ImageHlpLib, 'ImageRvaToVa');
 
3234
  asm
 
3235
        MOV     ESP, EBP
 
3236
        POP     EBP
 
3237
        JMP     [_ImageRvaToVa]
 
3238
  end;
 
3239
end;
 
3240
 
 
3241
var
 
3242
  _MapDebugInformation: Pointer;
 
3243
 
 
3244
function MapDebugInformation;
 
3245
begin
 
3246
  GetProcedureAddress(_MapDebugInformation, ImageHlpLib, 'MapDebugInformation');
 
3247
  asm
 
3248
        MOV     ESP, EBP
 
3249
        POP     EBP
 
3250
        JMP     [_MapDebugInformation]
 
3251
  end;
 
3252
end;
 
3253
 
 
3254
var
 
3255
  _UnmapDebugInformation: Pointer;
 
3256
 
 
3257
function UnmapDebugInformation;
 
3258
begin
 
3259
  GetProcedureAddress(_UnmapDebugInformation, ImageHlpLib, 'UnmapDebugInformation');
 
3260
  asm
 
3261
        MOV     ESP, EBP
 
3262
        POP     EBP
 
3263
        JMP     [_UnmapDebugInformation]
 
3264
  end;
 
3265
end;
 
3266
 
 
3267
var
 
3268
  _SearchTreeForFile: Pointer;
 
3269
 
 
3270
function SearchTreeForFile;
 
3271
begin
 
3272
  GetProcedureAddress(_SearchTreeForFile, ImageHlpLib, 'SearchTreeForFile');
 
3273
  asm
 
3274
        MOV     ESP, EBP
 
3275
        POP     EBP
 
3276
        JMP     [_SearchTreeForFile]
 
3277
  end;
 
3278
end;
 
3279
 
 
3280
var
 
3281
  _EnumDirTree: Pointer;
 
3282
 
 
3283
function EnumDirTree;
 
3284
begin
 
3285
  GetProcedureAddress(_EnumDirTree, ImageHlpLib, 'EnumDirTree');
 
3286
  asm
 
3287
        MOV     ESP, EBP
 
3288
        POP     EBP
 
3289
        JMP     [_EnumDirTree]
 
3290
  end;
 
3291
end;
 
3292
 
 
3293
var
 
3294
  _MakeSureDirectoryPathExists: Pointer;
 
3295
 
 
3296
function MakeSureDirectoryPathExists;
 
3297
begin
 
3298
  GetProcedureAddress(_MakeSureDirectoryPathExists, ImageHlpLib, 'MakeSureDirectoryPathExists');
 
3299
  asm
 
3300
        MOV     ESP, EBP
 
3301
        POP     EBP
 
3302
        JMP     [_MakeSureDirectoryPathExists]
 
3303
  end;
 
3304
end;
 
3305
 
 
3306
var
 
3307
  _UnDecorateSymbolName: Pointer;
 
3308
 
 
3309
function UnDecorateSymbolName;
 
3310
begin
 
3311
  GetProcedureAddress(_UnDecorateSymbolName, ImageHlpLib, 'UnDecorateSymbolName');
 
3312
  asm
 
3313
        MOV     ESP, EBP
 
3314
        POP     EBP
 
3315
        JMP     [_UnDecorateSymbolName]
 
3316
  end;
 
3317
end;
 
3318
 
 
3319
var
 
3320
  _StackWalk64: Pointer;
 
3321
 
 
3322
function StackWalk64;
 
3323
begin
 
3324
  GetProcedureAddress(_StackWalk64, ImageHlpLib, 'StackWalk64');
 
3325
  asm
 
3326
        MOV     ESP, EBP
 
3327
        POP     EBP
 
3328
        JMP     [_StackWalk64]
 
3329
  end;
 
3330
end;
 
3331
 
 
3332
var
 
3333
  _StackWalk: Pointer;
 
3334
 
 
3335
function StackWalk;
 
3336
begin
 
3337
  GetProcedureAddress(_StackWalk, ImageHlpLib, 'StackWalk');
 
3338
  asm
 
3339
        MOV     ESP, EBP
 
3340
        POP     EBP
 
3341
        JMP     [_StackWalk]
 
3342
  end;
 
3343
end;
 
3344
 
 
3345
var
 
3346
  _ImagehlpApiVersion: Pointer;
 
3347
 
 
3348
function ImagehlpApiVersion;
 
3349
begin
 
3350
  GetProcedureAddress(_ImagehlpApiVersion, ImageHlpLib, 'ImagehlpApiVersion');
 
3351
  asm
 
3352
        MOV     ESP, EBP
 
3353
        POP     EBP
 
3354
        JMP     [_ImagehlpApiVersion]
 
3355
  end;
 
3356
end;
 
3357
 
 
3358
var
 
3359
  _ImagehlpApiVersionEx: Pointer;
 
3360
 
 
3361
function ImagehlpApiVersionEx;
 
3362
begin
 
3363
  GetProcedureAddress(_ImagehlpApiVersionEx, ImageHlpLib, 'ImagehlpApiVersionEx');
 
3364
  asm
 
3365
        MOV     ESP, EBP
 
3366
        POP     EBP
 
3367
        JMP     [_ImagehlpApiVersionEx]
 
3368
  end;
 
3369
end;
 
3370
 
 
3371
var
 
3372
  _GetTimestampForLoadedLibrary: Pointer;
 
3373
 
 
3374
function GetTimestampForLoadedLibrary;
 
3375
begin
 
3376
  GetProcedureAddress(_GetTimestampForLoadedLibrary, ImageHlpLib, 'GetTimestampForLoadedLibrary');
 
3377
  asm
 
3378
        MOV     ESP, EBP
 
3379
        POP     EBP
 
3380
        JMP     [_GetTimestampForLoadedLibrary]
 
3381
  end;
 
3382
end;
 
3383
 
 
3384
var
 
3385
  _SymSetOptions: Pointer;
 
3386
 
 
3387
function SymSetOptions;
 
3388
begin
 
3389
  GetProcedureAddress(_SymSetOptions, ImageHlpLib, 'SymSetOptions');
 
3390
  asm
 
3391
        MOV     ESP, EBP
 
3392
        POP     EBP
 
3393
        JMP     [_SymSetOptions]
 
3394
  end;
 
3395
end;
 
3396
 
 
3397
var
 
3398
  _SymGetOptions: Pointer;
 
3399
 
 
3400
function SymGetOptions;
 
3401
begin
 
3402
  GetProcedureAddress(_SymGetOptions, ImageHlpLib, 'SymGetOptions');
 
3403
  asm
 
3404
        MOV     ESP, EBP
 
3405
        POP     EBP
 
3406
        JMP     [_SymGetOptions]
 
3407
  end;
 
3408
end;
 
3409
 
 
3410
var
 
3411
  _SymCleanup: Pointer;
 
3412
 
 
3413
function SymCleanup;
 
3414
begin
 
3415
  GetProcedureAddress(_SymCleanup, ImageHlpLib, 'SymCleanup');
 
3416
  asm
 
3417
        MOV     ESP, EBP
 
3418
        POP     EBP
 
3419
        JMP     [_SymCleanup]
 
3420
  end;
 
3421
end;
 
3422
 
 
3423
var
 
3424
  _SymMatchString: Pointer;
 
3425
 
 
3426
function SymMatchString;
 
3427
begin
 
3428
  GetProcedureAddress(_SymMatchString, ImageHlpLib, 'SymMatchString');
 
3429
  asm
 
3430
        MOV     ESP, EBP
 
3431
        POP     EBP
 
3432
        JMP     [_SymMatchString]
 
3433
  end;
 
3434
end;
 
3435
 
 
3436
var
 
3437
  _SymEnumSourceFiles: Pointer;
 
3438
 
 
3439
function SymEnumSourceFiles;
 
3440
begin
 
3441
  GetProcedureAddress(_SymEnumSourceFiles, ImageHlpLib, 'SymEnumSourceFiles');
 
3442
  asm
 
3443
        MOV     ESP, EBP
 
3444
        POP     EBP
 
3445
        JMP     [_SymEnumSourceFiles]
 
3446
  end;
 
3447
end;
 
3448
 
 
3449
var
 
3450
  _SymEnumerateModules64: Pointer;
 
3451
 
 
3452
function SymEnumerateModules64;
 
3453
begin
 
3454
  GetProcedureAddress(_SymEnumerateModules64, ImageHlpLib, 'SymEnumerateModules64');
 
3455
  asm
 
3456
        MOV     ESP, EBP
 
3457
        POP     EBP
 
3458
        JMP     [_SymEnumerateModules64]
 
3459
  end;
 
3460
end;
 
3461
 
 
3462
var
 
3463
  _SymEnumerateModules: Pointer;
 
3464
 
 
3465
function SymEnumerateModules;
 
3466
begin
 
3467
  GetProcedureAddress(_SymEnumerateModules, ImageHlpLib, 'SymEnumerateModules');
 
3468
  asm
 
3469
        MOV     ESP, EBP
 
3470
        POP     EBP
 
3471
        JMP     [_SymEnumerateModules]
 
3472
  end;
 
3473
end;
 
3474
 
 
3475
var
 
3476
  _SymEnumerateSymbols64: Pointer;
 
3477
 
 
3478
function SymEnumerateSymbols64;
 
3479
begin
 
3480
  GetProcedureAddress(_SymEnumerateSymbols64, ImageHlpLib, 'SymEnumerateSymbols64');
 
3481
  asm
 
3482
        MOV     ESP, EBP
 
3483
        POP     EBP
 
3484
        JMP     [_SymEnumerateSymbols64]
 
3485
  end;
 
3486
end;
 
3487
 
 
3488
var
 
3489
  _SymEnumerateSymbolsW64: Pointer;
 
3490
 
 
3491
function SymEnumerateSymbolsW64;
 
3492
begin
 
3493
  GetProcedureAddress(_SymEnumerateSymbolsW64, ImageHlpLib, 'SymEnumerateSymbolsW64');
 
3494
  asm
 
3495
        MOV     ESP, EBP
 
3496
        POP     EBP
 
3497
        JMP     [_SymEnumerateSymbolsW64]
 
3498
  end;
 
3499
end;
 
3500
 
 
3501
var
 
3502
  _SymEnumerateSymbols: Pointer;
 
3503
 
 
3504
function SymEnumerateSymbols;
 
3505
begin
 
3506
  GetProcedureAddress(_SymEnumerateSymbols, ImageHlpLib, 'SymEnumerateSymbols');
 
3507
  asm
 
3508
        MOV     ESP, EBP
 
3509
        POP     EBP
 
3510
        JMP     [_SymEnumerateSymbols]
 
3511
  end;
 
3512
end;
 
3513
 
 
3514
var
 
3515
  _SymEnumerateSymbolsW: Pointer;
 
3516
 
 
3517
function SymEnumerateSymbolsW;
 
3518
begin
 
3519
  GetProcedureAddress(_SymEnumerateSymbolsW, ImageHlpLib, 'SymEnumerateSymbolsW');
 
3520
  asm
 
3521
        MOV     ESP, EBP
 
3522
        POP     EBP
 
3523
        JMP     [_SymEnumerateSymbolsW]
 
3524
  end;
 
3525
end;
 
3526
 
 
3527
var
 
3528
  _EnumerateLoadedModules64: Pointer;
 
3529
 
 
3530
function EnumerateLoadedModules64;
 
3531
begin
 
3532
  GetProcedureAddress(_EnumerateLoadedModules64, ImageHlpLib, 'EnumerateLoadedModules64');
 
3533
  asm
 
3534
        MOV     ESP, EBP
 
3535
        POP     EBP
 
3536
        JMP     [_EnumerateLoadedModules64]
 
3537
  end;
 
3538
end;
 
3539
 
 
3540
var
 
3541
  _EnumerateLoadedModules: Pointer;
 
3542
 
 
3543
function EnumerateLoadedModules;
 
3544
begin
 
3545
  GetProcedureAddress(_EnumerateLoadedModules, ImageHlpLib, 'EnumerateLoadedModules');
 
3546
  asm
 
3547
        MOV     ESP, EBP
 
3548
        POP     EBP
 
3549
        JMP     [_EnumerateLoadedModules]
 
3550
  end;
 
3551
end;
 
3552
 
 
3553
var
 
3554
  _SymFunctionTableAccess64: Pointer;
 
3555
 
 
3556
function SymFunctionTableAccess64;
 
3557
begin
 
3558
  GetProcedureAddress(_SymFunctionTableAccess64, ImageHlpLib, 'SymFunctionTableAccess64');
 
3559
  asm
 
3560
        MOV     ESP, EBP
 
3561
        POP     EBP
 
3562
        JMP     [_SymFunctionTableAccess64]
 
3563
  end;
 
3564
end;
 
3565
 
 
3566
var
 
3567
  _SymFunctionTableAccess: Pointer;
 
3568
 
 
3569
function SymFunctionTableAccess;
 
3570
begin
 
3571
  GetProcedureAddress(_SymFunctionTableAccess, ImageHlpLib, 'SymFunctionTableAccess');
 
3572
  asm
 
3573
        MOV     ESP, EBP
 
3574
        POP     EBP
 
3575
        JMP     [_SymFunctionTableAccess]
 
3576
  end;
 
3577
end;
 
3578
 
 
3579
var
 
3580
  _SymGetModuleInfo64: Pointer;
 
3581
 
 
3582
function SymGetModuleInfo64;
 
3583
begin
 
3584
  GetProcedureAddress(_SymGetModuleInfo64, ImageHlpLib, 'SymGetModuleInfo64');
 
3585
  asm
 
3586
        MOV     ESP, EBP
 
3587
        POP     EBP
 
3588
        JMP     [_SymGetModuleInfo64]
 
3589
  end;
 
3590
end;
 
3591
 
 
3592
var
 
3593
  _SymGetModuleInfoW64: Pointer;
 
3594
 
 
3595
function SymGetModuleInfoW64;
 
3596
begin
 
3597
  GetProcedureAddress(_SymGetModuleInfoW64, ImageHlpLib, 'SymGetModuleInfoW64');
 
3598
  asm
 
3599
        MOV     ESP, EBP
 
3600
        POP     EBP
 
3601
        JMP     [_SymGetModuleInfoW64]
 
3602
  end;
 
3603
end;
 
3604
 
 
3605
var
 
3606
  _SymGetModuleInfo: Pointer;
 
3607
 
 
3608
function SymGetModuleInfo;
 
3609
begin
 
3610
  GetProcedureAddress(_SymGetModuleInfo, ImageHlpLib, 'SymGetModuleInfo');
 
3611
  asm
 
3612
        MOV     ESP, EBP
 
3613
        POP     EBP
 
3614
        JMP     [_SymGetModuleInfo]
 
3615
  end;
 
3616
end;
 
3617
 
 
3618
var
 
3619
  _SymGetModuleInfoW: Pointer;
 
3620
 
 
3621
function SymGetModuleInfoW;
 
3622
begin
 
3623
  GetProcedureAddress(_SymGetModuleInfoW, ImageHlpLib, 'SymGetModuleInfoW');
 
3624
  asm
 
3625
        MOV     ESP, EBP
 
3626
        POP     EBP
 
3627
        JMP     [_SymGetModuleInfoW]
 
3628
  end;
 
3629
end;
 
3630
 
 
3631
var
 
3632
  _SymGetModuleBase64: Pointer;
 
3633
 
 
3634
function SymGetModuleBase64;
 
3635
begin
 
3636
  GetProcedureAddress(_SymGetModuleBase64, ImageHlpLib, 'SymGetModuleBase64');
 
3637
  asm
 
3638
        MOV     ESP, EBP
 
3639
        POP     EBP
 
3640
        JMP     [_SymGetModuleBase64]
 
3641
  end;
 
3642
end;
 
3643
 
 
3644
var
 
3645
  _SymGetModuleBase: Pointer;
 
3646
 
 
3647
function SymGetModuleBase;
 
3648
begin
 
3649
  GetProcedureAddress(_SymGetModuleBase, ImageHlpLib, 'SymGetModuleBase');
 
3650
  asm
 
3651
        MOV     ESP, EBP
 
3652
        POP     EBP
 
3653
        JMP     [_SymGetModuleBase]
 
3654
  end;
 
3655
end;
 
3656
 
 
3657
var
 
3658
  _SymGetSymNext64: Pointer;
 
3659
 
 
3660
function SymGetSymNext64;
 
3661
begin
 
3662
  GetProcedureAddress(_SymGetSymNext64, ImageHlpLib, 'SymGetSymNext64');
 
3663
  asm
 
3664
        MOV     ESP, EBP
 
3665
        POP     EBP
 
3666
        JMP     [_SymGetSymNext64]
 
3667
  end;
 
3668
end;
 
3669
 
 
3670
var
 
3671
  _SymGetSymNext: Pointer;
 
3672
 
 
3673
function SymGetSymNext;
 
3674
begin
 
3675
  GetProcedureAddress(_SymGetSymNext, ImageHlpLib, 'SymGetSymNext');
 
3676
  asm
 
3677
        MOV     ESP, EBP
 
3678
        POP     EBP
 
3679
        JMP     [_SymGetSymNext]
 
3680
  end;
 
3681
end;
 
3682
 
 
3683
var
 
3684
  _SymGetSymPrev64: Pointer;
 
3685
 
 
3686
function SymGetSymPrev64;
 
3687
begin
 
3688
  GetProcedureAddress(_SymGetSymPrev64, ImageHlpLib, 'SymGetSymPrev64');
 
3689
  asm
 
3690
        MOV     ESP, EBP
 
3691
        POP     EBP
 
3692
        JMP     [_SymGetSymPrev64]
 
3693
  end;
 
3694
end;
 
3695
 
 
3696
var
 
3697
  _SymGetSymPrev: Pointer;
 
3698
 
 
3699
function SymGetSymPrev;
 
3700
begin
 
3701
  GetProcedureAddress(_SymGetSymPrev, ImageHlpLib, 'SymGetSymPrev');
 
3702
  asm
 
3703
        MOV     ESP, EBP
 
3704
        POP     EBP
 
3705
        JMP     [_SymGetSymPrev]
 
3706
  end;
 
3707
end;
 
3708
 
 
3709
var
 
3710
  _SymGetLineFromAddr64: Pointer;
 
3711
 
 
3712
function SymGetLineFromAddr64;
 
3713
begin
 
3714
  GetProcedureAddress(_SymGetLineFromAddr64, ImageHlpLib, 'SymGetLineFromAddr64');
 
3715
  asm
 
3716
        MOV     ESP, EBP
 
3717
        POP     EBP
 
3718
        JMP     [_SymGetLineFromAddr64]
 
3719
  end;
 
3720
end;
 
3721
 
 
3722
var
 
3723
  _SymGetLineFromAddr: Pointer;
 
3724
 
 
3725
function SymGetLineFromAddr;
 
3726
begin
 
3727
  GetProcedureAddress(_SymGetLineFromAddr, ImageHlpLib, 'SymGetLineFromAddr');
 
3728
  asm
 
3729
        MOV     ESP, EBP
 
3730
        POP     EBP
 
3731
        JMP     [_SymGetLineFromAddr]
 
3732
  end;
 
3733
end;
 
3734
 
 
3735
var
 
3736
  _SymGetLineFromName64: Pointer;
 
3737
 
 
3738
function SymGetLineFromName64;
 
3739
begin
 
3740
  GetProcedureAddress(_SymGetLineFromName64, ImageHlpLib, 'SymGetLineFromName64');
 
3741
  asm
 
3742
        MOV     ESP, EBP
 
3743
        POP     EBP
 
3744
        JMP     [_SymGetLineFromName64]
 
3745
  end;
 
3746
end;
 
3747
 
 
3748
var
 
3749
  _SymGetLineFromName: Pointer;
 
3750
 
 
3751
function SymGetLineFromName;
 
3752
begin
 
3753
  GetProcedureAddress(_SymGetLineFromName, ImageHlpLib, 'SymGetLineFromName');
 
3754
  asm
 
3755
        MOV     ESP, EBP
 
3756
        POP     EBP
 
3757
        JMP     [_SymGetLineFromName]
 
3758
  end;
 
3759
end;
 
3760
 
 
3761
var
 
3762
  _SymGetLineNext64: Pointer;
 
3763
 
 
3764
function SymGetLineNext64;
 
3765
begin
 
3766
  GetProcedureAddress(_SymGetLineNext64, ImageHlpLib, 'SymGetLineNext64');
 
3767
  asm
 
3768
        MOV     ESP, EBP
 
3769
        POP     EBP
 
3770
        JMP     [_SymGetLineNext64]
 
3771
  end;
 
3772
end;
 
3773
 
 
3774
var
 
3775
  _SymGetLineNext: Pointer;
 
3776
 
 
3777
function SymGetLineNext;
 
3778
begin
 
3779
  GetProcedureAddress(_SymGetLineNext, ImageHlpLib, 'SymGetLineNext');
 
3780
  asm
 
3781
        MOV     ESP, EBP
 
3782
        POP     EBP
 
3783
        JMP     [_SymGetLineNext]
 
3784
  end;
 
3785
end;
 
3786
 
 
3787
var
 
3788
  _SymGetLinePrev64: Pointer;
 
3789
 
 
3790
function SymGetLinePrev64;
 
3791
begin
 
3792
  GetProcedureAddress(_SymGetLinePrev64, ImageHlpLib, 'SymGetLinePrev64');
 
3793
  asm
 
3794
        MOV     ESP, EBP
 
3795
        POP     EBP
 
3796
        JMP     [_SymGetLinePrev64]
 
3797
  end;
 
3798
end;
 
3799
 
 
3800
var
 
3801
  _SymGetLinePrev: Pointer;
 
3802
 
 
3803
function SymGetLinePrev;
 
3804
begin
 
3805
  GetProcedureAddress(_SymGetLinePrev, ImageHlpLib, 'SymGetLinePrev');
 
3806
  asm
 
3807
        MOV     ESP, EBP
 
3808
        POP     EBP
 
3809
        JMP     [_SymGetLinePrev]
 
3810
  end;
 
3811
end;
 
3812
 
 
3813
var
 
3814
  _SymMatchFileName: Pointer;
 
3815
 
 
3816
function SymMatchFileName;
 
3817
begin
 
3818
  GetProcedureAddress(_SymMatchFileName, ImageHlpLib, 'SymMatchFileName');
 
3819
  asm
 
3820
        MOV     ESP, EBP
 
3821
        POP     EBP
 
3822
        JMP     [_SymMatchFileName]
 
3823
  end;
 
3824
end;
 
3825
 
 
3826
var
 
3827
  _SymInitialize: Pointer;
 
3828
 
 
3829
function SymInitialize;
 
3830
begin
 
3831
  GetProcedureAddress(_SymInitialize, ImageHlpLib, 'SymInitialize');
 
3832
  asm
 
3833
        MOV     ESP, EBP
 
3834
        POP     EBP
 
3835
        JMP     [_SymInitialize]
 
3836
  end;
 
3837
end;
 
3838
 
 
3839
var
 
3840
  _SymGetSearchPath: Pointer;
 
3841
 
 
3842
function SymGetSearchPath;
 
3843
begin
 
3844
  GetProcedureAddress(_SymGetSearchPath, ImageHlpLib, 'SymGetSearchPath');
 
3845
  asm
 
3846
        MOV     ESP, EBP
 
3847
        POP     EBP
 
3848
        JMP     [_SymGetSearchPath]
 
3849
  end;
 
3850
end;
 
3851
 
 
3852
var
 
3853
  _SymSetSearchPath: Pointer;
 
3854
 
 
3855
function SymSetSearchPath;
 
3856
begin
 
3857
  GetProcedureAddress(_SymSetSearchPath, ImageHlpLib, 'SymSetSearchPath');
 
3858
  asm
 
3859
        MOV     ESP, EBP
 
3860
        POP     EBP
 
3861
        JMP     [_SymSetSearchPath]
 
3862
  end;
 
3863
end;
 
3864
 
 
3865
var
 
3866
  _SymLoadModuleEx: Pointer;
 
3867
 
 
3868
function SymLoadModuleEx;
 
3869
begin
 
3870
  GetProcedureAddress(_SymLoadModuleEx, ImageHlpLib, 'SymLoadModuleEx');
 
3871
  asm
 
3872
        MOV     ESP, EBP
 
3873
        POP     EBP
 
3874
        JMP     [_SymLoadModuleEx]
 
3875
  end;
 
3876
end;
 
3877
 
 
3878
var
 
3879
  _SymLoadModule64: Pointer;
 
3880
 
 
3881
function SymLoadModule64;
 
3882
begin
 
3883
  GetProcedureAddress(_SymLoadModule64, ImageHlpLib, 'SymLoadModule64');
 
3884
  asm
 
3885
        MOV     ESP, EBP
 
3886
        POP     EBP
 
3887
        JMP     [_SymLoadModule64]
 
3888
  end;
 
3889
end;
 
3890
 
 
3891
var
 
3892
  _SymLoadModule: Pointer;
 
3893
 
 
3894
function SymLoadModule;
 
3895
begin
 
3896
  GetProcedureAddress(_SymLoadModule, ImageHlpLib, 'SymLoadModule');
 
3897
  asm
 
3898
        MOV     ESP, EBP
 
3899
        POP     EBP
 
3900
        JMP     [_SymLoadModule]
 
3901
  end;
 
3902
end;
 
3903
 
 
3904
var
 
3905
  _SymUnloadModule64: Pointer;
 
3906
 
 
3907
function SymUnloadModule64;
 
3908
begin
 
3909
  GetProcedureAddress(_SymUnloadModule64, ImageHlpLib, 'SymUnloadModule64');
 
3910
  asm
 
3911
        MOV     ESP, EBP
 
3912
        POP     EBP
 
3913
        JMP     [_SymUnloadModule64]
 
3914
  end;
 
3915
end;
 
3916
 
 
3917
var
 
3918
  _SymUnloadModule: Pointer;
 
3919
 
 
3920
function SymUnloadModule;
 
3921
begin
 
3922
  GetProcedureAddress(_SymUnloadModule, ImageHlpLib, 'SymUnloadModule');
 
3923
  asm
 
3924
        MOV     ESP, EBP
 
3925
        POP     EBP
 
3926
        JMP     [_SymUnloadModule]
 
3927
  end;
 
3928
end;
 
3929
 
 
3930
var
 
3931
  _SymUnDName64: Pointer;
 
3932
 
 
3933
function SymUnDName64;
 
3934
begin
 
3935
  GetProcedureAddress(_SymUnDName64, ImageHlpLib, 'SymUnDName64');
 
3936
  asm
 
3937
        MOV     ESP, EBP
 
3938
        POP     EBP
 
3939
        JMP     [_SymUnDName64]
 
3940
  end;
 
3941
end;
 
3942
 
 
3943
var
 
3944
  _SymUnDName: Pointer;
 
3945
 
 
3946
function SymUnDName;
 
3947
begin
 
3948
  GetProcedureAddress(_SymUnDName, ImageHlpLib, 'SymUnDName');
 
3949
  asm
 
3950
        MOV     ESP, EBP
 
3951
        POP     EBP
 
3952
        JMP     [_SymUnDName]
 
3953
  end;
 
3954
end;
 
3955
 
 
3956
var
 
3957
  _SymRegisterCallback64: Pointer;
 
3958
 
 
3959
function SymRegisterCallback64;
 
3960
begin
 
3961
  GetProcedureAddress(_SymRegisterCallback64, ImageHlpLib, 'SymRegisterCallback64');
 
3962
  asm
 
3963
        MOV     ESP, EBP
 
3964
        POP     EBP
 
3965
        JMP     [_SymRegisterCallback64]
 
3966
  end;
 
3967
end;
 
3968
 
 
3969
var
 
3970
  _SymRegFuncEntryCallback64: Pointer;
 
3971
 
 
3972
function SymRegisterFunctionEntryCallback64;
 
3973
begin
 
3974
  GetProcedureAddress(_SymRegFuncEntryCallback64, ImageHlpLib, 'SymRegisterFunctionEntryCallback64');
 
3975
  asm
 
3976
        MOV     ESP, EBP
 
3977
        POP     EBP
 
3978
        JMP     [_SymRegFuncEntryCallback64]
 
3979
  end;
 
3980
end;
 
3981
 
 
3982
var
 
3983
  _SymRegisterCallback: Pointer;
 
3984
 
 
3985
function SymRegisterCallback;
 
3986
begin
 
3987
  GetProcedureAddress(_SymRegisterCallback, ImageHlpLib, 'SymRegisterCallback');
 
3988
  asm
 
3989
        MOV     ESP, EBP
 
3990
        POP     EBP
 
3991
        JMP     [_SymRegisterCallback]
 
3992
  end;
 
3993
end;
 
3994
 
 
3995
var
 
3996
  _SymRegisterFuncEntryCallback: Pointer;
 
3997
 
 
3998
function SymRegisterFunctionEntryCallback;
 
3999
begin
 
4000
  GetProcedureAddress(_SymRegisterFuncEntryCallback, ImageHlpLib, 'SymRegisterFunctionEntryCallback');
 
4001
  asm
 
4002
        MOV     ESP, EBP
 
4003
        POP     EBP
 
4004
        JMP     [_SymRegisterFuncEntryCallback]
 
4005
  end;
 
4006
end;
 
4007
 
 
4008
var
 
4009
  _SymSetContext: Pointer;
 
4010
 
 
4011
function SymSetContext;
 
4012
begin
 
4013
  GetProcedureAddress(_SymSetContext, ImageHlpLib, 'SymSetContext');
 
4014
  asm
 
4015
        MOV     ESP, EBP
 
4016
        POP     EBP
 
4017
        JMP     [_SymSetContext]
 
4018
  end;
 
4019
end;
 
4020
 
 
4021
var
 
4022
  _SymFromAddr: Pointer;
 
4023
 
 
4024
function SymFromAddr;
 
4025
begin
 
4026
  GetProcedureAddress(_SymFromAddr, ImageHlpLib, 'SymFromAddr');
 
4027
  asm
 
4028
        MOV     ESP, EBP
 
4029
        POP     EBP
 
4030
        JMP     [_SymFromAddr]
 
4031
  end;
 
4032
end;
 
4033
 
 
4034
var
 
4035
  _SymFromName: Pointer;
 
4036
 
 
4037
function SymFromName;
 
4038
begin
 
4039
  GetProcedureAddress(_SymFromName, ImageHlpLib, 'SymFromName');
 
4040
  asm
 
4041
        MOV     ESP, EBP
 
4042
        POP     EBP
 
4043
        JMP     [_SymFromName]
 
4044
  end;
 
4045
end;
 
4046
 
 
4047
var
 
4048
  _SymEnumSymbolsForAddr: Pointer;
 
4049
 
 
4050
function SymEnumSymbolsForAddr;
 
4051
begin
 
4052
  GetProcedureAddress(_SymEnumSymbolsForAddr, ImageHlpLib, 'SymEnumSymbolsForAddr');
 
4053
  asm
 
4054
        MOV     ESP, EBP
 
4055
        POP     EBP
 
4056
        JMP     [_SymEnumSymbolsForAddr]
 
4057
  end;
 
4058
end;
 
4059
 
 
4060
var
 
4061
  _SymEnumSymbols: Pointer;
 
4062
 
 
4063
function SymEnumSymbols;
 
4064
begin
 
4065
  GetProcedureAddress(_SymEnumSymbols, ImageHlpLib, 'SymEnumSymbols');
 
4066
  asm
 
4067
        MOV     ESP, EBP
 
4068
        POP     EBP
 
4069
        JMP     [_SymEnumSymbols]
 
4070
  end;
 
4071
end;
 
4072
 
 
4073
var
 
4074
  _SymGetTypeInfo: Pointer;
 
4075
 
 
4076
function SymGetTypeInfo;
 
4077
begin
 
4078
  GetProcedureAddress(_SymGetTypeInfo, ImageHlpLib, 'SymGetTypeInfo');
 
4079
  asm
 
4080
        MOV     ESP, EBP
 
4081
        POP     EBP
 
4082
        JMP     [_SymGetTypeInfo]
 
4083
  end;
 
4084
end;
 
4085
 
 
4086
var
 
4087
  _SymEnumTypes: Pointer;
 
4088
 
 
4089
function SymEnumTypes;
 
4090
begin
 
4091
  GetProcedureAddress(_SymEnumTypes, ImageHlpLib, 'SymEnumTypes');
 
4092
  asm
 
4093
        MOV     ESP, EBP
 
4094
        POP     EBP
 
4095
        JMP     [_SymEnumTypes]
 
4096
  end;
 
4097
end;
 
4098
 
 
4099
var
 
4100
  _SymGetTypeFromName: Pointer;
 
4101
 
 
4102
function SymGetTypeFromName;
 
4103
begin
 
4104
  GetProcedureAddress(_SymGetTypeFromName, ImageHlpLib, 'SymGetTypeFromName');
 
4105
  asm
 
4106
        MOV     ESP, EBP
 
4107
        POP     EBP
 
4108
        JMP     [_SymGetTypeFromName]
 
4109
  end;
 
4110
end;
 
4111
 
 
4112
var
 
4113
  _SymAddSymbol: Pointer;
 
4114
 
 
4115
function SymAddSymbol;
 
4116
begin
 
4117
  GetProcedureAddress(_SymAddSymbol, ImageHlpLib, 'SymAddSymbol');
 
4118
  asm
 
4119
        MOV     ESP, EBP
 
4120
        POP     EBP
 
4121
        JMP     [_SymAddSymbol]
 
4122
  end;
 
4123
end;
 
4124
 
 
4125
var
 
4126
  _SymDeleteSymbol: Pointer;
 
4127
 
 
4128
function SymDeleteSymbol;
 
4129
begin
 
4130
  GetProcedureAddress(_SymDeleteSymbol, ImageHlpLib, 'SymDeleteSymbol');
 
4131
  asm
 
4132
        MOV     ESP, EBP
 
4133
        POP     EBP
 
4134
        JMP     [_SymDeleteSymbol]
 
4135
  end;
 
4136
end;
 
4137
 
 
4138
var
 
4139
  _DbgHelpCreateUserDump: Pointer;
 
4140
 
 
4141
function DbgHelpCreateUserDump;
 
4142
begin
 
4143
  GetProcedureAddress(_DbgHelpCreateUserDump, ImageHlpLib, 'DbgHelpCreateUserDump');
 
4144
  asm
 
4145
        MOV     ESP, EBP
 
4146
        POP     EBP
 
4147
        JMP     [_DbgHelpCreateUserDump]
 
4148
  end;
 
4149
end;
 
4150
 
 
4151
var
 
4152
  _DbgHelpCreateUserDumpW: Pointer;
 
4153
 
 
4154
function DbgHelpCreateUserDumpW;
 
4155
begin
 
4156
  GetProcedureAddress(_DbgHelpCreateUserDumpW, ImageHlpLib, 'DbgHelpCreateUserDumpW');
 
4157
  asm
 
4158
        MOV     ESP, EBP
 
4159
        POP     EBP
 
4160
        JMP     [_DbgHelpCreateUserDumpW]
 
4161
  end;
 
4162
end;
 
4163
 
 
4164
var
 
4165
  _SymGetSymFromAddr64: Pointer;
 
4166
 
 
4167
function SymGetSymFromAddr64;
 
4168
begin
 
4169
  GetProcedureAddress(_SymGetSymFromAddr64, ImageHlpLib, 'SymGetSymFromAddr64');
 
4170
  asm
 
4171
        MOV     ESP, EBP
 
4172
        POP     EBP
 
4173
        JMP     [_SymGetSymFromAddr64]
 
4174
  end;
 
4175
end;
 
4176
 
 
4177
var
 
4178
  _SymGetSymFromAddr: Pointer;
 
4179
 
 
4180
function SymGetSymFromAddr;
 
4181
begin
 
4182
  GetProcedureAddress(_SymGetSymFromAddr, ImageHlpLib, 'SymGetSymFromAddr');
 
4183
  asm
 
4184
        MOV     ESP, EBP
 
4185
        POP     EBP
 
4186
        JMP     [_SymGetSymFromAddr]
 
4187
  end;
 
4188
end;
 
4189
 
 
4190
var
 
4191
  _SymGetSymFromName64: Pointer;
 
4192
 
 
4193
function SymGetSymFromName64;
 
4194
begin
 
4195
  GetProcedureAddress(_SymGetSymFromName64, ImageHlpLib, 'SymGetSymFromName64');
 
4196
  asm
 
4197
        MOV     ESP, EBP
 
4198
        POP     EBP
 
4199
        JMP     [_SymGetSymFromName64]
 
4200
  end;
 
4201
end;
 
4202
 
 
4203
var
 
4204
  _SymGetSymFromName: Pointer;
 
4205
 
 
4206
function SymGetSymFromName;
 
4207
begin
 
4208
  GetProcedureAddress(_SymGetSymFromName, ImageHlpLib, 'SymGetSymFromName');
 
4209
  asm
 
4210
        MOV     ESP, EBP
 
4211
        POP     EBP
 
4212
        JMP     [_SymGetSymFromName]
 
4213
  end;
 
4214
end;
 
4215
 
 
4216
var
 
4217
  _FindFileInPath: Pointer;
 
4218
 
 
4219
function FindFileInPath;
 
4220
begin
 
4221
  GetProcedureAddress(_FindFileInPath, ImageHlpLib, 'FindFileInPath');
 
4222
  asm
 
4223
        MOV     ESP, EBP
 
4224
        POP     EBP
 
4225
        JMP     [_FindFileInPath]
 
4226
  end;
 
4227
end;
 
4228
 
 
4229
var
 
4230
  _FindFileInSearchPath: Pointer;
 
4231
 
 
4232
function FindFileInSearchPath;
 
4233
begin
 
4234
  GetProcedureAddress(_FindFileInSearchPath, ImageHlpLib, 'FindFileInSearchPath');
 
4235
  asm
 
4236
        MOV     ESP, EBP
 
4237
        POP     EBP
 
4238
        JMP     [_FindFileInSearchPath]
 
4239
  end;
 
4240
end;
 
4241
 
 
4242
var
 
4243
  _SymEnumSym: Pointer;
 
4244
 
 
4245
function SymEnumSym;
 
4246
begin
 
4247
  GetProcedureAddress(_SymEnumSym, ImageHlpLib, 'SymEnumSym');
 
4248
  asm
 
4249
        MOV     ESP, EBP
 
4250
        POP     EBP
 
4251
        JMP     [_SymEnumSym]
 
4252
  end;
 
4253
end;
 
4254
 
 
4255
var
 
4256
  _MiniDumpWriteDump: Pointer;
 
4257
 
 
4258
function MiniDumpWriteDump;
 
4259
begin
 
4260
  GetProcedureAddress(_MiniDumpWriteDump, ImageHlpLib, 'MiniDumpWriteDump');
 
4261
  asm
 
4262
        MOV     ESP, EBP
 
4263
        POP     EBP
 
4264
        JMP     [_MiniDumpWriteDump]
 
4265
  end;
 
4266
end;
 
4267
 
 
4268
var
 
4269
  _MiniDumpReadDumpStream: Pointer;
 
4270
 
 
4271
function MiniDumpReadDumpStream;
 
4272
begin
 
4273
  GetProcedureAddress(_MiniDumpReadDumpStream, ImageHlpLib, 'MiniDumpReadDumpStream');
 
4274
  asm
 
4275
        MOV     ESP, EBP
 
4276
        POP     EBP
 
4277
        JMP     [_MiniDumpReadDumpStream]
 
4278
  end;
 
4279
end;
 
4280
 
 
4281
{$ELSE}
 
4282
 
 
4283
function BindImage; external ImageHlpLib name 'BindImage';
 
4284
function BindImageEx; external ImageHlpLib name 'BindImageEx';
 
4285
function ReBaseImage; external ImageHlpLib name 'ReBaseImage';
 
4286
function ReBaseImage64; external ImageHlpLib name 'ReBaseImage64';
 
4287
function CheckSumMappedFile; external ImageHlpLib name 'CheckSumMappedFile';
 
4288
function MapFileAndCheckSumA; external ImageHlpLib name 'MapFileAndCheckSumA';
 
4289
function MapFileAndCheckSumW; external ImageHlpLib name 'MapFileAndCheckSumW';
 
4290
function MapFileAndCheckSum; external ImageHlpLib name 'MapFileAndCheckSum' + AWSuffix;
 
4291
function GetImageConfigInformation; external ImageHlpLib name 'GetImageConfigInformation';
 
4292
function GetImageUnusedHeaderBytes; external ImageHlpLib name 'GetImageUnusedHeaderBytes';
 
4293
function SetImageConfigInformation; external ImageHlpLib name 'SetImageConfigInformation';
 
4294
function ImageGetDigestStream; external ImageHlpLib name 'ImageGetDigestStream';
 
4295
function ImageAddCertificate; external ImageHlpLib name 'ImageAddCertificate';
 
4296
function ImageRemoveCertificate; external ImageHlpLib name 'ImageRemoveCertificate';
 
4297
function ImageEnumerateCertificates; external ImageHlpLib name 'ImageEnumerateCertificates';
 
4298
function ImageGetCertificateData; external ImageHlpLib name 'ImageGetCertificateData';
 
4299
function ImageGetCertificateHeader; external ImageHlpLib name 'ImageGetCertificateHeader';
 
4300
function ImageLoad; external ImageHlpLib name 'ImageLoad';
 
4301
function ImageUnload; external ImageHlpLib name 'ImageUnload';
 
4302
function MapAndLoad; external ImageHlpLib name 'MapAndLoad';
 
4303
function UnMapAndLoad; external ImageHlpLib name 'UnMapAndLoad';
 
4304
function TouchFileTimes; external ImageHlpLib name 'TouchFileTimes';
 
4305
function SplitSymbols; external ImageHlpLib name 'SplitSymbols';
 
4306
function UpdateDebugInfoFile; external ImageHlpLib name 'UpdateDebugInfoFile';
 
4307
function UpdateDebugInfoFileEx; external ImageHlpLib name 'UpdateDebugInfoFileEx';
 
4308
function FindDebugInfoFile; external ImageHlpLib name 'FindDebugInfoFile';
 
4309
function FindDebugInfoFileEx; external ImageHlpLib name 'FindDebugInfoFileEx';
 
4310
function SymFindFileInPath; external ImageHlpLib name 'SymFindFileInPath';
 
4311
function FindExecutableImage; external ImageHlpLib name 'FindExecutableImage';
 
4312
function FindExecutableImageEx; external ImageHlpLib name 'FindExecutableImageEx';
 
4313
function ImageNtHeader; external ImageHlpLib name 'ImageNtHeader';
 
4314
function ImageDirectoryEntryToDataEx; external ImageHlpLib name 'ImageDirectoryEntryToDataEx';
 
4315
function ImageDirectoryEntryToData; external ImageHlpLib name 'ImageDirectoryEntryToData';
 
4316
function ImageRvaToSection; external ImageHlpLib name 'ImageRvaToSection';
 
4317
function ImageRvaToVa; external ImageHlpLib name 'ImageRvaToVa';
 
4318
function MapDebugInformation; external ImageHlpLib name 'MapDebugInformation';
 
4319
function UnmapDebugInformation; external ImageHlpLib name 'UnmapDebugInformation';
 
4320
function SearchTreeForFile; external ImageHlpLib name 'SearchTreeForFile';
 
4321
function EnumDirTree; external ImageHlpLib name 'EnumDirTree';
 
4322
function MakeSureDirectoryPathExists; external ImageHlpLib name 'MakeSureDirectoryPathExists';
 
4323
function UnDecorateSymbolName; external ImageHlpLib name 'UnDecorateSymbolName';
 
4324
function StackWalk64; external ImageHlpLib name 'StackWalk64';
 
4325
function StackWalk; external ImageHlpLib name 'StackWalk';
 
4326
function ImagehlpApiVersion; external ImageHlpLib name 'ImagehlpApiVersion';
 
4327
function ImagehlpApiVersionEx; external ImageHlpLib name 'ImagehlpApiVersionEx';
 
4328
function GetTimestampForLoadedLibrary; external ImageHlpLib name 'GetTimestampForLoadedLibrary';
 
4329
function SymSetOptions; external ImageHlpLib name 'SymSetOptions';
 
4330
function SymGetOptions; external ImageHlpLib name 'SymGetOptions';
 
4331
function SymCleanup; external ImageHlpLib name 'SymCleanup';
 
4332
function SymMatchString; external ImageHlpLib name 'SymMatchString';
 
4333
function SymEnumSourceFiles; external ImageHlpLib name 'SymEnumSourceFiles';
 
4334
function SymEnumerateModules64; external ImageHlpLib name 'SymEnumerateModules64';
 
4335
function SymEnumerateModules; external ImageHlpLib name 'SymEnumerateModules';
 
4336
function SymEnumerateSymbols64; external ImageHlpLib name 'SymEnumerateSymbols64';
 
4337
function SymEnumerateSymbolsW64; external ImageHlpLib name 'SymEnumerateSymbolsW64';
 
4338
function SymEnumerateSymbols; external ImageHlpLib name 'SymEnumerateSymbols';
 
4339
function SymEnumerateSymbolsW; external ImageHlpLib name 'SymEnumerateSymbolsW';
 
4340
function EnumerateLoadedModules64; external ImageHlpLib name 'EnumerateLoadedModules64';
 
4341
function EnumerateLoadedModules; external ImageHlpLib name 'EnumerateLoadedModules';
 
4342
function SymFunctionTableAccess64; external ImageHlpLib name 'SymFunctionTableAccess64';
 
4343
function SymFunctionTableAccess; external ImageHlpLib name 'SymFunctionTableAccess';
 
4344
function SymGetModuleInfo64; external ImageHlpLib name 'SymGetModuleInfo64';
 
4345
function SymGetModuleInfoW64; external ImageHlpLib name 'SymGetModuleInfoW64';
 
4346
function SymGetModuleInfo; external ImageHlpLib name 'SymGetModuleInfo';
 
4347
function SymGetModuleInfoW; external ImageHlpLib name 'SymGetModuleInfoW';
 
4348
function SymGetModuleBase64; external ImageHlpLib name 'SymGetModuleBase64';
 
4349
function SymGetModuleBase; external ImageHlpLib name 'SymGetModuleBase';
 
4350
function SymGetSymNext64; external ImageHlpLib name 'SymGetSymNext64';
 
4351
function SymGetSymNext; external ImageHlpLib name 'SymGetSymNext';
 
4352
function SymGetSymPrev64; external ImageHlpLib name 'SymGetSymPrev64';
 
4353
function SymGetSymPrev; external ImageHlpLib name 'SymGetSymPrev';
 
4354
function SymGetLineFromAddr64; external ImageHlpLib name 'SymGetLineFromAddr64';
 
4355
function SymGetLineFromAddr; external ImageHlpLib name 'SymGetLineFromAddr';
 
4356
function SymGetLineFromName64; external ImageHlpLib name 'SymGetLineFromName64';
 
4357
function SymGetLineFromName; external ImageHlpLib name 'SymGetLineFromName';
 
4358
function SymGetLineNext64; external ImageHlpLib name 'SymGetLineNext64';
 
4359
function SymGetLineNext; external ImageHlpLib name 'SymGetLineNext';
 
4360
function SymGetLinePrev64; external ImageHlpLib name 'SymGetLinePrev64';
 
4361
function SymGetLinePrev; external ImageHlpLib name 'SymGetLinePrev';
 
4362
function SymMatchFileName; external ImageHlpLib name 'SymMatchFileName';
 
4363
function SymInitialize; external ImageHlpLib name 'SymInitialize';
 
4364
function SymGetSearchPath; external ImageHlpLib name 'SymGetSearchPath';
 
4365
function SymSetSearchPath; external ImageHlpLib name 'SymSetSearchPath';
 
4366
function SymLoadModuleEx; external ImageHlpLib name 'SymLoadModuleEx';
 
4367
function SymLoadModule64; external ImageHlpLib name 'SymLoadModule64';
 
4368
function SymLoadModule; external ImageHlpLib name 'SymLoadModule';
 
4369
function SymUnloadModule64; external ImageHlpLib name 'SymUnloadModule64';
 
4370
function SymUnloadModule; external ImageHlpLib name 'SymUnloadModule';
 
4371
function SymUnDName64; external ImageHlpLib name 'SymUnDName64';
 
4372
function SymUnDName; external ImageHlpLib name 'SymUnDName';
 
4373
function SymRegisterCallback64; external ImageHlpLib name 'SymRegisterCallback64';
 
4374
function SymRegisterFunctionEntryCallback64; external ImageHlpLib name 'SymRegisterFunctionEntryCallback64';
 
4375
function SymRegisterCallback; external ImageHlpLib name 'SymRegisterCallback';
 
4376
function SymRegisterFunctionEntryCallback; external ImageHlpLib name 'SymRegisterFunctionEntryCallback';
 
4377
function SymSetContext; external ImageHlpLib name 'SymSetContext';
 
4378
function SymFromAddr; external ImageHlpLib name 'SymFromAddr';
 
4379
function SymFromName; external ImageHlpLib name 'SymFromName';
 
4380
function SymEnumSymbolsForAddr; external ImageHlpLib name 'SymEnumSymbolsForAddr';
 
4381
function SymEnumSymbols; external ImageHlpLib name 'SymEnumSymbols';
 
4382
function SymGetTypeInfo; external ImageHlpLib name 'SymGetTypeInfo';
 
4383
function SymEnumTypes; external ImageHlpLib name 'SymEnumTypes';
 
4384
function SymGetTypeFromName; external ImageHlpLib name 'SymGetTypeFromName';
 
4385
function SymAddSymbol; external ImageHlpLib name 'SymAddSymbol';
 
4386
function SymDeleteSymbol; external ImageHlpLib name 'SymDeleteSymbol';
 
4387
function DbgHelpCreateUserDump; external ImageHlpLib name 'DbgHelpCreateUserDump';
 
4388
function DbgHelpCreateUserDumpW; external ImageHlpLib name 'DbgHelpCreateUserDumpW';
 
4389
function SymGetSymFromAddr64; external ImageHlpLib name 'SymGetSymFromAddr64';
 
4390
function SymGetSymFromAddr; external ImageHlpLib name 'SymGetSymFromAddr';
 
4391
function SymGetSymFromName64; external ImageHlpLib name 'SymGetSymFromName64';
 
4392
function SymGetSymFromName; external ImageHlpLib name 'SymGetSymFromName';
 
4393
function FindFileInPath; external ImageHlpLib name 'FindFileInPath';
 
4394
function FindFileInSearchPath; external ImageHlpLib name 'FindFileInSearchPath';
 
4395
function SymEnumSym; external ImageHlpLib name 'SymEnumSym';
 
4396
function MiniDumpWriteDump; external ImageHlpLib name 'MiniDumpWriteDump';
 
4397
function MiniDumpReadDumpStream; external ImageHlpLib name 'MiniDumpReadDumpStream';
 
4398
 
 
4399
{$ENDIF DYNAMIC_LINK}
 
4400
 
 
4401
end.