2 * Declarations for IMAGEHLP
4 * Copyright (C) 1998 Patrik Stridvall
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #ifndef __WINE_IMAGEHLP_H
22 #define __WINE_IMAGEHLP_H
26 #endif /* defined(__cplusplus) */
28 #define API_VERSION_NUMBER 7 /* 7 is the default */
30 /***********************************************************************
34 typedef PVOID DIGEST_HANDLE
;
36 /***********************************************************************
40 typedef enum _IMAGEHLP_STATUS_REASON
{
44 BindImportModuleFailed
,
45 BindImportProcedureFailed
,
51 BindExpandFileHeaders
,
53 BindMismatchedSymbols
,
55 } IMAGEHLP_STATUS_REASON
;
57 #define BIND_NO_BOUND_IMPORTS 0x00000001
58 #define BIND_NO_UPDATE 0x00000002
59 #define BIND_ALL_IMAGES 0x00000004
60 #define BIND_CACHE_IMPORT_DLLS 0x00000008
62 #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 0x01
63 #define CERT_PE_IMAGE_DIGEST_RESOURCES 0x02
64 #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04
65 #define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 0x08
67 #define CERT_SECTION_TYPE_ANY 0xFF
69 #define WIN_CERT_REVISION_1_0 0x0100
70 #define WIN_CERT_REVISION_2_0 0x0200
72 #define WIN_CERT_TYPE_X509 0x0001 /* X.509 Certificate */
73 #define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */
74 #define WIN_CERT_TYPE_RESERVED_1 0x0003 /* Reserved */
76 #define SPLITSYM_REMOVE_PRIVATE 0x00000001
77 #define SPLITSYM_EXTRACT_ALL 0x00000002
78 #define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004
83 #define FRAME_NONFPO 3
85 #define CHECKSUM_SUCCESS 0
86 #define CHECKSUM_OPEN_FAILURE 1
87 #define CHECKSUM_MAP_FAILURE 2
88 #define CHECKSUM_MAPVIEW_FAILURE 3
89 #define CHECKSUM_UNICODE_FAILURE 4
91 typedef enum _ADRESS_MODE
{
98 #define SYMOPT_CASE_INSENSITIVE 0x00000001
99 #define SYMOPT_UNDNAME 0x00000002
100 #define SYMOPT_DEFERRED_LOADS 0x00000004
101 #define SYMOPT_NO_CPP 0x00000008
102 #define SYMOPT_LOAD_LINES 0x00000010
103 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020
105 #define SYMF_OMAP_GENERATED 0x00000001
106 #define SYMF_OMAP_MODIFIED 0x00000002
115 SymSym
/* .sym file */
118 #define UNDNAME_COMPLETE 0x0000
119 #define UNDNAME_NO_LEADING_UNDERSCORES 0x0001
120 #define UNDNAME_NO_MS_KEYWORDS 0x0002
121 #define UNDNAME_NO_FUNCTION_RETURNS 0x0004
122 #define UNDNAME_NO_ALLOCATION_MODEL 0x0008
123 #define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010
124 #define UNDNAME_NO_MS_THISTYPE 0x0020
125 #define UNDNAME_NO_CV_THISTYPE 0x0040
126 #define UNDNAME_NO_THISTYPE 0x0060
127 #define UNDNAME_NO_ACCESS_SPECIFIERS 0x0080
128 #define UNDNAME_NO_THROW_SIGNATURES 0x0100
129 #define UNDNAME_NO_MEMBER_TYPE 0x0200
130 #define UNDNAME_NO_RETURN_UDT_MODEL 0x0400
131 #define UNDNAME_32_BIT_DECODE 0x0800
132 #define UNDNAME_NAME_ONLY 0x1000
133 #define UNDNAME_NO_ARGUMENTS 0x2000
134 #define UNDNAME_NO_SPECIAL_SYMS 0x4000
136 #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
137 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
138 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
139 #define CBA_SYMBOLS_UNLOADED 0x00000004
140 #define CBA_DUPLICATE_SYMBOL 0x00000005
142 /***********************************************************************
146 typedef struct _LOADED_IMAGE
{
149 PUCHAR MappedAddress
;
150 PIMAGE_NT_HEADERS FileHeader
;
151 PIMAGE_SECTION_HEADER LastRvaSection
;
152 ULONG NumberOfSections
;
153 PIMAGE_SECTION_HEADER Sections
;
154 ULONG Characteristics
;
155 BOOLEAN fSystemImage
;
159 } LOADED_IMAGE
, *PLOADED_IMAGE
;
161 typedef struct _WIN_CERTIFICATE
{
163 WORD wRevision
; /* WIN_CERT_REVISON_xxx */
164 WORD wCertificateType
; /* WIN_CERT_TYPE_xxx */
165 BYTE bCertificate
[ANYSIZE_ARRAY
];
166 } WIN_CERTIFICATE
, *PWIN_CERTIFICATE
;
168 typedef struct _API_VERSION
{
173 } API_VERSION
, *LPAPI_VERSION
;
175 typedef struct _IMAGE_DEBUG_INFORMATION
{
180 USHORT Characteristics
;
185 DWORD NumberOfSections
;
186 PIMAGE_SECTION_HEADER Sections
;
188 DWORD ExportedNamesSize
;
191 DWORD NumberOfFunctionTableEntries
;
192 PIMAGE_FUNCTION_ENTRY FunctionTableEntries
;
193 DWORD LowestFunctionStartingAddress
;
194 DWORD HighestFunctionEndingAddress
;
196 DWORD NumberOfFpoTableEntries
;
197 PFPO_DATA FpoTableEntries
;
199 DWORD SizeOfCoffSymbols
;
200 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols
;
202 DWORD SizeOfCodeViewSymbols
;
203 PVOID CodeViewSymbols
;
212 PIMAGE_DEBUG_DIRECTORY DebugDirectory
;
213 DWORD NumberOfDebugDirectories
;
216 } IMAGE_DEBUG_INFORMATION
, *PIMAGE_DEBUG_INFORMATION
;
218 typedef struct _ADDRESS
{
222 } ADDRESS
, *PADDRESS
;
224 typedef struct _KDHELP
{
226 DWORD ThCallbackStack
;
229 DWORD KiCallUserMode
;
230 DWORD KeUserCallbackDispatcher
;
231 DWORD SystemRangeStart
;
234 typedef struct _STACKFRAME
{
239 PVOID FuncTableEntry
;
245 } STACKFRAME
, *LPSTACKFRAME
;
247 typedef struct _IMAGEHLP_SYMBOL
{
253 CHAR Name
[ANYSIZE_ARRAY
];
254 } IMAGEHLP_SYMBOL
, *PIMAGEHLP_SYMBOL
;
256 typedef struct _IMAGEHLP_MODULE
{
266 CHAR LoadedImageName
[256];
267 } IMAGEHLP_MODULE
, *PIMAGEHLP_MODULE
;
269 typedef struct _IMAGEHLP_LINE
{
275 } IMAGEHLP_LINE
, *PIMAGEHLP_LINE
;
277 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
{
282 CHAR FileName
[MAX_PATH
];
284 } IMAGEHLP_DEFERRED_SYMBOL_LOAD
, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD
;
286 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
{
289 PIMAGEHLP_SYMBOL Symbol
;
290 ULONG SelectedSymbol
;
291 } IMAGEHLP_DUPLICATE_SYMBOL
, *PIMAGEHLP_DUPLICATE_SYMBOL
;
293 /***********************************************************************
297 typedef BOOL (CALLBACK
*PIMAGEHLP_STATUS_ROUTINE
)(
298 IMAGEHLP_STATUS_REASON Reason
, LPSTR ImageName
, LPSTR DllName
,
299 ULONG Va
, ULONG Parameter
302 typedef BOOL (CALLBACK
*PSYM_ENUMMODULES_CALLBACK
)(
303 LPSTR ModuleName
, ULONG BaseOfDll
, PVOID UserContext
306 typedef BOOL (CALLBACK
*PSYM_ENUMSYMBOLS_CALLBACK
)(
307 LPSTR SymbolName
, ULONG SymbolAddress
, ULONG SymbolSize
,
311 typedef BOOL (CALLBACK
*PENUMLOADED_MODULES_CALLBACK
)(
312 LPSTR ModuleName
, ULONG ModuleBase
, ULONG ModuleSize
,
316 typedef BOOL (CALLBACK
*PSYMBOL_REGISTERED_CALLBACK
)(
317 HANDLE hProcess
, ULONG ActionCode
, PVOID CallbackData
,
321 typedef BOOL (CALLBACK
*DIGEST_FUNCTION
)(
322 DIGEST_HANDLE refdata
, PBYTE pData
, DWORD dwLength
325 typedef BOOL (CALLBACK
*PREAD_PROCESS_MEMORY_ROUTINE
)(
326 HANDLE hProcess
, LPCVOID lpBaseAddress
, PVOID lpBuffer
,
327 DWORD nSize
, PDWORD lpNumberOfBytesRead
330 typedef PVOID (CALLBACK
*PFUNCTION_TABLE_ACCESS_ROUTINE
)(
331 HANDLE hProcess
, DWORD AddrBase
334 typedef DWORD (CALLBACK
*PGET_MODULE_BASE_ROUTINE
)(
335 HANDLE hProcess
, DWORD ReturnAddress
);
337 typedef DWORD (CALLBACK
*PTRANSLATE_ADDRESS_ROUTINE
)(
338 HANDLE hProcess
, HANDLE hThread
, PADDRESS lpaddr
341 /***********************************************************************
345 BOOL WINAPI
BindImage(
346 LPSTR ImageName
, LPSTR DllPath
, LPSTR SymbolPath
348 BOOL WINAPI
BindImageEx(
349 DWORD Flags
, LPSTR ImageName
, LPSTR DllPath
, LPSTR SymbolPath
,
350 PIMAGEHLP_STATUS_ROUTINE StatusRoutine
352 PIMAGE_NT_HEADERS WINAPI
CheckSumMappedFile(
353 LPVOID BaseAddress
, DWORD FileLength
,
354 LPDWORD HeaderSum
, LPDWORD CheckSum
356 BOOL WINAPI
EnumerateLoadedModules(
358 PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback
,
361 HANDLE WINAPI
FindDebugInfoFile(
362 LPSTR FileName
, LPSTR SymbolPath
, LPSTR DebugFilePath
364 HANDLE WINAPI
FindExecutableImage(
365 LPSTR FileName
, LPSTR SymbolPath
, LPSTR ImageFilePath
367 BOOL WINAPI
GetImageConfigInformation(
368 PLOADED_IMAGE LoadedImage
,
369 PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
371 DWORD WINAPI
GetImageUnusedHeaderBytes(
372 PLOADED_IMAGE LoadedImage
,
373 LPDWORD SizeUnusedHeaderBytes
375 DWORD WINAPI
GetTimestampForLoadedLibrary(
378 BOOL WINAPI
ImageAddCertificate(
379 HANDLE FileHandle
, PWIN_CERTIFICATE Certificate
, PDWORD Index
381 PVOID WINAPI
ImageDirectoryEntryToData(
382 PVOID Base
, BOOLEAN MappedAsImage
, USHORT DirectoryEntry
, PULONG Size
384 BOOL WINAPI
ImageEnumerateCertificates(
385 HANDLE FileHandle
, WORD TypeFilter
, PDWORD CertificateCount
,
386 PDWORD Indices
, DWORD IndexCount
388 BOOL WINAPI
ImageGetCertificateData(
389 HANDLE FileHandle
, DWORD CertificateIndex
,
390 PWIN_CERTIFICATE Certificate
, PDWORD RequiredLength
392 BOOL WINAPI
ImageGetCertificateHeader(
393 HANDLE FileHandle
, DWORD CertificateIndex
,
394 PWIN_CERTIFICATE Certificateheader
396 BOOL WINAPI
ImageGetDigestStream(
397 HANDLE FileHandle
, DWORD DigestLevel
,
398 DIGEST_FUNCTION DigestFunction
, DIGEST_HANDLE DigestHandle
400 PLOADED_IMAGE WINAPI
ImageLoad(
401 LPSTR DllName
, LPSTR DllPath
403 PIMAGE_NT_HEADERS WINAPI
ImageNtHeader(
406 BOOL WINAPI
ImageRemoveCertificate(
407 HANDLE FileHandle
, DWORD Index
409 PIMAGE_SECTION_HEADER WINAPI
ImageRvaToSection(
410 PIMAGE_NT_HEADERS NtHeaders
, PVOID Base
, ULONG Rva
412 PVOID WINAPI
ImageRvaToVa(
413 PIMAGE_NT_HEADERS NtHeaders
, PVOID Base
, ULONG Rva
,
414 PIMAGE_SECTION_HEADER
*LastRvaSection
416 BOOL WINAPI
ImageUnload(
417 PLOADED_IMAGE LoadedImage
419 LPAPI_VERSION WINAPI
ImagehlpApiVersion(
422 LPAPI_VERSION WINAPI
ImagehlpApiVersionEx(
423 LPAPI_VERSION AppVersion
425 BOOL WINAPI
MakeSureDirectoryPathExists(
428 BOOL WINAPI
MapAndLoad(
429 LPSTR ImageName
, LPSTR DllPath
, PLOADED_IMAGE LoadedImage
,
430 BOOL DotDll
, BOOL ReadOnly
432 PIMAGE_DEBUG_INFORMATION WINAPI
MapDebugInformation(
433 HANDLE FileHandle
, LPSTR FileName
,
434 LPSTR SymbolPath
, DWORD ImageBase
436 DWORD WINAPI
MapFileAndCheckSumA(
437 LPSTR Filename
, LPDWORD HeaderSum
, LPDWORD CheckSum
439 DWORD WINAPI
MapFileAndCheckSumW(
440 LPWSTR Filename
, LPDWORD HeaderSum
, LPDWORD CheckSum
442 BOOL WINAPI
ReBaseImage(
443 LPSTR CurrentImageName
, LPSTR SymbolPath
, BOOL fReBase
,
444 BOOL fRebaseSysfileOk
, BOOL fGoingDown
, ULONG CheckImageSize
,
445 ULONG
*OldImageSize
, ULONG
*OldImageBase
, ULONG
*NewImageSize
,
446 ULONG
*NewImageBase
, ULONG TimeStamp
448 BOOL WINAPI
RemovePrivateCvSymbolic(
449 PCHAR DebugData
, PCHAR
*NewDebugData
, ULONG
*NewDebugSize
451 VOID WINAPI
RemoveRelocations(
454 BOOL WINAPI
SearchTreeForFile(
455 LPSTR RootPath
, LPSTR InputPathName
, LPSTR OutputPathBuffer
457 BOOL WINAPI
SetImageConfigInformation(
458 PLOADED_IMAGE LoadedImage
,
459 PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
461 BOOL WINAPI
SplitSymbols(
462 LPSTR ImageName
, LPSTR SymbolsPath
,
463 LPSTR SymbolFilePath
, DWORD Flags
465 BOOL WINAPI
StackWalk(
466 DWORD MachineType
, HANDLE hProcess
, HANDLE hThread
,
467 LPSTACKFRAME StackFrame
, PVOID ContextRecord
,
468 PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine
,
469 PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine
,
470 PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine
,
471 PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
473 BOOL WINAPI
SymCleanup(
476 BOOL WINAPI
SymEnumerateModules(
477 HANDLE hProcess
, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback
,
480 BOOL WINAPI
SymEnumerateSymbols(
481 HANDLE hProcess
, DWORD BaseOfDll
,
482 PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback
, PVOID UserContext
484 PVOID WINAPI
SymFunctionTableAccess(
485 HANDLE hProcess
, DWORD AddrBase
487 DWORD WINAPI
SymGetModuleBase(
488 HANDLE hProcess
, DWORD dwAddr
490 BOOL WINAPI
SymGetModuleInfo(
491 HANDLE hProcess
, DWORD dwAddr
,
492 PIMAGEHLP_MODULE ModuleInfo
494 DWORD WINAPI
SymGetOptions(
497 BOOL WINAPI
SymGetSearchPath(
498 HANDLE hProcess
, LPSTR szSearchPath
, DWORD SearchPathLength
500 BOOL WINAPI
SymGetSymFromAddr(
501 HANDLE hProcess
, DWORD dwAddr
,
502 PDWORD pdwDisplacement
, PIMAGEHLP_SYMBOL Symbol
504 BOOL WINAPI
SymGetSymFromName(
505 HANDLE hProcess
, LPSTR Name
, PIMAGEHLP_SYMBOL Symbol
507 BOOL WINAPI
SymGetSymNext(
508 HANDLE hProcess
, PIMAGEHLP_SYMBOL Symbol
510 BOOL WINAPI
SymGetSymPrev(
511 HANDLE hProcess
, PIMAGEHLP_SYMBOL Symbol
513 BOOL WINAPI
SymInitialize(
514 HANDLE hProcess
, LPSTR UserSearchPath
, BOOL fInvadeProcess
516 BOOL WINAPI
SymLoadModule(
517 HANDLE hProcess
, HANDLE hFile
, LPSTR ImageName
, LPSTR ModuleName
,
518 DWORD BaseOfDll
, DWORD SizeOfDll
520 BOOL WINAPI
SymRegisterCallback(
521 HANDLE hProcess
, PSYMBOL_REGISTERED_CALLBACK CallbackFunction
,
524 DWORD WINAPI
SymSetOptions(
527 BOOL WINAPI
SymSetSearchPath(
528 HANDLE hProcess
, LPSTR szSearchPath
530 BOOL WINAPI
SymUnDName(
531 PIMAGEHLP_SYMBOL sym
, LPSTR UnDecName
, DWORD UnDecNameLength
533 BOOL WINAPI
SymUnloadModule(
534 HANDLE hProcess
, DWORD BaseOfDll
536 BOOL WINAPI
TouchFileTimes(
537 HANDLE FileHandle
, LPSYSTEMTIME lpSystemTime
539 DWORD WINAPI
UnDecorateSymbolName(
540 LPCSTR DecoratedName
, LPSTR UnDecoratedName
,
541 DWORD UndecoratedLength
, DWORD Flags
543 BOOL WINAPI
UnMapAndLoad(
544 PLOADED_IMAGE LoadedImage
546 BOOL WINAPI
UnmapDebugInformation(
547 PIMAGE_DEBUG_INFORMATION DebugInfo
549 BOOL WINAPI
UpdateDebugInfoFile(
550 LPSTR ImageFileName
, LPSTR SymbolPath
,
551 LPSTR DebugFilePath
, PIMAGE_NT_HEADERS NtHeaders
553 BOOL WINAPI
UpdateDebugInfoFileEx(
554 LPSTR ImageFileName
, LPSTR SymbolPath
, LPSTR DebugFilePath
,
555 PIMAGE_NT_HEADERS NtHeaders
, DWORD OldChecksum
560 #endif /* defined(__cplusplus) */
562 #endif /* __WINE_IMAGEHLP_H */