Headers diff for dbghelp.dll between 6.1.7601.17514-Windows_7.0 and 6.3.9600.17415-Windows_8.1 versions



 dbghelp.h (6.1.7601.17514-Windows_7.0)   dbghelp.h (6.3.9600.17415-Windows_8.1) 
skipping to change at line 27 skipping to change at line 27
--*/ --*/
#ifndef _DBGHELP_ #ifndef _DBGHELP_
#define _DBGHELP_ #define _DBGHELP_
#if _MSC_VER > 1020 #if _MSC_VER > 1020
#pragma once #pragma once
#endif #endif
#include <winapifamily.h>
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// As a general principal always call the 64 bit version // As a general principal always call the 64 bit version
// of every API, if a choice exists. The 64 bit version // of every API, if a choice exists. The 64 bit version
// works great on 32 bit platforms, and is forward // works great on 32 bit platforms, and is forward
// compatible to 64 bit platforms. // compatible to 64 bit platforms.
#ifdef _WIN64 #ifdef _WIN64
#ifndef _IMAGEHLP64 #ifndef _IMAGEHLP64
#define _IMAGEHLP64 #define _IMAGEHLP64
#endif #endif
#endif #endif
#include <pshpack8.h> #include <pshpack8.h>
// For those without specstrings.h
// Since there are different versions of this header, I need to
// individually test each item and define it if it is not around.
#ifndef __in
#define __in
#endif
#ifndef __out
#define __out
#endif
#ifndef __inout
#define __inout
#endif
#ifndef __in_opt
#define __in_opt
#endif
#ifndef __out_opt
#define __out_opt
#endif
#ifndef __inout_opt
#define __inout_opt
#endif
#ifndef __in_ecount
#define __in_ecount(x)
#endif
#ifndef __out_ecount
#define __out_ecount(x)
#endif
#ifndef __inout_ecount
#define __inout_ecount(x)
#endif
#ifndef __in_bcount
#define __in_bcount(x)
#endif
#ifndef __out_bcount
#define __out_bcount(x)
#endif
#ifndef __inout_bcount
#define __inout_bcount(x)
#endif
#ifndef __out_xcount
#define __out_xcount(x)
#endif
#ifndef __deref_opt_out
#define __deref_opt_out
#endif
#ifndef __deref_out
#define __deref_out
#endif
#ifndef __out_ecount_opt
#define __out_ecount_opt(x)
#endif
#ifndef __in_bcount_opt
#define __in_bcount_opt(x)
#endif
#ifndef __out_bcount_opt
#define __out_bcount_opt(x)
#endif
#ifndef __deref_out_opt
#define __deref_out_opt
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#ifdef _IMAGEHLP_SOURCE_ #ifdef _IMAGEHLP_SOURCE_
#define IMAGEAPI __stdcall #define IMAGEAPI __stdcall
#define DBHLP_DEPRECIATED #define DBHLP_DEPRECIATED
#else #else
#define IMAGEAPI DECLSPEC_IMPORT __stdcall #define IMAGEAPI DECLSPEC_IMPORT __stdcall
#if (_MSC_VER >= 1300) && !defined(MIDL_PASS) #if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
skipping to change at line 164 skipping to change at line 107
// Error codes set by dbghelp functions. Call GetLastError // Error codes set by dbghelp functions. Call GetLastError
// to see them. // to see them.
// Dbghelp also sets error codes found in winerror.h // Dbghelp also sets error codes found in winerror.h
#define ERROR_IMAGE_NOT_STRIPPED 0x8800 // the image is not stripped. No db g file available. #define ERROR_IMAGE_NOT_STRIPPED 0x8800 // the image is not stripped. No db g file available.
#define ERROR_NO_DBG_POINTER 0x8801 // image is stripped but there is no pointer to a dbg file #define ERROR_NO_DBG_POINTER 0x8801 // image is stripped but there is no pointer to a dbg file
#define ERROR_NO_PDB_POINTER 0x8802 // image does not point to a pdb fil e #define ERROR_NO_PDB_POINTER 0x8802 // image does not point to a pdb fil e
typedef BOOL typedef BOOL
(CALLBACK *PFIND_DEBUG_FILE_CALLBACK)( (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(
__in HANDLE FileHandle, _In_ HANDLE FileHandle,
__in PCSTR FileName, _In_ PCSTR FileName,
__in PVOID CallerData _In_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
SymFindDebugInfoFile( SymFindDebugInfoFile(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCSTR FileName, _In_ PCSTR FileName,
__out_ecount(MAX_PATH + 1) PSTR DebugFilePath, _Out_writes_(MAX_PATH + 1) PSTR DebugFilePath,
__in_opt PFIND_DEBUG_FILE_CALLBACK Callback, _In_opt_ PFIND_DEBUG_FILE_CALLBACK Callback,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
typedef BOOL typedef BOOL
(CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)( (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(
__in HANDLE FileHandle, _In_ HANDLE FileHandle,
__in PCWSTR FileName, _In_ PCWSTR FileName,
__in PVOID CallerData _In_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
SymFindDebugInfoFileW( SymFindDebugInfoFileW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCWSTR FileName, _In_ PCWSTR FileName,
__out_ecount(MAX_PATH + 1) PWSTR DebugFilePath, _Out_writes_(MAX_PATH + 1) PWSTR DebugFilePath,
__in_opt PFIND_DEBUG_FILE_CALLBACKW Callback, _In_opt_ PFIND_DEBUG_FILE_CALLBACKW Callback,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
FindDebugInfoFile ( FindDebugInfoFile (
__in PCSTR FileName, _In_ PCSTR FileName,
__in PCSTR SymbolPath, _In_ PCSTR SymbolPath,
__out_ecount(MAX_PATH + 1) PSTR DebugFilePath _Out_writes_(MAX_PATH + 1) PSTR DebugFilePath
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
FindDebugInfoFileEx ( FindDebugInfoFileEx (
__in PCSTR FileName, _In_ PCSTR FileName,
__in PCSTR SymbolPath, _In_ PCSTR SymbolPath,
__out_ecount(MAX_PATH + 1) PSTR DebugFilePath, _Out_writes_(MAX_PATH + 1) PSTR DebugFilePath,
__in_opt PFIND_DEBUG_FILE_CALLBACK Callback, _In_opt_ PFIND_DEBUG_FILE_CALLBACK Callback,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
FindDebugInfoFileExW ( FindDebugInfoFileExW (
__in PCWSTR FileName, _In_ PCWSTR FileName,
__in PCWSTR SymbolPath, _In_ PCWSTR SymbolPath,
__out_ecount(MAX_PATH + 1) PWSTR DebugFilePath, _Out_writes_(MAX_PATH + 1) PWSTR DebugFilePath,
__in_opt PFIND_DEBUG_FILE_CALLBACKW Callback, _In_opt_ PFIND_DEBUG_FILE_CALLBACKW Callback,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
typedef BOOL typedef BOOL
(CALLBACK *PFINDFILEINPATHCALLBACK)( (CALLBACK *PFINDFILEINPATHCALLBACK)(
__in PCSTR filename, _In_ PCSTR filename,
__in PVOID context _In_ PVOID context
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFindFileInPath( SymFindFileInPath(
__in HANDLE hprocess, _In_ HANDLE hprocess,
__in_opt PCSTR SearchPath, _In_opt_ PCSTR SearchPath,
__in PCSTR FileName, _In_ PCSTR FileName,
__in_opt PVOID id, _In_opt_ PVOID id,
__in DWORD two, _In_ DWORD two,
__in DWORD three, _In_ DWORD three,
__in DWORD flags, _In_ DWORD flags,
__out_ecount(MAX_PATH + 1) PSTR FoundFile, _Out_writes_(MAX_PATH + 1) PSTR FoundFile,
__in_opt PFINDFILEINPATHCALLBACK callback, _In_opt_ PFINDFILEINPATHCALLBACK callback,
__in_opt PVOID context _In_opt_ PVOID context
); );
typedef BOOL typedef BOOL
(CALLBACK *PFINDFILEINPATHCALLBACKW)( (CALLBACK *PFINDFILEINPATHCALLBACKW)(
__in PCWSTR filename, _In_ PCWSTR filename,
__in PVOID context _In_ PVOID context
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFindFileInPathW( SymFindFileInPathW(
__in HANDLE hprocess, _In_ HANDLE hprocess,
__in_opt PCWSTR SearchPath, _In_opt_ PCWSTR SearchPath,
__in PCWSTR FileName, _In_ PCWSTR FileName,
__in_opt PVOID id, _In_opt_ PVOID id,
__in DWORD two, _In_ DWORD two,
__in DWORD three, _In_ DWORD three,
__in DWORD flags, _In_ DWORD flags,
__out_ecount(MAX_PATH + 1) PWSTR FoundFile, _Out_writes_(MAX_PATH + 1) PWSTR FoundFile,
__in_opt PFINDFILEINPATHCALLBACKW callback, _In_opt_ PFINDFILEINPATHCALLBACKW callback,
__in_opt PVOID context _In_opt_ PVOID context
); );
typedef BOOL typedef BOOL
(CALLBACK *PFIND_EXE_FILE_CALLBACK)( (CALLBACK *PFIND_EXE_FILE_CALLBACK)(
__in HANDLE FileHandle, _In_ HANDLE FileHandle,
__in PCSTR FileName, _In_ PCSTR FileName,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
SymFindExecutableImage( SymFindExecutableImage(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCSTR FileName, _In_ PCSTR FileName,
__out_ecount(MAX_PATH + 1) PSTR ImageFilePath, _Out_writes_(MAX_PATH + 1) PSTR ImageFilePath,
__in PFIND_EXE_FILE_CALLBACK Callback, _In_ PFIND_EXE_FILE_CALLBACK Callback,
__in PVOID CallerData _In_ PVOID CallerData
); );
typedef BOOL typedef BOOL
(CALLBACK *PFIND_EXE_FILE_CALLBACKW)( (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(
__in HANDLE FileHandle, _In_ HANDLE FileHandle,
__in PCWSTR FileName, _In_ PCWSTR FileName,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
SymFindExecutableImageW( SymFindExecutableImageW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCWSTR FileName, _In_ PCWSTR FileName,
__out_ecount(MAX_PATH + 1) PWSTR ImageFilePath, _Out_writes_(MAX_PATH + 1) PWSTR ImageFilePath,
__in PFIND_EXE_FILE_CALLBACKW Callback, _In_ PFIND_EXE_FILE_CALLBACKW Callback,
__in PVOID CallerData _In_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
FindExecutableImage( FindExecutableImage(
__in PCSTR FileName, _In_ PCSTR FileName,
__in PCSTR SymbolPath, _In_ PCSTR SymbolPath,
__out_ecount(MAX_PATH + 1) PSTR ImageFilePath _Out_writes_(MAX_PATH + 1) PSTR ImageFilePath
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
FindExecutableImageEx( FindExecutableImageEx(
__in PCSTR FileName, _In_ PCSTR FileName,
__in PCSTR SymbolPath, _In_ PCSTR SymbolPath,
__out_ecount(MAX_PATH + 1) PSTR ImageFilePath, _Out_writes_(MAX_PATH + 1) PSTR ImageFilePath,
__in_opt PFIND_EXE_FILE_CALLBACK Callback, _In_opt_ PFIND_EXE_FILE_CALLBACK Callback,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
HANDLE HANDLE
IMAGEAPI IMAGEAPI
FindExecutableImageExW( FindExecutableImageExW(
__in PCWSTR FileName, _In_ PCWSTR FileName,
__in PCWSTR SymbolPath, _In_ PCWSTR SymbolPath,
__out_ecount(MAX_PATH + 1) PWSTR ImageFilePath, _Out_writes_(MAX_PATH + 1) PWSTR ImageFilePath,
__in_opt PFIND_EXE_FILE_CALLBACKW Callback, _In_opt_ PFIND_EXE_FILE_CALLBACKW Callback,
__in PVOID CallerData _In_ PVOID CallerData
); );
PIMAGE_NT_HEADERS PIMAGE_NT_HEADERS
IMAGEAPI IMAGEAPI
ImageNtHeader ( ImageNtHeader (
__in PVOID Base _In_ PVOID Base
); );
PVOID PVOID
IMAGEAPI IMAGEAPI
ImageDirectoryEntryToDataEx ( ImageDirectoryEntryToDataEx (
__in PVOID Base, _In_ PVOID Base,
__in BOOLEAN MappedAsImage, _In_ BOOLEAN MappedAsImage,
__in USHORT DirectoryEntry, _In_ USHORT DirectoryEntry,
__out PULONG Size, _Out_ PULONG Size,
__out_opt PIMAGE_SECTION_HEADER *FoundHeader _Out_opt_ PIMAGE_SECTION_HEADER *FoundHeader
); );
PVOID PVOID
IMAGEAPI IMAGEAPI
ImageDirectoryEntryToData ( ImageDirectoryEntryToData (
__in PVOID Base, _In_ PVOID Base,
__in BOOLEAN MappedAsImage, _In_ BOOLEAN MappedAsImage,
__in USHORT DirectoryEntry, _In_ USHORT DirectoryEntry,
__out PULONG Size _Out_ PULONG Size
); );
PIMAGE_SECTION_HEADER PIMAGE_SECTION_HEADER
IMAGEAPI IMAGEAPI
ImageRvaToSection( ImageRvaToSection(
__in PIMAGE_NT_HEADERS NtHeaders, _In_ PIMAGE_NT_HEADERS NtHeaders,
__in PVOID Base, _In_ PVOID Base,
__in ULONG Rva _In_ ULONG Rva
); );
PVOID PVOID
IMAGEAPI IMAGEAPI
ImageRvaToVa( ImageRvaToVa(
__in PIMAGE_NT_HEADERS NtHeaders, _In_ PIMAGE_NT_HEADERS NtHeaders,
__in PVOID Base, _In_ PVOID Base,
__in ULONG Rva, _In_ ULONG Rva,
__in_opt OUT PIMAGE_SECTION_HEADER *LastRvaSection _In_opt_ OUT PIMAGE_SECTION_HEADER *LastRvaSection
); );
#ifndef _WIN64 #ifndef _WIN64
// This api won't be ported to Win64 - Fix your code. // This api won't be ported to Win64 - Fix your code.
typedef struct _IMAGE_DEBUG_INFORMATION { typedef struct _IMAGE_DEBUG_INFORMATION {
LIST_ENTRY List; LIST_ENTRY List;
DWORD ReservedSize; DWORD ReservedSize;
PVOID ReservedMappedBase; PVOID ReservedMappedBase;
USHORT ReservedMachine; USHORT ReservedMachine;
skipping to change at line 422 skipping to change at line 365
DWORD ReservedOriginalFunctionTableBaseAddress; DWORD ReservedOriginalFunctionTableBaseAddress;
DWORD Reserved[ 2 ]; DWORD Reserved[ 2 ];
} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
PIMAGE_DEBUG_INFORMATION PIMAGE_DEBUG_INFORMATION
IMAGEAPI IMAGEAPI
MapDebugInformation( MapDebugInformation(
__in_opt HANDLE FileHandle, _In_opt_ HANDLE FileHandle,
__in PCSTR FileName, _In_ PCSTR FileName,
__in_opt PCSTR SymbolPath, _In_opt_ PCSTR SymbolPath,
__in ULONG ImageBase _In_ ULONG ImageBase
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
UnmapDebugInformation( UnmapDebugInformation(
__out_xcount(unknown) PIMAGE_DEBUG_INFORMATION DebugInfo _Out_writes_(_Inexpressible_(unknown)) PIMAGE_DEBUG_INFORMATION DebugInfo
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SearchTreeForFile( SearchTreeForFile(
__in PCSTR RootPath, _In_ PCSTR RootPath,
__in PCSTR InputPathName, _In_ PCSTR InputPathName,
__out_ecount(MAX_PATH + 1) PSTR OutputPathBuffer _Out_writes_(MAX_PATH + 1) PSTR OutputPathBuffer
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SearchTreeForFileW( SearchTreeForFileW(
__in PCWSTR RootPath, _In_ PCWSTR RootPath,
__in PCWSTR InputPathName, _In_ PCWSTR InputPathName,
__out_ecount(MAX_PATH + 1) PWSTR OutputPathBuffer _Out_writes_(MAX_PATH + 1) PWSTR OutputPathBuffer
); );
typedef BOOL typedef BOOL
(CALLBACK *PENUMDIRTREE_CALLBACK)( (CALLBACK *PENUMDIRTREE_CALLBACK)(
__in PCSTR FilePath, _In_ PCSTR FilePath,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumDirTree( EnumDirTree(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in PCSTR RootPath, _In_ PCSTR RootPath,
__in PCSTR InputPathName, _In_ PCSTR InputPathName,
__out_ecount_opt(MAX_PATH + 1) PSTR OutputPathBuffer, _Out_writes_opt_(MAX_PATH + 1) PSTR OutputPathBuffer,
__in_opt PENUMDIRTREE_CALLBACK cb, _In_opt_ PENUMDIRTREE_CALLBACK cb,
__in_opt PVOID data _In_opt_ PVOID data
); );
typedef BOOL typedef BOOL
(CALLBACK *PENUMDIRTREE_CALLBACKW)( (CALLBACK *PENUMDIRTREE_CALLBACKW)(
__in PCWSTR FilePath, _In_ PCWSTR FilePath,
__in_opt PVOID CallerData _In_opt_ PVOID CallerData
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumDirTreeW( EnumDirTreeW(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in PCWSTR RootPath, _In_ PCWSTR RootPath,
__in PCWSTR InputPathName, _In_ PCWSTR InputPathName,
__out_ecount_opt(MAX_PATH + 1) PWSTR OutputPathBuffer, _Out_writes_opt_(MAX_PATH + 1) PWSTR OutputPathBuffer,
__in_opt PENUMDIRTREE_CALLBACKW cb, _In_opt_ PENUMDIRTREE_CALLBACKW cb,
__in_opt PVOID data _In_opt_ PVOID data
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
MakeSureDirectoryPathExists( MakeSureDirectoryPathExists(
__in PCSTR DirPath _In_ PCSTR DirPath
); );
// //
// UnDecorateSymbolName Flags // UnDecorateSymbolName Flags
// //
#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration #define UNDNAME_COMPLETE (0x0000) // Enable full undecoration
#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) // Remove leading underscores from MS extended keywords #define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) // Remove leading underscores from MS extended keywords
#define UNDNAME_NO_MS_KEYWORDS (0x0002) // Disable expansion of MS ex tended keywords #define UNDNAME_NO_MS_KEYWORDS (0x0002) // Disable expansion of MS ex tended keywords
#define UNDNAME_NO_FUNCTION_RETURNS (0x0004) // Disable expansion of retur n type for primary declaration #define UNDNAME_NO_FUNCTION_RETURNS (0x0004) // Disable expansion of retur n type for primary declaration
skipping to change at line 519 skipping to change at line 462
#define UNDNAME_32_BIT_DECODE (0x0800) // Undecorate 32-bit decorate d names #define UNDNAME_32_BIT_DECODE (0x0800) // Undecorate 32-bit decorate d names
#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for pr imary declaration; #define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for pr imary declaration;
// return just [scope::]name. Does expand template params // return just [scope::]name. Does expand template params
#define UNDNAME_NO_ARGUMENTS (0x2000) // Don't undecorate arguments to function #define UNDNAME_NO_ARGUMENTS (0x2000) // Don't undecorate arguments to function
#define UNDNAME_NO_SPECIAL_SYMS (0x4000) // Don't undecorate special n ames (v-table, vcall, vector xxx, metatype, etc) #define UNDNAME_NO_SPECIAL_SYMS (0x4000) // Don't undecorate special n ames (v-table, vcall, vector xxx, metatype, etc)
DWORD DWORD
IMAGEAPI IMAGEAPI
WINAPI WINAPI
UnDecorateSymbolName( UnDecorateSymbolName(
__in PCSTR name, _In_ PCSTR name,
__out_ecount(maxStringLength) PSTR outputString, _Out_writes_(maxStringLength) PSTR outputString,
__in DWORD maxStringLength, _In_ DWORD maxStringLength,
__in DWORD flags _In_ DWORD flags
); );
DWORD DWORD
IMAGEAPI IMAGEAPI
WINAPI WINAPI
UnDecorateSymbolNameW( UnDecorateSymbolNameW(
__in PCWSTR name, _In_ PCWSTR name,
__out_ecount(maxStringLength) PWSTR outputString, _Out_writes_(maxStringLength) PWSTR outputString,
__in DWORD maxStringLength, _In_ DWORD maxStringLength,
__in DWORD flags _In_ DWORD flags
); );
// //
// these values are used for synthesized file types // these values are used for synthesized file types
// that can be passed in as image headers instead of // that can be passed in as image headers instead of
// the standard ones from ntimage.h // the standard ones from ntimage.h
// //
#define DBHHEADER_DEBUGDIRS 0x1 #define DBHHEADER_DEBUGDIRS 0x1
#define DBHHEADER_CVMISC 0x2 #define DBHHEADER_CVMISC 0x2
skipping to change at line 596 skipping to change at line 539
#else #else
typedef struct _tagADDRESS { typedef struct _tagADDRESS {
DWORD Offset; DWORD Offset;
WORD Segment; WORD Segment;
ADDRESS_MODE Mode; ADDRESS_MODE Mode;
} ADDRESS, *LPADDRESS; } ADDRESS, *LPADDRESS;
__inline __inline
void void
Address32To64( Address32To64(
__in LPADDRESS a32, _In_ LPADDRESS a32,
__out LPADDRESS64 a64 _Out_ LPADDRESS64 a64
) )
{ {
a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset; a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
a64->Segment = a32->Segment; a64->Segment = a32->Segment;
a64->Mode = a32->Mode; a64->Mode = a32->Mode;
} }
__inline __inline
void void
Address64To32( Address64To32(
__in LPADDRESS64 a64, _In_ LPADDRESS64 a64,
__out LPADDRESS a32 _Out_ LPADDRESS a32
) )
{ {
a32->Offset = (ULONG)a64->Offset; a32->Offset = (ULONG)a64->Offset;
a32->Segment = a64->Segment; a32->Segment = a64->Segment;
a32->Mode = a64->Mode; a32->Mode = a64->Mode;
} }
#endif #endif
// //
// This structure is included in the STACKFRAME structure, // This structure is included in the STACKFRAME structure,
skipping to change at line 685 skipping to change at line 628
// Added in API version 10. // Added in API version 10.
// //
DWORD64 KiUserExceptionDispatcher; DWORD64 KiUserExceptionDispatcher;
// //
// Stack bounds, added in API version 11. // Stack bounds, added in API version 11.
// //
DWORD64 StackBase; DWORD64 StackBase;
DWORD64 StackLimit; DWORD64 StackLimit;
DWORD64 Reserved[5]; //
// Target OS build number. Added in API version 12.
//
DWORD BuildVersion;
DWORD Reserved0;
DWORD64 Reserved1[4];
} KDHELP64, *PKDHELP64; } KDHELP64, *PKDHELP64;
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define KDHELP KDHELP64 #define KDHELP KDHELP64
#define PKDHELP PKDHELP64 #define PKDHELP PKDHELP64
#else #else
typedef struct _KDHELP { typedef struct _KDHELP {
// //
skipping to change at line 756 skipping to change at line 704
DWORD StackBase; DWORD StackBase;
DWORD StackLimit; DWORD StackLimit;
DWORD Reserved[5]; DWORD Reserved[5];
} KDHELP, *PKDHELP; } KDHELP, *PKDHELP;
__inline __inline
void void
KdHelp32To64( KdHelp32To64(
__in PKDHELP p32, _In_ PKDHELP p32,
__out PKDHELP64 p64 _Out_ PKDHELP64 p64
) )
{ {
p64->Thread = p32->Thread; p64->Thread = p32->Thread;
p64->ThCallbackStack = p32->ThCallbackStack; p64->ThCallbackStack = p32->ThCallbackStack;
p64->NextCallback = p32->NextCallback; p64->NextCallback = p32->NextCallback;
p64->FramePointer = p32->FramePointer; p64->FramePointer = p32->FramePointer;
p64->KiCallUserMode = p32->KiCallUserMode; p64->KiCallUserMode = p32->KiCallUserMode;
p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher; p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
p64->SystemRangeStart = p32->SystemRangeStart; p64->SystemRangeStart = p32->SystemRangeStart;
p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher; p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher;
skipping to change at line 787 skipping to change at line 735
ADDRESS64 AddrStack; // stack pointer ADDRESS64 AddrStack; // stack pointer
ADDRESS64 AddrBStore; // backing store pointer ADDRESS64 AddrBStore; // backing store pointer
PVOID FuncTableEntry; // pointer to pdata/fpo or NULL PVOID FuncTableEntry; // pointer to pdata/fpo or NULL
DWORD64 Params[4]; // possible arguments to the function DWORD64 Params[4]; // possible arguments to the function
BOOL Far; // WOW far call BOOL Far; // WOW far call
BOOL Virtual; // is this a virtual frame? BOOL Virtual; // is this a virtual frame?
DWORD64 Reserved[3]; DWORD64 Reserved[3];
KDHELP64 KdHelp; KDHELP64 KdHelp;
} STACKFRAME64, *LPSTACKFRAME64; } STACKFRAME64, *LPSTACKFRAME64;
#define INLINE_FRAME_CONTEXT_INIT 0
#define INLINE_FRAME_CONTEXT_IGNORE 0xFFFFFFFF
typedef struct _tagSTACKFRAME_EX {
// First, STACKFRAME64 structure
ADDRESS64 AddrPC; // program counter
ADDRESS64 AddrReturn; // return address
ADDRESS64 AddrFrame; // frame pointer
ADDRESS64 AddrStack; // stack pointer
ADDRESS64 AddrBStore; // backing store pointer
PVOID FuncTableEntry; // pointer to pdata/fpo or NULL
DWORD64 Params[4]; // possible arguments to the function
BOOL Far; // WOW far call
BOOL Virtual; // is this a virtual frame?
DWORD64 Reserved[3];
KDHELP64 KdHelp;
// Extended STACKFRAME fields
DWORD StackFrameSize;
DWORD InlineFrameContext;
} STACKFRAME_EX, *LPSTACKFRAME_EX;
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define STACKFRAME STACKFRAME64 #define STACKFRAME STACKFRAME64
#define LPSTACKFRAME LPSTACKFRAME64 #define LPSTACKFRAME LPSTACKFRAME64
#else #else
typedef struct _tagSTACKFRAME { typedef struct _tagSTACKFRAME {
ADDRESS AddrPC; // program counter ADDRESS AddrPC; // program counter
ADDRESS AddrReturn; // return address ADDRESS AddrReturn; // return address
ADDRESS AddrFrame; // frame pointer ADDRESS AddrFrame; // frame pointer
ADDRESS AddrStack; // stack pointer ADDRESS AddrStack; // stack pointer
PVOID FuncTableEntry; // pointer to pdata/fpo or NULL PVOID FuncTableEntry; // pointer to pdata/fpo or NULL
skipping to change at line 809 skipping to change at line 779
BOOL Virtual; // is this a virtual frame? BOOL Virtual; // is this a virtual frame?
DWORD Reserved[3]; DWORD Reserved[3];
KDHELP KdHelp; KDHELP KdHelp;
ADDRESS AddrBStore; // backing store pointer ADDRESS AddrBStore; // backing store pointer
} STACKFRAME, *LPSTACKFRAME; } STACKFRAME, *LPSTACKFRAME;
#endif #endif
typedef typedef
BOOL BOOL
(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)( (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 qwBaseAddress, _In_ DWORD64 qwBaseAddress,
__out_bcount(nSize) PVOID lpBuffer, _Out_writes_bytes_(nSize) PVOID lpBuffer,
__in DWORD nSize, _In_ DWORD nSize,
__out LPDWORD lpNumberOfBytesRead _Out_ LPDWORD lpNumberOfBytesRead
); );
typedef typedef
PVOID PVOID
(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)( (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
__in HANDLE ahProcess, _In_ HANDLE ahProcess,
__in DWORD64 AddrBase _In_ DWORD64 AddrBase
); );
typedef typedef
DWORD64 DWORD64
(__stdcall *PGET_MODULE_BASE_ROUTINE64)( (__stdcall *PGET_MODULE_BASE_ROUTINE64)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Address _In_ DWORD64 Address
); );
typedef typedef
DWORD64 DWORD64
(__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)( (__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in HANDLE hThread, _In_ HANDLE hThread,
__in LPADDRESS64 lpaddr _In_ LPADDRESS64 lpaddr
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
StackWalk64( StackWalk64(
__in DWORD MachineType, _In_ DWORD MachineType,
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in HANDLE hThread, _In_ HANDLE hThread,
__inout LPSTACKFRAME64 StackFrame, _Inout_ LPSTACKFRAME64 StackFrame,
__inout PVOID ContextRecord, _Inout_ PVOID ContextRecord,
__in_opt PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
__in_opt PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
__in_opt PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, _In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
__in_opt PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress _In_opt_ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress
);
#define SYM_STKWALK_DEFAULT 0x00000000
#define SYM_STKWALK_FORCE_FRAMEPTR 0x00000001
BOOL
IMAGEAPI
StackWalkEx(
_In_ DWORD MachineType,
_In_ HANDLE hProcess,
_In_ HANDLE hThread,
_Inout_ LPSTACKFRAME_EX StackFrame,
_Inout_ PVOID ContextRecord,
_In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
_In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
_In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
_In_opt_ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress,
_In_ DWORD Flags
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64 #define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64 #define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64 #define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64 #define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
#define StackWalk StackWalk64 #define StackWalk StackWalk64
#else #else
typedef typedef
BOOL BOOL
(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)( (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD lpBaseAddress, _In_ DWORD lpBaseAddress,
__out_bcount(nSize) PVOID lpBuffer, _Out_writes_bytes_(nSize) PVOID lpBuffer,
__in DWORD nSize, _In_ DWORD nSize,
__out PDWORD lpNumberOfBytesRead _Out_ PDWORD lpNumberOfBytesRead
); );
typedef typedef
PVOID PVOID
(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)( (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD AddrBase _In_ DWORD AddrBase
); );
typedef typedef
DWORD DWORD
(__stdcall *PGET_MODULE_BASE_ROUTINE)( (__stdcall *PGET_MODULE_BASE_ROUTINE)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD Address _In_ DWORD Address
); );
typedef typedef
DWORD DWORD
(__stdcall *PTRANSLATE_ADDRESS_ROUTINE)( (__stdcall *PTRANSLATE_ADDRESS_ROUTINE)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in HANDLE hThread, _In_ HANDLE hThread,
__out LPADDRESS lpaddr _Out_ LPADDRESS lpaddr
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
StackWalk( StackWalk(
DWORD MachineType, DWORD MachineType,
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in HANDLE hThread, _In_ HANDLE hThread,
__inout LPSTACKFRAME StackFrame, _Inout_ LPSTACKFRAME StackFrame,
__inout PVOID ContextRecord, _Inout_ PVOID ContextRecord,
__in_opt PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
__in_opt PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
__in_opt PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, _In_opt_ PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
__in_opt PTRANSLATE_ADDRESS_ROUTINE TranslateAddress _In_opt_ PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
); );
#endif #endif
#define API_VERSION_NUMBER 11 #define API_VERSION_NUMBER 12
typedef struct API_VERSION { typedef struct API_VERSION {
USHORT MajorVersion; USHORT MajorVersion;
USHORT MinorVersion; USHORT MinorVersion;
USHORT Revision; USHORT Revision;
USHORT Reserved; USHORT Reserved;
} API_VERSION, *LPAPI_VERSION; } API_VERSION, *LPAPI_VERSION;
LPAPI_VERSION LPAPI_VERSION
IMAGEAPI IMAGEAPI
ImagehlpApiVersion( ImagehlpApiVersion(
VOID VOID
); );
LPAPI_VERSION LPAPI_VERSION
IMAGEAPI IMAGEAPI
ImagehlpApiVersionEx( ImagehlpApiVersionEx(
__in LPAPI_VERSION AppVersion _In_ LPAPI_VERSION AppVersion
); );
DWORD DWORD
IMAGEAPI IMAGEAPI
GetTimestampForLoadedLibrary( GetTimestampForLoadedLibrary(
__in HMODULE Module _In_ HMODULE Module
); );
// //
// typedefs for function pointers // typedefs for function pointers
// //
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMMODULES_CALLBACK64)( (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(
__in PCSTR ModuleName, _In_ PCSTR ModuleName,
__in DWORD64 BaseOfDll, _In_ DWORD64 BaseOfDll,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)( (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(
__in PCWSTR ModuleName, _In_ PCWSTR ModuleName,
__in DWORD64 BaseOfDll, _In_ DWORD64 BaseOfDll,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PENUMLOADED_MODULES_CALLBACK64)( (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(
__in PCSTR ModuleName, _In_ PCSTR ModuleName,
__in DWORD64 ModuleBase, _In_ DWORD64 ModuleBase,
__in ULONG ModuleSize, _In_ ULONG ModuleSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)( (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(
__in PCWSTR ModuleName, _In_ PCWSTR ModuleName,
__in DWORD64 ModuleBase, _In_ DWORD64 ModuleBase,
__in ULONG ModuleSize, _In_ ULONG ModuleSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)( (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(
__in PCSTR SymbolName, _In_ PCSTR SymbolName,
__in DWORD64 SymbolAddress, _In_ DWORD64 SymbolAddress,
__in ULONG SymbolSize, _In_ ULONG SymbolSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)( (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(
__in PCWSTR SymbolName, _In_ PCWSTR SymbolName,
__in DWORD64 SymbolAddress, _In_ DWORD64 SymbolAddress,
__in ULONG SymbolSize, _In_ ULONG SymbolSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)( (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG ActionCode, _In_ ULONG ActionCode,
__in_opt ULONG64 CallbackData, _In_opt_ ULONG64 CallbackData,
__in_opt ULONG64 UserContext _In_opt_ ULONG64 UserContext
); );
typedef typedef
PVOID PVOID
(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)( (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD AddrBase, _In_ DWORD AddrBase,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef typedef
PVOID PVOID
(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)( (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 AddrBase, _In_ ULONG64 AddrBase,
__in ULONG64 UserContext _In_ ULONG64 UserContext
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64 #define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64 #define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W #define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64 #define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64 #define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64 #define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
#else #else
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMMODULES_CALLBACK)( (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
__in PCSTR ModuleName, _In_ PCSTR ModuleName,
__in ULONG BaseOfDll, _In_ ULONG BaseOfDll,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)( (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
__in PCSTR SymbolName, _In_ PCSTR SymbolName,
__in ULONG SymbolAddress, _In_ ULONG SymbolAddress,
__in ULONG SymbolSize, _In_ ULONG SymbolSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)( (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(
__in PCWSTR SymbolName, _In_ PCWSTR SymbolName,
__in ULONG SymbolAddress, _In_ ULONG SymbolAddress,
__in ULONG SymbolSize, _In_ ULONG SymbolSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PENUMLOADED_MODULES_CALLBACK)( (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
__in PCSTR ModuleName, _In_ PCSTR ModuleName,
__in ULONG ModuleBase, _In_ ULONG ModuleBase,
__in ULONG ModuleSize, _In_ ULONG ModuleSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)( (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG ActionCode, _In_ ULONG ActionCode,
__in_opt PVOID CallbackData, _In_opt_ PVOID CallbackData,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#endif #endif
// values found in SYMBOL_INFO.Tag // values found in SYMBOL_INFO.Tag
// //
// This was taken from cvconst.h and should // This was taken from cvconst.h and should
// not override any values found there. // not override any values found there.
// //
// #define _NO_CVCONST_H_ if you don't // #define _NO_CVCONST_H_ if you don't
skipping to change at line 1108 skipping to change at line 1095
SymTagFuncDebugStart, SymTagFuncDebugStart,
SymTagFuncDebugEnd, SymTagFuncDebugEnd,
SymTagUsingNamespace, SymTagUsingNamespace,
SymTagVTableShape, SymTagVTableShape,
SymTagVTable, SymTagVTable,
SymTagCustom, SymTagCustom,
SymTagThunk, SymTagThunk,
SymTagCustomType, SymTagCustomType,
SymTagManagedType, SymTagManagedType,
SymTagDimension, SymTagDimension,
SymTagCallSite,
SymTagMax SymTagMax
}; };
#endif #endif
// //
// flags found in SYMBOL_INFO.Flags // flags found in SYMBOL_INFO.Flags
// //
#define SYMFLAG_VALUEPRESENT 0x00000001 #define SYMFLAG_VALUEPRESENT 0x00000001
#define SYMFLAG_REGISTER 0x00000008 #define SYMFLAG_REGISTER 0x00000008
#define SYMFLAG_REGREL 0x00000010 #define SYMFLAG_REGREL 0x00000010
#define SYMFLAG_FRAMEREL 0x00000020 #define SYMFLAG_FRAMEREL 0x00000020
#define SYMFLAG_PARAMETER 0x00000040 #define SYMFLAG_PARAMETER 0x00000040
#define SYMFLAG_LOCAL 0x00000080 #define SYMFLAG_LOCAL 0x00000080
#define SYMFLAG_CONSTANT 0x00000100 #define SYMFLAG_CONSTANT 0x00000100
#define SYMFLAG_EXPORT 0x00000200 #define SYMFLAG_EXPORT 0x00000200
#define SYMFLAG_FORWARDER 0x00000400 #define SYMFLAG_FORWARDER 0x00000400
#define SYMFLAG_FUNCTION 0x00000800 #define SYMFLAG_FUNCTION 0x00000800
#define SYMFLAG_VIRTUAL 0x00001000 #define SYMFLAG_VIRTUAL 0x00001000
#define SYMFLAG_THUNK 0x00002000 #define SYMFLAG_THUNK 0x00002000
#define SYMFLAG_TLSREL 0x00004000 #define SYMFLAG_TLSREL 0x00004000
#define SYMFLAG_SLOT 0x00008000 #define SYMFLAG_SLOT 0x00008000
#define SYMFLAG_ILREL 0x00010000 #define SYMFLAG_ILREL 0x00010000
#define SYMFLAG_METADATA 0x00020000 #define SYMFLAG_METADATA 0x00020000
#define SYMFLAG_CLR_TOKEN 0x00040000 #define SYMFLAG_CLR_TOKEN 0x00040000
#define SYMFLAG_NULL 0x00080000
#define SYMFLAG_FUNC_NO_RETURN 0x00100000
#define SYMFLAG_SYNTHETIC_ZEROBASE 0x00200000
#define SYMFLAG_PUBLIC_CODE 0x00400000
// this resets SymNext/Prev to the beginning // this resets SymNext/Prev to the beginning
// of the module passed in the address field // of the module passed in the address field
#define SYMFLAG_RESET 0x80000000 #define SYMFLAG_RESET 0x80000000
// //
// symbol type enumeration // symbol type enumeration
// //
typedef enum { typedef enum {
skipping to change at line 1261 skipping to change at line 1253
GUID PdbSig70; // Signature of PDB (VC 7 and up) GUID PdbSig70; // Signature of PDB (VC 7 and up)
DWORD PdbAge; // DBI age of pdb DWORD PdbAge; // DBI age of pdb
BOOL PdbUnmatched; // loaded an unmatched pdb BOOL PdbUnmatched; // loaded an unmatched pdb
BOOL DbgUnmatched; // loaded an unmatched dbg BOOL DbgUnmatched; // loaded an unmatched dbg
BOOL LineNumbers; // we have line number information BOOL LineNumbers; // we have line number information
BOOL GlobalSymbols; // we have internal symbol information BOOL GlobalSymbols; // we have internal symbol information
BOOL TypeInfo; // we have type information BOOL TypeInfo; // we have type information
// new elements: 17-Dec-2003 // new elements: 17-Dec-2003
BOOL SourceIndexed; // pdb supports source server BOOL SourceIndexed; // pdb supports source server
BOOL Publics; // contains public symbols BOOL Publics; // contains public symbols
// new element: 15-Jul-2009
DWORD MachineType; // IMAGE_FILE_MACHINE_XXX from ntimage.h an
d winnt.h
DWORD Reserved; // Padding - don't remove.
} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
typedef struct _IMAGEHLP_MODULEW64 { typedef struct _IMAGEHLP_MODULEW64 {
DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64)
DWORD64 BaseOfImage; // base load address of module DWORD64 BaseOfImage; // base load address of module
DWORD ImageSize; // virtual size of the loaded module DWORD ImageSize; // virtual size of the loaded module
DWORD TimeDateStamp; // date/time stamp from pe header DWORD TimeDateStamp; // date/time stamp from pe header
DWORD CheckSum; // checksum from the pe header DWORD CheckSum; // checksum from the pe header
DWORD NumSyms; // number of symbols in the symbol table DWORD NumSyms; // number of symbols in the symbol table
SYM_TYPE SymType; // type of symbols loaded SYM_TYPE SymType; // type of symbols loaded
skipping to change at line 1289 skipping to change at line 1284
GUID PdbSig70; // Signature of PDB (VC 7 and up) GUID PdbSig70; // Signature of PDB (VC 7 and up)
DWORD PdbAge; // DBI age of pdb DWORD PdbAge; // DBI age of pdb
BOOL PdbUnmatched; // loaded an unmatched pdb BOOL PdbUnmatched; // loaded an unmatched pdb
BOOL DbgUnmatched; // loaded an unmatched dbg BOOL DbgUnmatched; // loaded an unmatched dbg
BOOL LineNumbers; // we have line number information BOOL LineNumbers; // we have line number information
BOOL GlobalSymbols; // we have internal symbol information BOOL GlobalSymbols; // we have internal symbol information
BOOL TypeInfo; // we have type information BOOL TypeInfo; // we have type information
// new elements: 17-Dec-2003 // new elements: 17-Dec-2003
BOOL SourceIndexed; // pdb supports source server BOOL SourceIndexed; // pdb supports source server
BOOL Publics; // contains public symbols BOOL Publics; // contains public symbols
// new element: 15-Jul-2009
DWORD MachineType; // IMAGE_FILE_MACHINE_XXX from ntimage.h an
d winnt.h
DWORD Reserved; // Padding - don't remove.
} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define IMAGEHLP_MODULE IMAGEHLP_MODULE64 #define IMAGEHLP_MODULE IMAGEHLP_MODULE64
#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64 #define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64 #define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64 #define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
#else #else
typedef struct _IMAGEHLP_MODULE { typedef struct _IMAGEHLP_MODULE {
DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE)
skipping to change at line 1396 skipping to change at line 1394
#define CBA_SYMBOLS_UNLOADED 0x00000004 #define CBA_SYMBOLS_UNLOADED 0x00000004
#define CBA_DUPLICATE_SYMBOL 0x00000005 #define CBA_DUPLICATE_SYMBOL 0x00000005
#define CBA_READ_MEMORY 0x00000006 #define CBA_READ_MEMORY 0x00000006
#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
#define CBA_SET_OPTIONS 0x00000008 #define CBA_SET_OPTIONS 0x00000008
#define CBA_EVENT 0x00000010 #define CBA_EVENT 0x00000010
#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020 #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
#define CBA_DEBUG_INFO 0x10000000 #define CBA_DEBUG_INFO 0x10000000
#define CBA_SRCSRV_INFO 0x20000000 #define CBA_SRCSRV_INFO 0x20000000
#define CBA_SRCSRV_EVENT 0x40000000 #define CBA_SRCSRV_EVENT 0x40000000
#define CBA_UPDATE_STATUS_BAR 0x50000000
#define CBA_ENGINE_PRESENT 0x60000000
#define CBA_CHECK_ENGOPT_DISALLOW_NETWORK_PATHS 0x70000000
typedef struct _IMAGEHLP_CBA_READ_MEMORY { typedef struct _IMAGEHLP_CBA_READ_MEMORY {
DWORD64 addr; // address to read from DWORD64 addr; // address to read from
PVOID buf; // buffer to read to PVOID buf; // buffer to read to
DWORD bytes; // amount of bytes to re ad DWORD bytes; // amount of bytes to re ad
DWORD *bytesread; // pointer to store amou nt of bytes read DWORD *bytesread; // pointer to store amou nt of bytes read
} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
enum { enum {
sevInfo = 0, sevInfo = 0,
skipping to change at line 1452 skipping to change at line 1453
DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_L OADW64) DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_L OADW64)
DWORD64 BaseOfImage; // base load address of module DWORD64 BaseOfImage; // base load address of module
DWORD CheckSum; // checksum from the pe header DWORD CheckSum; // checksum from the pe header
DWORD TimeDateStamp; // date/time stamp from pe header DWORD TimeDateStamp; // date/time stamp from pe header
WCHAR FileName[MAX_PATH + 1]; // symbols file or image name WCHAR FileName[MAX_PATH + 1]; // symbols file or image name
BOOLEAN Reparse; // load failure reparse BOOLEAN Reparse; // load failure reparse
HANDLE hFile; // file handle, if passed HANDLE hFile; // file handle, if passed
DWORD Flags; // DWORD Flags; //
} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64; } IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
#define DSLFLAG_MISMATCHED_PDB 0x1 #define DSLFLAG_MISMATCHED_PDB 0x1
#define DSLFLAG_MISMATCHED_DBG 0x2 #define DSLFLAG_MISMATCHED_DBG 0x2
#define FLAG_ENGINE_PRESENT 0x4
#define FLAG_ENGOPT_DISALLOW_NETWORK_PATHS 0x8
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64 #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
#else #else
typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_L OAD) DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_L OAD)
DWORD BaseOfImage; // base load address of module DWORD BaseOfImage; // base load address of module
DWORD CheckSum; // checksum from the pe header DWORD CheckSum; // checksum from the pe header
DWORD TimeDateStamp; // date/time stamp from pe header DWORD TimeDateStamp; // date/time stamp from pe header
skipping to change at line 1494 skipping to change at line 1497
PIMAGEHLP_SYMBOL Symbol; // array of duplicate symbols PIMAGEHLP_SYMBOL Symbol; // array of duplicate symbols
DWORD SelectedSymbol; // symbol selected (-1 to start) DWORD SelectedSymbol; // symbol selected (-1 to start)
} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
#endif #endif
// If dbghelp ever needs to display graphical UI, it will use this as the parent window. // If dbghelp ever needs to display graphical UI, it will use this as the parent window.
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSetParentWindow( SymSetParentWindow(
__in HWND hwnd _In_ HWND hwnd
); );
PCHAR PCHAR
IMAGEAPI IMAGEAPI
SymSetHomeDirectory( SymSetHomeDirectory(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in_opt PCSTR dir _In_opt_ PCSTR dir
); );
PWSTR PWSTR
IMAGEAPI IMAGEAPI
SymSetHomeDirectoryW( SymSetHomeDirectoryW(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in_opt PCWSTR dir _In_opt_ PCWSTR dir
); );
PCHAR PCHAR
IMAGEAPI IMAGEAPI
SymGetHomeDirectory( SymGetHomeDirectory(
__in DWORD type, _In_ DWORD type,
__out_ecount(size) PSTR dir, _Out_writes_(size) PSTR dir,
__in size_t size _In_ size_t size
); );
PWSTR PWSTR
IMAGEAPI IMAGEAPI
SymGetHomeDirectoryW( SymGetHomeDirectoryW(
__in DWORD type, _In_ DWORD type,
__out_ecount(size) PWSTR dir, _Out_writes_(size) PWSTR dir,
__in size_t size _In_ size_t size
); );
typedef enum { typedef enum {
hdBase = 0, // root directory for dbghelp hdBase = 0, // root directory for dbghelp
hdSym, // where symbols are stored hdSym, // where symbols are stored
hdSrc, // where source is stored hdSrc, // where source is stored
hdMax // end marker hdMax // end marker
}; };
typedef struct _OMAP { typedef struct _OMAP {
ULONG rva; ULONG rva;
ULONG rvaTo; ULONG rvaTo;
} OMAP, *POMAP; } OMAP, *POMAP;
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetOmaps( SymGetOmaps(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 BaseOfDll, _In_ DWORD64 BaseOfDll,
__out POMAP *OmapTo, _Out_ POMAP *OmapTo,
__out PDWORD64 cOmapTo, _Out_ PDWORD64 cOmapTo,
__out POMAP *OmapFrom, _Out_ POMAP *OmapFrom,
__out PDWORD64 cOmapFrom _Out_ PDWORD64 cOmapFrom
); );
// //
// options that are set/returned by SymSetOptions() & SymGetOptions() // options that are set/returned by SymSetOptions() & SymGetOptions()
// these are used as a mask // these are used as a mask
// //
#define SYMOPT_CASE_INSENSITIVE 0x00000001 #define SYMOPT_CASE_INSENSITIVE 0x00000001
#define SYMOPT_UNDNAME 0x00000002 #define SYMOPT_UNDNAME 0x00000002
#define SYMOPT_DEFERRED_LOADS 0x00000004 #define SYMOPT_DEFERRED_LOADS 0x00000004
#define SYMOPT_NO_CPP 0x00000008 #define SYMOPT_NO_CPP 0x00000008
skipping to change at line 1580 skipping to change at line 1583
#define SYMOPT_AUTO_PUBLICS 0x00010000 #define SYMOPT_AUTO_PUBLICS 0x00010000
#define SYMOPT_NO_IMAGE_SEARCH 0x00020000 #define SYMOPT_NO_IMAGE_SEARCH 0x00020000
#define SYMOPT_SECURE 0x00040000 #define SYMOPT_SECURE 0x00040000
#define SYMOPT_NO_PROMPTS 0x00080000 #define SYMOPT_NO_PROMPTS 0x00080000
#define SYMOPT_OVERWRITE 0x00100000 #define SYMOPT_OVERWRITE 0x00100000
#define SYMOPT_IGNORE_IMAGEDIR 0x00200000 #define SYMOPT_IGNORE_IMAGEDIR 0x00200000
#define SYMOPT_FLAT_DIRECTORY 0x00400000 #define SYMOPT_FLAT_DIRECTORY 0x00400000
#define SYMOPT_FAVOR_COMPRESSED 0x00800000 #define SYMOPT_FAVOR_COMPRESSED 0x00800000
#define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000 #define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000
#define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000 #define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000
#define SYMOPT_READONLY_CACHE 0x04000000
#define SYMOPT_SYMPATH_LAST 0x08000000
#define SYMOPT_DISABLE_FAST_SYMBOLS 0x10000000
#define SYMOPT_DISABLE_SYMSRV_TIMEOUT 0x20000000
#define SYMOPT_DISABLE_SRVSTAR_ON_STARTUP 0x40000000
#define SYMOPT_DEBUG 0x80000000 #define SYMOPT_DEBUG 0x80000000
DWORD DWORD
IMAGEAPI IMAGEAPI
SymSetOptions( SymSetOptions(
__in DWORD SymOptions _In_ DWORD SymOptions
); );
DWORD DWORD
IMAGEAPI IMAGEAPI
SymGetOptions( SymGetOptions(
VOID VOID
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymCleanup( SymCleanup(
__in HANDLE hProcess _In_ HANDLE hProcess
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymMatchString( SymMatchString(
__in PCSTR string, _In_ PCSTR string,
__in PCSTR expression, _In_ PCSTR expression,
__in BOOL fCase _In_ BOOL fCase
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymMatchStringA( SymMatchStringA(
__in PCSTR string, _In_ PCSTR string,
__in PCSTR expression, _In_ PCSTR expression,
__in BOOL fCase _In_ BOOL fCase
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymMatchStringW( SymMatchStringW(
__in PCWSTR string, _In_ PCWSTR string,
__in PCWSTR expression, _In_ PCWSTR expression,
__in BOOL fCase _In_ BOOL fCase
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)( (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(
__in PSOURCEFILE pSourceFile, _In_ PSOURCEFILE pSourceFile,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
// for backwards compatibility - don't use this // for backwards compatibility - don't use this
#define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK #define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSourceFiles( SymEnumSourceFiles(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 ModBase, _In_ ULONG64 ModBase,
__in_opt PCSTR Mask, _In_opt_ PCSTR Mask,
__in PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles, _In_ PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)( (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(
__in PSOURCEFILEW pSourceFile, _In_ PSOURCEFILEW pSourceFile,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSourceFilesW( SymEnumSourceFilesW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 ModBase, _In_ ULONG64 ModBase,
__in_opt PCWSTR Mask, _In_opt_ PCWSTR Mask,
__in PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles, _In_ PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateModules64( SymEnumerateModules64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, _In_ PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateModulesW64( SymEnumerateModulesW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback, _In_ PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymEnumerateModules SymEnumerateModules64 #define SymEnumerateModules SymEnumerateModules64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateModules( SymEnumerateModules(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, _In_ PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumerateLoadedModulesEx( EnumerateLoadedModulesEx(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback, _In_ PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumerateLoadedModulesExW( EnumerateLoadedModulesExW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback, _In_ PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumerateLoadedModules64( EnumerateLoadedModules64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback, _In_ PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumerateLoadedModulesW64( EnumerateLoadedModulesW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback, _In_ PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define EnumerateLoadedModules EnumerateLoadedModules64 #define EnumerateLoadedModules EnumerateLoadedModules64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
EnumerateLoadedModules( EnumerateLoadedModules(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback, _In_ PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#endif #endif
PVOID PVOID
IMAGEAPI IMAGEAPI
SymFunctionTableAccess64( SymFunctionTableAccess64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 AddrBase _In_ DWORD64 AddrBase
);
PVOID
IMAGEAPI
SymFunctionTableAccess64AccessRoutines(
_In_ HANDLE hProcess,
_In_ DWORD64 AddrBase,
_In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
_In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymFunctionTableAccess SymFunctionTableAccess64 #define SymFunctionTableAccess SymFunctionTableAccess64
#else #else
PVOID PVOID
IMAGEAPI IMAGEAPI
SymFunctionTableAccess( SymFunctionTableAccess(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD AddrBase _In_ DWORD AddrBase
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetUnwindInfo( SymGetUnwindInfo(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Address, _In_ DWORD64 Address,
__out_bcount_opt(*Size) PVOID Buffer, _Out_writes_bytes_opt_(*Size) PVOID Buffer,
__inout PULONG Size _Inout_ PULONG Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetModuleInfo64( SymGetModuleInfo64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 qwAddr, _In_ DWORD64 qwAddr,
__out PIMAGEHLP_MODULE64 ModuleInfo _Out_ PIMAGEHLP_MODULE64 ModuleInfo
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetModuleInfoW64( SymGetModuleInfoW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 qwAddr, _In_ DWORD64 qwAddr,
__out PIMAGEHLP_MODULEW64 ModuleInfo _Out_ PIMAGEHLP_MODULEW64 ModuleInfo
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetModuleInfo SymGetModuleInfo64 #define SymGetModuleInfo SymGetModuleInfo64
#define SymGetModuleInfoW SymGetModuleInfoW64 #define SymGetModuleInfoW SymGetModuleInfoW64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetModuleInfo( SymGetModuleInfo(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD dwAddr, _In_ DWORD dwAddr,
__out PIMAGEHLP_MODULE ModuleInfo _Out_ PIMAGEHLP_MODULE ModuleInfo
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetModuleInfoW( SymGetModuleInfoW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD dwAddr, _In_ DWORD dwAddr,
__out PIMAGEHLP_MODULEW ModuleInfo _Out_ PIMAGEHLP_MODULEW ModuleInfo
); );
#endif #endif
DWORD64 DWORD64
IMAGEAPI IMAGEAPI
SymGetModuleBase64( SymGetModuleBase64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 qwAddr _In_ DWORD64 qwAddr
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetModuleBase SymGetModuleBase64 #define SymGetModuleBase SymGetModuleBase64
#else #else
DWORD DWORD
IMAGEAPI IMAGEAPI
SymGetModuleBase( SymGetModuleBase(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD dwAddr _In_ DWORD dwAddr
); );
#endif #endif
typedef struct _SRCCODEINFO { typedef struct _SRCCODEINFO {
DWORD SizeOfStruct; // set to sizeof(SRCCODEINFO) DWORD SizeOfStruct; // set to sizeof(SRCCODEINFO)
PVOID Key; // not used PVOID Key; // not used
DWORD64 ModBase; // base address of module this applies to DWORD64 ModBase; // base address of module this applies to
CHAR Obj[MAX_PATH + 1]; // the object file within the module CHAR Obj[MAX_PATH + 1]; // the object file within the module
CHAR FileName[MAX_PATH + 1]; // full filename CHAR FileName[MAX_PATH + 1]; // full filename
DWORD LineNumber; // line number in file DWORD LineNumber; // line number in file
skipping to change at line 1836 skipping to change at line 1852
PVOID Key; // not used PVOID Key; // not used
DWORD64 ModBase; // base address of module this applies to DWORD64 ModBase; // base address of module this applies to
WCHAR Obj[MAX_PATH + 1]; // the object file within the module WCHAR Obj[MAX_PATH + 1]; // the object file within the module
WCHAR FileName[MAX_PATH + 1]; // full filename WCHAR FileName[MAX_PATH + 1]; // full filename
DWORD LineNumber; // line number in file DWORD LineNumber; // line number in file
DWORD64 Address; // first instruction of line DWORD64 Address; // first instruction of line
} SRCCODEINFOW, *PSRCCODEINFOW; } SRCCODEINFOW, *PSRCCODEINFOW;
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMLINES_CALLBACK)( (CALLBACK *PSYM_ENUMLINES_CALLBACK)(
__in PSRCCODEINFO LineInfo, _In_ PSRCCODEINFO LineInfo,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumLines( SymEnumLines(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCSTR Obj, _In_opt_ PCSTR Obj,
__in_opt PCSTR File, _In_opt_ PCSTR File,
__in PSYM_ENUMLINES_CALLBACK EnumLinesCallback, _In_ PSYM_ENUMLINES_CALLBACK EnumLinesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMLINES_CALLBACKW)( (CALLBACK *PSYM_ENUMLINES_CALLBACKW)(
__in PSRCCODEINFOW LineInfo, _In_ PSRCCODEINFOW LineInfo,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumLinesW( SymEnumLinesW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCWSTR Obj, _In_opt_ PCWSTR Obj,
__in_opt PCWSTR File, _In_opt_ PCWSTR File,
__in PSYM_ENUMLINES_CALLBACKW EnumLinesCallback, _In_ PSYM_ENUMLINES_CALLBACKW EnumLinesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromAddr64( SymGetLineFromAddr64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 qwAddr, _In_ DWORD64 qwAddr,
__out PDWORD pdwDisplacement, _Out_ PDWORD pdwDisplacement,
__out PIMAGEHLP_LINE64 Line64 _Out_ PIMAGEHLP_LINE64 Line64
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromAddrW64( SymGetLineFromAddrW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 dwAddr, _In_ DWORD64 dwAddr,
__out PDWORD pdwDisplacement, _Out_ PDWORD pdwDisplacement,
__out PIMAGEHLP_LINEW64 Line _Out_ PIMAGEHLP_LINEW64 Line
);
BOOL
IMAGEAPI
SymGetLineFromInlineContext(
_In_ HANDLE hProcess,
_In_ DWORD64 qwAddr,
_In_ ULONG InlineContext,
_In_opt_ DWORD64 qwModuleBaseAddress,
_Out_ PDWORD pdwDisplacement,
_Out_ PIMAGEHLP_LINE64 Line64
);
BOOL
IMAGEAPI
SymGetLineFromInlineContextW(
_In_ HANDLE hProcess,
_In_ DWORD64 dwAddr,
_In_ ULONG InlineContext,
_In_opt_ DWORD64 qwModuleBaseAddress,
_Out_ PDWORD pdwDisplacement,
_Out_ PIMAGEHLP_LINEW64 Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSourceLines( SymEnumSourceLines(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCSTR Obj, _In_opt_ PCSTR Obj,
__in_opt PCSTR File, _In_opt_ PCSTR File,
__in_opt DWORD Line, _In_opt_ DWORD Line,
__in DWORD Flags, _In_ DWORD Flags,
__in PSYM_ENUMLINES_CALLBACK EnumLinesCallback, _In_ PSYM_ENUMLINES_CALLBACK EnumLinesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSourceLinesW( SymEnumSourceLinesW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCWSTR Obj, _In_opt_ PCWSTR Obj,
__in_opt PCWSTR File, _In_opt_ PCWSTR File,
__in_opt DWORD Line, _In_opt_ DWORD Line,
__in DWORD Flags, _In_ DWORD Flags,
__in PSYM_ENUMLINES_CALLBACKW EnumLinesCallback, _In_ PSYM_ENUMLINES_CALLBACKW EnumLinesCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
);
// Check whether input Address includes "inline stack".
DWORD
IMAGEAPI
SymAddrIncludeInlineTrace(
_In_ HANDLE hProcess,
_In_ DWORD64 Address
);
#define SYM_INLINE_COMP_ERROR 0
#define SYM_INLINE_COMP_IDENTICAL 1
#define SYM_INLINE_COMP_STEPIN 2
#define SYM_INLINE_COMP_STEPOUT 3
#define SYM_INLINE_COMP_STEPOVER 4
#define SYM_INLINE_COMP_DIFFERENT 5
// Compare the "inline stack" from the 2 input addresses and determine whether t
he difference is possibly from
// what execution control operation. The return value would be onr of the litera
ls defined above.
DWORD
IMAGEAPI
SymCompareInlineTrace(
_In_ HANDLE hProcess,
_In_ DWORD64 Address1,
_In_ DWORD InlineContext1,
_In_ DWORD64 RetAddress1,
_In_ DWORD64 Address2,
_In_ DWORD64 RetAddress2
);
BOOL
IMAGEAPI
SymQueryInlineTrace(
_In_ HANDLE hProcess,
_In_ DWORD64 StartAddress,
_In_ DWORD StartContext,
_In_ DWORD64 StartRetAddress,
_In_ DWORD64 CurAddress,
_Out_ LPDWORD CurContext,
_Out_ LPDWORD CurFrameIndex
); );
// flags for SymEnumSourceLines // flags for SymEnumSourceLines
#define ESLFLAG_FULLPATH 0x1 #define ESLFLAG_FULLPATH 0x00000001
#define ESLFLAG_NEAREST 0x2 #define ESLFLAG_NEAREST 0x00000002
#define ESLFLAG_PREV 0x4 #define ESLFLAG_PREV 0x00000004
#define ESLFLAG_NEXT 0x8 #define ESLFLAG_NEXT 0x00000008
#define ESLFLAG_INLINE_SITE 0x00000010
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetLineFromAddr SymGetLineFromAddr64 #define SymGetLineFromAddr SymGetLineFromAddr64
#define SymGetLineFromAddrW SymGetLineFromAddrW64 #define SymGetLineFromAddrW SymGetLineFromAddrW64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromAddr( SymGetLineFromAddr(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD dwAddr, _In_ DWORD dwAddr,
__out PDWORD pdwDisplacement, _Out_ PDWORD pdwDisplacement,
__out PIMAGEHLP_LINE Line _Out_ PIMAGEHLP_LINE Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromAddrW( SymGetLineFromAddrW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD dwAddr, _In_ DWORD dwAddr,
__out PDWORD pdwDisplacement, _Out_ PDWORD pdwDisplacement,
__out PIMAGEHLP_LINEW Line _Out_ PIMAGEHLP_LINEW Line
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromName64( SymGetLineFromName64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR ModuleName, _In_opt_ PCSTR ModuleName,
__in_opt PCSTR FileName, _In_opt_ PCSTR FileName,
__in DWORD dwLineNumber, _In_ DWORD dwLineNumber,
__out PLONG plDisplacement, _Out_ PLONG plDisplacement,
__inout PIMAGEHLP_LINE64 Line _Inout_ PIMAGEHLP_LINE64 Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromNameW64( SymGetLineFromNameW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR ModuleName, _In_opt_ PCWSTR ModuleName,
__in_opt PCWSTR FileName, _In_opt_ PCWSTR FileName,
__in DWORD dwLineNumber, _In_ DWORD dwLineNumber,
__out PLONG plDisplacement, _Out_ PLONG plDisplacement,
__inout PIMAGEHLP_LINEW64 Line _Inout_ PIMAGEHLP_LINEW64 Line
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetLineFromName SymGetLineFromName64 #define SymGetLineFromName SymGetLineFromName64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineFromName( SymGetLineFromName(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR ModuleName, _In_opt_ PCSTR ModuleName,
__in_opt PCSTR FileName, _In_opt_ PCSTR FileName,
__in DWORD dwLineNumber, _In_ DWORD dwLineNumber,
__out PLONG plDisplacement, _Out_ PLONG plDisplacement,
__inout PIMAGEHLP_LINE Line _Inout_ PIMAGEHLP_LINE Line
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineNext64( SymGetLineNext64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINE64 Line _Inout_ PIMAGEHLP_LINE64 Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineNextW64( SymGetLineNextW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINEW64 Line _Inout_ PIMAGEHLP_LINEW64 Line
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetLineNext SymGetLineNext64 #define SymGetLineNext SymGetLineNext64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineNext( SymGetLineNext(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINE Line _Inout_ PIMAGEHLP_LINE Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLineNextW( SymGetLineNextW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINEW Line _Inout_ PIMAGEHLP_LINEW Line
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLinePrev64( SymGetLinePrev64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINE64 Line _Inout_ PIMAGEHLP_LINE64 Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLinePrevW64( SymGetLinePrevW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINEW64 Line _Inout_ PIMAGEHLP_LINEW64 Line
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetLinePrev SymGetLinePrev64 #define SymGetLinePrev SymGetLinePrev64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLinePrev( SymGetLinePrev(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINE Line _Inout_ PIMAGEHLP_LINE Line
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetLinePrevW( SymGetLinePrevW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_LINEW Line _Inout_ PIMAGEHLP_LINEW Line
); );
#endif #endif
ULONG ULONG
IMAGEAPI IMAGEAPI
SymGetFileLineOffsets64( SymGetFileLineOffsets64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR ModuleName, _In_opt_ PCSTR ModuleName,
__in PCSTR FileName, _In_ PCSTR FileName,
__out_ecount(BufferLines) PDWORD64 Buffer, _Out_writes_(BufferLines) PDWORD64 Buffer,
__in ULONG BufferLines _In_ ULONG BufferLines
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymMatchFileName( SymMatchFileName(
__in PCSTR FileName, _In_ PCSTR FileName,
__in PCSTR Match, _In_ PCSTR Match,
__deref_opt_out PSTR *FileNameStop, _Outptr_opt_ PSTR *FileNameStop,
__deref_opt_out PSTR *MatchStop _Outptr_opt_ PSTR *MatchStop
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymMatchFileNameW( SymMatchFileNameW(
__in PCWSTR FileName, _In_ PCWSTR FileName,
__in PCWSTR Match, _In_ PCWSTR Match,
__deref_opt_out PWSTR *FileNameStop, _Outptr_opt_ PWSTR *FileNameStop,
__deref_opt_out PWSTR *MatchStop _Outptr_opt_ PWSTR *MatchStop
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceFile( SymGetSourceFile(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCSTR Params, _In_opt_ PCSTR Params,
__in PCSTR FileSpec, _In_ PCSTR FileSpec,
__out_ecount(Size) PSTR FilePath, _Out_writes_(Size) PSTR FilePath,
__in DWORD Size _In_ DWORD Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceFileW( SymGetSourceFileW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCWSTR Params, _In_opt_ PCWSTR Params,
__in PCWSTR FileSpec, _In_ PCWSTR FileSpec,
__out_ecount(Size) PWSTR FilePath, _Out_writes_(Size) PWSTR FilePath,
__in DWORD Size _In_ DWORD Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceFileToken( SymGetSourceFileToken(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in PCSTR FileSpec, _In_ PCSTR FileSpec,
__deref_out PVOID *Token, _Outptr_ PVOID *Token,
__out DWORD *Size _Out_ DWORD *Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceFileTokenW( SymGetSourceFileTokenW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in PCWSTR FileSpec, _In_ PCWSTR FileSpec,
__deref_out PVOID *Token, _Outptr_ PVOID *Token,
__out DWORD *Size _Out_ DWORD *Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceFileFromToken( SymGetSourceFileFromToken(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PVOID Token, _In_ PVOID Token,
__in_opt PCSTR Params, _In_opt_ PCSTR Params,
__out_ecount(Size) PSTR FilePath, _Out_writes_(Size) PSTR FilePath,
__in DWORD Size _In_ DWORD Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceFileFromTokenW( SymGetSourceFileFromTokenW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PVOID Token, _In_ PVOID Token,
__in_opt PCWSTR Params, _In_opt_ PCWSTR Params,
__out_ecount(Size) PWSTR FilePath, _Out_writes_(Size) PWSTR FilePath,
__in DWORD Size _In_ DWORD Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceVarFromToken( SymGetSourceVarFromToken(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PVOID Token, _In_ PVOID Token,
__in_opt PCSTR Params, _In_opt_ PCSTR Params,
__in PCSTR VarName, _In_ PCSTR VarName,
__out_ecount(Size) PSTR Value, _Out_writes_(Size) PSTR Value,
__in DWORD Size _In_ DWORD Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSourceVarFromTokenW( SymGetSourceVarFromTokenW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PVOID Token, _In_ PVOID Token,
__in_opt PCWSTR Params, _In_opt_ PCWSTR Params,
__in PCWSTR VarName, _In_ PCWSTR VarName,
__out_ecount(Size) PWSTR Value, _Out_writes_(Size) PWSTR Value,
__in DWORD Size _In_ DWORD Size
); );
typedef BOOL (CALLBACK *PENUMSOURCEFILETOKENSCALLBACK)(__in PVOID token, __in s ize_t size); typedef BOOL (CALLBACK *PENUMSOURCEFILETOKENSCALLBACK)(_In_ PVOID token, _In_ s ize_t size);
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSourceFileTokens( SymEnumSourceFileTokens(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in PENUMSOURCEFILETOKENSCALLBACK Callback _In_ PENUMSOURCEFILETOKENSCALLBACK Callback
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymInitialize( SymInitialize(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR UserSearchPath, _In_opt_ PCSTR UserSearchPath,
__in BOOL fInvadeProcess _In_ BOOL fInvadeProcess
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymInitializeW( SymInitializeW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR UserSearchPath, _In_opt_ PCWSTR UserSearchPath,
__in BOOL fInvadeProcess _In_ BOOL fInvadeProcess
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSearchPath( SymGetSearchPath(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__out_ecount(SearchPathLength) PSTR SearchPath, _Out_writes_(SearchPathLength) PSTR SearchPath,
__in DWORD SearchPathLength _In_ DWORD SearchPathLength
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSearchPathW( SymGetSearchPathW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__out_ecount(SearchPathLength) PWSTR SearchPath, _Out_writes_(SearchPathLength) PWSTR SearchPath,
__in DWORD SearchPathLength _In_ DWORD SearchPathLength
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSetSearchPath( SymSetSearchPath(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR SearchPath _In_opt_ PCSTR SearchPath
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSetSearchPathW( SymSetSearchPathW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR SearchPath _In_opt_ PCWSTR SearchPath
); );
#define SLMFLAG_VIRTUAL 0x1 #define SLMFLAG_VIRTUAL 0x1
#define SLMFLAG_ALT_INDEX 0x2 #define SLMFLAG_ALT_INDEX 0x2
#define SLMFLAG_NO_SYMBOLS 0x4 #define SLMFLAG_NO_SYMBOLS 0x4
DWORD64 DWORD64
IMAGEAPI IMAGEAPI
SymLoadModuleEx( SymLoadModuleEx(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt HANDLE hFile, _In_opt_ HANDLE hFile,
__in_opt PCSTR ImageName, _In_opt_ PCSTR ImageName,
__in_opt PCSTR ModuleName, _In_opt_ PCSTR ModuleName,
__in DWORD64 BaseOfDll, _In_ DWORD64 BaseOfDll,
__in DWORD DllSize, _In_ DWORD DllSize,
__in_opt PMODLOAD_DATA Data, _In_opt_ PMODLOAD_DATA Data,
__in_opt DWORD Flags _In_opt_ DWORD Flags
); );
DWORD64 DWORD64
IMAGEAPI IMAGEAPI
SymLoadModuleExW( SymLoadModuleExW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt HANDLE hFile, _In_opt_ HANDLE hFile,
__in_opt PCWSTR ImageName, _In_opt_ PCWSTR ImageName,
__in_opt PCWSTR ModuleName, _In_opt_ PCWSTR ModuleName,
__in DWORD64 BaseOfDll, _In_ DWORD64 BaseOfDll,
__in DWORD DllSize, _In_ DWORD DllSize,
__in_opt PMODLOAD_DATA Data, _In_opt_ PMODLOAD_DATA Data,
__in_opt DWORD Flags _In_opt_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymUnloadModule64( SymUnloadModule64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 BaseOfDll _In_ DWORD64 BaseOfDll
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymUnloadModule SymUnloadModule64 #define SymUnloadModule SymUnloadModule64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymUnloadModule( SymUnloadModule(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD BaseOfDll _In_ DWORD BaseOfDll
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymUnDName64( SymUnDName64(
__in PIMAGEHLP_SYMBOL64 sym, // Symbol to undecorate _In_ PIMAGEHLP_SYMBOL64 sym, // Symbol to undecorate
__out_ecount(UnDecNameLength) PSTR UnDecName, // Buffer to store undecorat _Out_writes_(UnDecNameLength) PSTR UnDecName, // Buffer to store undecorat
ed name in ed name in
__in DWORD UnDecNameLength // Size of the buffer _In_ DWORD UnDecNameLength // Size of the buffer
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymUnDName SymUnDName64 #define SymUnDName SymUnDName64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymUnDName( SymUnDName(
__in PIMAGEHLP_SYMBOL sym, // Symbol to undecorate _In_ PIMAGEHLP_SYMBOL sym, // Symbol to undecorate
__out_ecount(UnDecNameLength) PSTR UnDecName, // Buffer to store undecorat _Out_writes_(UnDecNameLength) PSTR UnDecName, // Buffer to store undecorat
ed name in ed name in
__in DWORD UnDecNameLength // Size of the buffer _In_ DWORD UnDecNameLength // Size of the buffer
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymRegisterCallback64( SymRegisterCallback64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, _In_ PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,
__in ULONG64 UserContext _In_ ULONG64 UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymRegisterCallbackW64( SymRegisterCallbackW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, _In_ PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,
__in ULONG64 UserContext _In_ ULONG64 UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymRegisterFunctionEntryCallback64( SymRegisterFunctionEntryCallback64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction, _In_ PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,
__in ULONG64 UserContext _In_ ULONG64 UserContext
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymRegisterCallback SymRegisterCallback64 #define SymRegisterCallback SymRegisterCallback64
#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64 #define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymRegisterCallback( SymRegisterCallback(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYMBOL_REGISTERED_CALLBACK CallbackFunction, _In_ PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymRegisterFunctionEntryCallback( SymRegisterFunctionEntryCallback(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction, _In_ PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#endif #endif
typedef struct _IMAGEHLP_SYMBOL_SRC { typedef struct _IMAGEHLP_SYMBOL_SRC {
DWORD sizeofstruct; DWORD sizeofstruct;
DWORD type; DWORD type;
char file[MAX_PATH]; char file[MAX_PATH];
} IMAGEHLP_SYMBOL_SRC, *PIMAGEHLP_SYMBOL_SRC; } IMAGEHLP_SYMBOL_SRC, *PIMAGEHLP_SYMBOL_SRC;
typedef struct _MODULE_TYPE_INFO { // AKA TYPTYP typedef struct _MODULE_TYPE_INFO { // AKA TYPTYP
skipping to change at line 2401 skipping to change at line 2480
ULONG64 Reserved[5]; ULONG64 Reserved[5];
BOOL Virtual; BOOL Virtual;
ULONG Reserved2; ULONG Reserved2;
} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSetContext( SymSetContext(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PIMAGEHLP_STACK_FRAME StackFrame, _In_ PIMAGEHLP_STACK_FRAME StackFrame,
__in_opt PIMAGEHLP_CONTEXT Context _In_opt_ PIMAGEHLP_CONTEXT Context
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSetScopeFromAddr( SymSetScopeFromAddr(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Address _In_ ULONG64 Address
);
BOOL
IMAGEAPI
SymSetScopeFromInlineContext(
_In_ HANDLE hProcess,
_In_ ULONG64 Address,
_In_ ULONG InlineContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSetScopeFromIndex( SymSetScopeFromIndex(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in DWORD Index _In_ DWORD Index
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMPROCESSES_CALLBACK)( (CALLBACK *PSYM_ENUMPROCESSES_CALLBACK)(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PVOID UserContext _In_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumProcesses( SymEnumProcesses(
__in PSYM_ENUMPROCESSES_CALLBACK EnumProcessesCallback, _In_ PSYM_ENUMPROCESSES_CALLBACK EnumProcessesCallback,
__in PVOID UserContext _In_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromAddr( SymFromAddr(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Address, _In_ DWORD64 Address,
__out_opt PDWORD64 Displacement, _Out_opt_ PDWORD64 Displacement,
__inout PSYMBOL_INFO Symbol _Inout_ PSYMBOL_INFO Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromAddrW( SymFromAddrW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Address, _In_ DWORD64 Address,
__out_opt PDWORD64 Displacement, _Out_opt_ PDWORD64 Displacement,
__inout PSYMBOL_INFOW Symbol _Inout_ PSYMBOL_INFOW Symbol
);
BOOL
IMAGEAPI
SymFromInlineContext(
_In_ HANDLE hProcess,
_In_ DWORD64 Address,
_In_ ULONG InlineContext,
_Out_opt_ PDWORD64 Displacement,
_Inout_ PSYMBOL_INFO Symbol
);
BOOL
IMAGEAPI
SymFromInlineContextW(
_In_ HANDLE hProcess,
_In_ DWORD64 Address,
_In_ ULONG InlineContext,
_Out_opt_ PDWORD64 Displacement,
_Inout_ PSYMBOL_INFOW Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromToken( SymFromToken(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Base, _In_ DWORD64 Base,
__in DWORD Token, _In_ DWORD Token,
__inout PSYMBOL_INFO Symbol _Inout_ PSYMBOL_INFO Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromTokenW( SymFromTokenW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Base, _In_ DWORD64 Base,
__in DWORD Token, _In_ DWORD Token,
__inout PSYMBOL_INFOW Symbol _Inout_ PSYMBOL_INFOW Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymNext( SymNext(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PSYMBOL_INFO si _Inout_ PSYMBOL_INFO si
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymNextW( SymNextW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PSYMBOL_INFOW siw _Inout_ PSYMBOL_INFOW siw
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymPrev( SymPrev(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PSYMBOL_INFO si _Inout_ PSYMBOL_INFO si
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymPrevW( SymPrevW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PSYMBOL_INFOW siw _Inout_ PSYMBOL_INFOW siw
); );
// While SymFromName will provide a symbol from a name, // While SymFromName will provide a symbol from a name,
// SymEnumSymbols can provide the same matching information // SymEnumSymbols can provide the same matching information
// for ALL symbols with a matching name, even regular // for ALL symbols with a matching name, even regular
// expressions. That way you can search across modules // expressions. That way you can search across modules
// and differentiate between identically named symbols. // and differentiate between identically named symbols.
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromName( SymFromName(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCSTR Name, _In_ PCSTR Name,
__inout PSYMBOL_INFO Symbol _Inout_ PSYMBOL_INFO Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromNameW( SymFromNameW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCWSTR Name, _In_ PCWSTR Name,
__inout PSYMBOL_INFOW Symbol _Inout_ PSYMBOL_INFOW Symbol
); );
#define SYMENUM_OPTIONS_DEFAULT 0x00000001
#define SYMENUM_OPTIONS_INLINE 0x00000002
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)( (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(
__in PSYMBOL_INFO pSymInfo, _In_ PSYMBOL_INFO pSymInfo,
__in ULONG SymbolSize, _In_ ULONG SymbolSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSymbols( SymEnumSymbols(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt PCSTR Mask, _In_opt_ PCSTR Mask,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
);
BOOL
IMAGEAPI
SymEnumSymbolsEx(
_In_ HANDLE hProcess,
_In_ ULONG64 BaseOfDll,
_In_opt_ PCSTR Mask,
_In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
_In_opt_ PVOID UserContext,
_In_ DWORD Options
); );
typedef BOOL typedef BOOL
(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)( (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(
__in PSYMBOL_INFOW pSymInfo, _In_ PSYMBOL_INFOW pSymInfo,
__in ULONG SymbolSize, _In_ ULONG SymbolSize,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSymbolsW( SymEnumSymbolsW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt PCWSTR Mask, _In_opt_ PCWSTR Mask,
__in PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
);
BOOL
IMAGEAPI
SymEnumSymbolsExW(
_In_ HANDLE hProcess,
_In_ ULONG64 BaseOfDll,
_In_opt_ PCWSTR Mask,
_In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
_In_opt_ PVOID UserContext,
_In_ DWORD Options
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSymbolsForAddr( SymEnumSymbolsForAddr(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Address, _In_ DWORD64 Address,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSymbolsForAddrW( SymEnumSymbolsForAddrW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 Address, _In_ DWORD64 Address,
__in PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#define SYMSEARCH_MASKOBJS 0x01 // used internally to implement other AP Is #define SYMSEARCH_MASKOBJS 0x01 // used internally to implement other AP Is
#define SYMSEARCH_RECURSE 0X02 // recurse scopes #define SYMSEARCH_RECURSE 0X02 // recurse scopes
#define SYMSEARCH_GLOBALSONLY 0X04 // search only for global symbols #define SYMSEARCH_GLOBALSONLY 0X04 // search only for global symbols
#define SYMSEARCH_ALLITEMS 0X08 // search for everything in the pdb, not just normal scoped symbols #define SYMSEARCH_ALLITEMS 0X08 // search for everything in the pdb, not just normal scoped symbols
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSearch( SymSearch(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt DWORD Index, _In_opt_ DWORD Index,
__in_opt DWORD SymTag, _In_opt_ DWORD SymTag,
__in_opt PCSTR Mask, _In_opt_ PCSTR Mask,
__in_opt DWORD64 Address, _In_opt_ DWORD64 Address,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext, _In_opt_ PVOID UserContext,
__in DWORD Options _In_ DWORD Options
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSearchW( SymSearchW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt DWORD Index, _In_opt_ DWORD Index,
__in_opt DWORD SymTag, _In_opt_ DWORD SymTag,
__in_opt PCWSTR Mask, _In_opt_ PCWSTR Mask,
__in_opt DWORD64 Address, _In_opt_ DWORD64 Address,
__in PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
__in_opt PVOID UserContext, _In_opt_ PVOID UserContext,
__in DWORD Options _In_ DWORD Options
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetScope( SymGetScope(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in DWORD Index, _In_ DWORD Index,
__inout PSYMBOL_INFO Symbol _Inout_ PSYMBOL_INFO Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetScopeW( SymGetScopeW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in DWORD Index, _In_ DWORD Index,
__inout PSYMBOL_INFOW Symbol _Inout_ PSYMBOL_INFOW Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromIndex( SymFromIndex(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in DWORD Index, _In_ DWORD Index,
__inout PSYMBOL_INFO Symbol _Inout_ PSYMBOL_INFO Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymFromIndexW( SymFromIndexW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in DWORD Index, _In_ DWORD Index,
__inout PSYMBOL_INFOW Symbol _Inout_ PSYMBOL_INFOW Symbol
); );
typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
TI_GET_SYMTAG, TI_GET_SYMTAG,
TI_GET_SYMNAME, TI_GET_SYMNAME,
TI_GET_LENGTH, TI_GET_LENGTH,
TI_GET_TYPE, TI_GET_TYPE,
TI_GET_TYPEID, TI_GET_TYPEID,
TI_GET_BASETYPE, TI_GET_BASETYPE,
TI_GET_ARRAYINDEXTYPEID, TI_GET_ARRAYINDEXTYPEID,
skipping to change at line 2675 skipping to change at line 2807
TI_GET_THISADJUST, TI_GET_THISADJUST,
TI_GET_UDTKIND, TI_GET_UDTKIND,
TI_IS_EQUIV_TO, TI_IS_EQUIV_TO,
TI_GET_CALLING_CONVENTION, TI_GET_CALLING_CONVENTION,
TI_IS_CLOSE_EQUIV_TO, TI_IS_CLOSE_EQUIV_TO,
TI_GTIEX_REQS_VALID, TI_GTIEX_REQS_VALID,
TI_GET_VIRTUALBASEOFFSET, TI_GET_VIRTUALBASEOFFSET,
TI_GET_VIRTUALBASEDISPINDEX, TI_GET_VIRTUALBASEDISPINDEX,
TI_GET_IS_REFERENCE, TI_GET_IS_REFERENCE,
TI_GET_INDIRECTVIRTUALBASECLASS, TI_GET_INDIRECTVIRTUALBASECLASS,
TI_GET_VIRTUALBASETABLETYPE,
IMAGEHLP_SYMBOL_TYPE_INFO_MAX, IMAGEHLP_SYMBOL_TYPE_INFO_MAX,
} IMAGEHLP_SYMBOL_TYPE_INFO; } IMAGEHLP_SYMBOL_TYPE_INFO;
typedef struct _TI_FINDCHILDREN_PARAMS { typedef struct _TI_FINDCHILDREN_PARAMS {
ULONG Count; ULONG Count;
ULONG Start; ULONG Start;
ULONG ChildId[1]; ULONG ChildId[1];
} TI_FINDCHILDREN_PARAMS; } TI_FINDCHILDREN_PARAMS;
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetTypeInfo( SymGetTypeInfo(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 ModBase, _In_ DWORD64 ModBase,
__in ULONG TypeId, _In_ ULONG TypeId,
__in IMAGEHLP_SYMBOL_TYPE_INFO GetType, _In_ IMAGEHLP_SYMBOL_TYPE_INFO GetType,
__out PVOID pInfo _Out_ PVOID pInfo
); );
#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001 #define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001
#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002 #define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002
typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS {
IN ULONG SizeOfStruct; IN ULONG SizeOfStruct;
IN ULONG Flags; IN ULONG Flags;
IN ULONG NumIds; IN ULONG NumIds;
IN PULONG TypeIds; IN PULONG TypeIds;
skipping to change at line 2721 skipping to change at line 2854
OUT ULONG EntriesFilled; OUT ULONG EntriesFilled;
OUT ULONG64 TagsFound; OUT ULONG64 TagsFound;
OUT ULONG64 AllReqsValid; OUT ULONG64 AllReqsValid;
IN ULONG NumReqsValid; IN ULONG NumReqsValid;
OUT PULONG64 ReqsValid OPTIONAL; OUT PULONG64 ReqsValid OPTIONAL;
} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetTypeInfoEx( SymGetTypeInfoEx(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 ModBase, _In_ DWORD64 ModBase,
__inout PIMAGEHLP_GET_TYPE_INFO_PARAMS Params _Inout_ PIMAGEHLP_GET_TYPE_INFO_PARAMS Params
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumTypes( SymEnumTypes(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumTypesW( SymEnumTypesW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumTypesByName( SymEnumTypesByName(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt PCSTR mask, _In_opt_ PCSTR mask,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumTypesByNameW( SymEnumTypesByNameW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt PCWSTR mask, _In_opt_ PCWSTR mask,
__in PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetTypeFromName( SymGetTypeFromName(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PCSTR Name, _In_ PCSTR Name,
__inout PSYMBOL_INFO Symbol _Inout_ PSYMBOL_INFO Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetTypeFromNameW( SymGetTypeFromNameW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PCWSTR Name, _In_ PCWSTR Name,
__inout PSYMBOL_INFOW Symbol _Inout_ PSYMBOL_INFOW Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymAddSymbol( SymAddSymbol(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PCSTR Name, _In_ PCSTR Name,
__in DWORD64 Address, _In_ DWORD64 Address,
__in DWORD Size, _In_ DWORD Size,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymAddSymbolW( SymAddSymbolW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PCWSTR Name, _In_ PCWSTR Name,
__in DWORD64 Address, _In_ DWORD64 Address,
__in DWORD Size, _In_ DWORD Size,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymDeleteSymbol( SymDeleteSymbol(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt PCSTR Name, _In_opt_ PCSTR Name,
__in DWORD64 Address, _In_ DWORD64 Address,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymDeleteSymbolW( SymDeleteSymbolW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in_opt PCWSTR Name, _In_opt_ PCWSTR Name,
__in DWORD64 Address, _In_ DWORD64 Address,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymRefreshModuleList( SymRefreshModuleList(
__in HANDLE hProcess _In_ HANDLE hProcess
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymAddSourceStream( SymAddSourceStream(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCSTR StreamFile, _In_opt_ PCSTR StreamFile,
__in_bcount_opt(Size) PBYTE Buffer, _In_reads_bytes_opt_(Size) PBYTE Buffer,
__in size_t Size _In_ size_t Size
); );
typedef BOOL (WINAPI *SYMADDSOURCESTREAM)(HANDLE, ULONG64, PCSTR, PBYTE, size_t) ; typedef BOOL (WINAPI *SYMADDSOURCESTREAM)(HANDLE, ULONG64, PCSTR, PBYTE, size_t) ;
BOOL BOOL
IMAGEAPI IMAGEAPI
SymAddSourceStreamA( SymAddSourceStreamA(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCSTR StreamFile, _In_opt_ PCSTR StreamFile,
__in_bcount_opt(Size) PBYTE Buffer, _In_reads_bytes_opt_(Size) PBYTE Buffer,
__in size_t Size _In_ size_t Size
); );
typedef BOOL (WINAPI *SYMADDSOURCESTREAMA)(HANDLE, ULONG64, PCSTR, PBYTE, size_t ); typedef BOOL (WINAPI *SYMADDSOURCESTREAMA)(HANDLE, ULONG64, PCSTR, PBYTE, size_t );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymAddSourceStreamW( SymAddSourceStreamW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 Base, _In_ ULONG64 Base,
__in_opt PCWSTR FileSpec, _In_opt_ PCWSTR FileSpec,
__in_bcount_opt(Size) PBYTE Buffer, _In_reads_bytes_opt_(Size) PBYTE Buffer,
__in size_t Size _In_ size_t Size
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvIsStoreW( SymSrvIsStoreW(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in PCWSTR path _In_ PCWSTR path
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvIsStore( SymSrvIsStore(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in PCSTR path _In_ PCSTR path
); );
PCSTR PCSTR
IMAGEAPI IMAGEAPI
SymSrvDeltaName( SymSrvDeltaName(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR SymPath, _In_opt_ PCSTR SymPath,
__in PCSTR Type, _In_ PCSTR Type,
__in PCSTR File1, _In_ PCSTR File1,
__in PCSTR File2 _In_ PCSTR File2
); );
PCWSTR PCWSTR
IMAGEAPI IMAGEAPI
SymSrvDeltaNameW( SymSrvDeltaNameW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR SymPath, _In_opt_ PCWSTR SymPath,
__in PCWSTR Type, _In_ PCWSTR Type,
__in PCWSTR File1, _In_ PCWSTR File1,
__in PCWSTR File2 _In_ PCWSTR File2
); );
PCSTR PCSTR
IMAGEAPI IMAGEAPI
SymSrvGetSupplement( SymSrvGetSupplement(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR SymPath, _In_opt_ PCSTR SymPath,
__in PCSTR Node, _In_ PCSTR Node,
__in PCSTR File _In_ PCSTR File
); );
PCWSTR PCWSTR
IMAGEAPI IMAGEAPI
SymSrvGetSupplementW( SymSrvGetSupplementW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR SymPath, _In_opt_ PCWSTR SymPath,
__in PCWSTR Node, _In_ PCWSTR Node,
__in PCWSTR File _In_ PCWSTR File
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvGetFileIndexes( SymSrvGetFileIndexes(
__in PCSTR File, _In_ PCSTR File,
__out GUID *Id, _Out_ GUID *Id,
__out PDWORD Val1, _Out_ PDWORD Val1,
__out_opt PDWORD Val2, _Out_opt_ PDWORD Val2,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvGetFileIndexesW( SymSrvGetFileIndexesW(
__in PCWSTR File, _In_ PCWSTR File,
__out GUID *Id, _Out_ GUID *Id,
__out PDWORD Val1, _Out_ PDWORD Val1,
__out_opt PDWORD Val2, _Out_opt_ PDWORD Val2,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvGetFileIndexStringW( SymSrvGetFileIndexStringW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR SrvPath, _In_opt_ PCWSTR SrvPath,
__in PCWSTR File, _In_ PCWSTR File,
__out_ecount(Size) PWSTR Index, _Out_writes_(Size) PWSTR Index,
__in size_t Size, _In_ size_t Size,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvGetFileIndexString( SymSrvGetFileIndexString(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR SrvPath, _In_opt_ PCSTR SrvPath,
__in PCSTR File, _In_ PCSTR File,
__out_ecount(Size) PSTR Index, _Out_writes_(Size) PSTR Index,
__in size_t Size, _In_ size_t Size,
__in DWORD Flags _In_ DWORD Flags
); );
typedef struct { typedef struct {
DWORD sizeofstruct; DWORD sizeofstruct;
char file[MAX_PATH +1]; char file[MAX_PATH +1];
BOOL stripped; BOOL stripped;
DWORD timestamp; DWORD timestamp;
DWORD size; DWORD size;
char dbgfile[MAX_PATH +1]; char dbgfile[MAX_PATH +1];
char pdbfile[MAX_PATH + 1]; char pdbfile[MAX_PATH + 1];
skipping to change at line 2987 skipping to change at line 3120
WCHAR dbgfile[MAX_PATH +1]; WCHAR dbgfile[MAX_PATH +1];
WCHAR pdbfile[MAX_PATH + 1]; WCHAR pdbfile[MAX_PATH + 1];
GUID guid; GUID guid;
DWORD sig; DWORD sig;
DWORD age; DWORD age;
} SYMSRV_INDEX_INFOW, *PSYMSRV_INDEX_INFOW; } SYMSRV_INDEX_INFOW, *PSYMSRV_INDEX_INFOW;
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvGetFileIndexInfo( SymSrvGetFileIndexInfo(
__in PCSTR File, _In_ PCSTR File,
__out PSYMSRV_INDEX_INFO Info, _Out_ PSYMSRV_INDEX_INFO Info,
__in DWORD Flags _In_ DWORD Flags
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymSrvGetFileIndexInfoW( SymSrvGetFileIndexInfoW(
__in PCWSTR File, _In_ PCWSTR File,
__out PSYMSRV_INDEX_INFOW Info, _Out_ PSYMSRV_INDEX_INFOW Info,
__in DWORD Flags _In_ DWORD Flags
); );
PCSTR PCSTR
IMAGEAPI IMAGEAPI
SymSrvStoreSupplement( SymSrvStoreSupplement(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR SrvPath, _In_opt_ PCSTR SrvPath,
__in PCSTR Node, _In_ PCSTR Node,
__in PCSTR File, _In_ PCSTR File,
__in DWORD Flags _In_ DWORD Flags
); );
PCWSTR PCWSTR
IMAGEAPI IMAGEAPI
SymSrvStoreSupplementW( SymSrvStoreSupplementW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR SymPath, _In_opt_ PCWSTR SymPath,
__in PCWSTR Node, _In_ PCWSTR Node,
__in PCWSTR File, _In_ PCWSTR File,
__in DWORD Flags _In_ DWORD Flags
); );
PCSTR PCSTR
IMAGEAPI IMAGEAPI
SymSrvStoreFile( SymSrvStoreFile(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCSTR SrvPath, _In_opt_ PCSTR SrvPath,
__in PCSTR File, _In_ PCSTR File,
__in DWORD Flags _In_ DWORD Flags
); );
PCWSTR PCWSTR
IMAGEAPI IMAGEAPI
SymSrvStoreFileW( SymSrvStoreFileW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt PCWSTR SrvPath, _In_opt_ PCWSTR SrvPath,
__in PCWSTR File, _In_ PCWSTR File,
__in DWORD Flags _In_ DWORD Flags
); );
// used by SymGetSymbolFile's "Type" parameter // used by SymGetSymbolFile's "Type" parameter
typedef enum { typedef enum {
sfImage = 0, sfImage = 0,
sfDbg, sfDbg,
sfPdb, sfPdb,
sfMpd, sfMpd,
sfMax sfMax
}; };
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymbolFile( SymGetSymbolFile(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in_opt PCSTR SymPath, _In_opt_ PCSTR SymPath,
__in PCSTR ImageFile, _In_ PCSTR ImageFile,
__in DWORD Type, _In_ DWORD Type,
__out_ecount(cSymbolFile) PSTR SymbolFile, _Out_writes_(cSymbolFile) PSTR SymbolFile,
__in size_t cSymbolFile, _In_ size_t cSymbolFile,
__out_ecount(cDbgFile) PSTR DbgFile, _Out_writes_(cDbgFile) PSTR DbgFile,
__in size_t cDbgFile _In_ size_t cDbgFile
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymbolFileW( SymGetSymbolFileW(
__in_opt HANDLE hProcess, _In_opt_ HANDLE hProcess,
__in_opt PCWSTR SymPath, _In_opt_ PCWSTR SymPath,
__in PCWSTR ImageFile, _In_ PCWSTR ImageFile,
__in DWORD Type, _In_ DWORD Type,
__out_ecount(cSymbolFile) PWSTR SymbolFile, _Out_writes_(cSymbolFile) PWSTR SymbolFile,
__in size_t cSymbolFile, _In_ size_t cSymbolFile,
__out_ecount(cDbgFile) PWSTR DbgFile, _Out_writes_(cDbgFile) PWSTR DbgFile,
__in size_t cDbgFile _In_ size_t cDbgFile
); );
// //
// Full user-mode dump creation. // Full user-mode dump creation.
// //
typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)( typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(
__in DWORD DataType, _In_ DWORD DataType,
__in PVOID* Data, _In_ PVOID* Data,
__out LPDWORD DataLength, _Out_ LPDWORD DataLength,
__in_opt PVOID UserData _In_opt_ PVOID UserData
); );
BOOL BOOL
WINAPI WINAPI
DbgHelpCreateUserDump( DbgHelpCreateUserDump(
__in_opt LPCSTR FileName, _In_opt_ LPCSTR FileName,
__in PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, _In_ PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,
__in_opt PVOID UserData _In_opt_ PVOID UserData
); );
BOOL BOOL
WINAPI WINAPI
DbgHelpCreateUserDumpW( DbgHelpCreateUserDumpW(
__in_opt LPCWSTR FileName, _In_opt_ LPCWSTR FileName,
__in PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, _In_ PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,
__in_opt PVOID UserData _In_opt_ PVOID UserData
); );
// ----------------------------------------------------------------- // -----------------------------------------------------------------
// The following 4 legacy APIs are fully supported, but newer // The following 4 legacy APIs are fully supported, but newer
// ones are recommended. SymFromName and SymFromAddr provide // ones are recommended. SymFromName and SymFromAddr provide
// much more detailed info on the returned symbol. // much more detailed info on the returned symbol.
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymFromAddr64( SymGetSymFromAddr64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD64 qwAddr, _In_ DWORD64 qwAddr,
__out_opt PDWORD64 pdwDisplacement, _Out_opt_ PDWORD64 pdwDisplacement,
__inout PIMAGEHLP_SYMBOL64 Symbol _Inout_ PIMAGEHLP_SYMBOL64 Symbol
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetSymFromAddr SymGetSymFromAddr64 #define SymGetSymFromAddr SymGetSymFromAddr64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymFromAddr( SymGetSymFromAddr(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD dwAddr, _In_ DWORD dwAddr,
__out_opt PDWORD pdwDisplacement, _Out_opt_ PDWORD pdwDisplacement,
__inout PIMAGEHLP_SYMBOL Symbol _Inout_ PIMAGEHLP_SYMBOL Symbol
); );
#endif #endif
// While following two APIs will provide a symbol from a name, // While following two APIs will provide a symbol from a name,
// SymEnumSymbols can provide the same matching information // SymEnumSymbols can provide the same matching information
// for ALL symbols with a matching name, even regular // for ALL symbols with a matching name, even regular
// expressions. That way you can search across modules // expressions. That way you can search across modules
// and differentiate between identically named symbols. // and differentiate between identically named symbols.
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymFromName64( SymGetSymFromName64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCSTR Name, _In_ PCSTR Name,
__inout PIMAGEHLP_SYMBOL64 Symbol _Inout_ PIMAGEHLP_SYMBOL64 Symbol
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetSymFromName SymGetSymFromName64 #define SymGetSymFromName SymGetSymFromName64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymFromName( SymGetSymFromName(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in PCSTR Name, _In_ PCSTR Name,
__inout PIMAGEHLP_SYMBOL Symbol _Inout_ PIMAGEHLP_SYMBOL Symbol
); );
#endif #endif
// Symbol server exports // Symbol server exports
// This is the version of the SYMSRV_EXTENDED_OUTPUT_DATA structure.
#define EXT_OUTPUT_VER 1
// This structure indicates the Extended Symsrv.dll output data structure
typedef struct
{
DWORD sizeOfStruct; // size of the structure
DWORD version; // version number (EXT_OUTPUT_VER)
WCHAR filePtrMsg[MAX_PATH + 1]; // File ptr message data buffer
} SYMSRV_EXTENDED_OUTPUT_DATA, *PSYMSRV_EXTENDED_OUTPUT_DATA;
typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR );
typedef BOOL (WINAPI *PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PST R); typedef BOOL (WINAPI *PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PST R);
typedef BOOL (WINAPI *PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, P WSTR); typedef BOOL (WINAPI *PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, P WSTR);
typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROC)(PCSTR, PCSTR, PCSTR, PSTR); typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROC)(PCSTR, PCSTR, PCSTR, PSTR);
typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCA)(PCSTR, PCSTR, PCSTR, PSTR); typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCA)(PCSTR, PCSTR, PCSTR, PSTR);
typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCW)(PCWSTR, PCWSTR, PCWSTR, PWSTR); typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCW)(PCWSTR, PCWSTR, PCWSTR, PWSTR);
typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID); typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID); typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64); typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSWPROC)(UINT_PTR, ULONG64); typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSWPROC)(UINT_PTR, ULONG64);
skipping to change at line 3186 skipping to change at line 3330
typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENT)(PCSTR, PCSTR, PCSTR, PSTR, s ize_t, DWORD); typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENT)(PCSTR, PCSTR, PCSTR, PSTR, s ize_t, DWORD);
typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENTW)(PCWSTR, PCWSTR, PCWSTR, PWS TR, size_t, DWORD); typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENTW)(PCWSTR, PCWSTR, PCWSTR, PWS TR, size_t, DWORD);
typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRING)(PVOID, DWORD, DWORD, PSTR, si ze_t); typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRING)(PVOID, DWORD, DWORD, PSTR, si ze_t);
typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRINGW)(PVOID, DWORD, DWORD, PWSTR, size_t); typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRINGW)(PVOID, DWORD, DWORD, PWSTR, size_t);
typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILE)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR, size_t, DWORD); typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILE)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR, size_t, DWORD);
typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILEW)(PCWSTR, PCWSTR, PVOID, DWORD, DWO RD, PWSTR, size_t, DWORD); typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILEW)(PCWSTR, PCWSTR, PVOID, DWORD, DWO RD, PWSTR, size_t, DWORD);
typedef BOOL (WINAPI *PSYMBOLSERVERISSTORE)(PCSTR); typedef BOOL (WINAPI *PSYMBOLSERVERISSTORE)(PCSTR);
typedef BOOL (WINAPI *PSYMBOLSERVERISSTOREW)(PCWSTR); typedef BOOL (WINAPI *PSYMBOLSERVERISSTOREW)(PCWSTR);
typedef DWORD (WINAPI *PSYMBOLSERVERVERSION)(); typedef DWORD (WINAPI *PSYMBOLSERVERVERSION)();
typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERMESSAGEPROC)(UINT_PTR action, ULONG6 4 data, ULONG64 context); typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERMESSAGEPROC)(UINT_PTR action, ULONG6 4 data, ULONG64 context);
typedef BOOL (WINAPI *PSYMBOLSERVERWEXPROC)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD,
PWSTR, PSYMSRV_EXTENDED_OUTPUT_DATA);
typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROCWEX)(PCWSTR);
#define SYMSRV_VERSION 2 #define SYMSRV_VERSION 2
#define SSRVOPT_CALLBACK 0x00000001 #define SSRVOPT_CALLBACK 0x00000001
#define SSRVOPT_DWORD 0x00000002 #define SSRVOPT_DWORD 0x00000002
#define SSRVOPT_DWORDPTR 0x00000004 #define SSRVOPT_DWORDPTR 0x00000004
#define SSRVOPT_GUIDPTR 0x00000008 #define SSRVOPT_GUIDPTR 0x00000008
#define SSRVOPT_OLDGUIDPTR 0x00000010 #define SSRVOPT_OLDGUIDPTR 0x00000010
#define SSRVOPT_UNATTENDED 0x00000020 #define SSRVOPT_UNATTENDED 0x00000020
#define SSRVOPT_NOCOPY 0x00000040 #define SSRVOPT_NOCOPY 0x00000040
skipping to change at line 3215 skipping to change at line 3361
#define SSRVOPT_RESETTOU 0x00008000 #define SSRVOPT_RESETTOU 0x00008000
#define SSRVOPT_CALLBACKW 0x00010000 #define SSRVOPT_CALLBACKW 0x00010000
#define SSRVOPT_FLAT_DEFAULT_STORE 0x00020000 #define SSRVOPT_FLAT_DEFAULT_STORE 0x00020000
#define SSRVOPT_PROXYW 0x00040000 #define SSRVOPT_PROXYW 0x00040000
#define SSRVOPT_MESSAGE 0x00080000 #define SSRVOPT_MESSAGE 0x00080000
#define SSRVOPT_SERVICE 0x00100000 // deprecated #define SSRVOPT_SERVICE 0x00100000 // deprecated
#define SSRVOPT_FAVOR_COMPRESSED 0x00200000 #define SSRVOPT_FAVOR_COMPRESSED 0x00200000
#define SSRVOPT_STRING 0x00400000 #define SSRVOPT_STRING 0x00400000
#define SSRVOPT_WINHTTP 0x00800000 #define SSRVOPT_WINHTTP 0x00800000
#define SSRVOPT_WININET 0x01000000 #define SSRVOPT_WININET 0x01000000
#define SSRVOPT_DONT_UNCOMPRESS 0x02000000
#define SSRVOPT_DISABLE_PING_HOST 0x04000000
#define SSRVOPT_DISABLE_TIMEOUT 0x08000000
#define SSRVOPT_ENABLE_COMM_MSG 0x10000000
#define SSRVOPT_MAX 0x0100000 #define SSRVOPT_MAX 0x10000000
#define SSRVOPT_RESET ((ULONG_PTR)-1) #define SSRVOPT_RESET ((ULONG_PTR)-1)
#define NUM_SSRVOPTS 30 #define NUM_SSRVOPTS 30
#define SSRVACTION_TRACE 1 #define SSRVACTION_TRACE 1
#define SSRVACTION_QUERYCANCEL 2 #define SSRVACTION_QUERYCANCEL 2
#define SSRVACTION_EVENT 3 #define SSRVACTION_EVENT 3
#define SSRVACTION_EVENTW 4 #define SSRVACTION_EVENTW 4
#define SSRVACTION_SIZE 5 #define SSRVACTION_SIZE 5
skipping to change at line 3244 skipping to change at line 3394
#define SYMSTOREOPT_PASS_IF_EXISTS 0x40 #define SYMSTOREOPT_PASS_IF_EXISTS 0x40
#ifdef DBGHELP_TRANSLATE_TCHAR #ifdef DBGHELP_TRANSLATE_TCHAR
#define SymInitialize SymInitializeW #define SymInitialize SymInitializeW
#define SymAddSymbol SymAddSymbolW #define SymAddSymbol SymAddSymbolW
#define SymDeleteSymbol SymDeleteSymbolW #define SymDeleteSymbol SymDeleteSymbolW
#define SearchTreeForFile SearchTreeForFileW #define SearchTreeForFile SearchTreeForFileW
#define UnDecorateSymbolName UnDecorateSymbolNameW #define UnDecorateSymbolName UnDecorateSymbolNameW
#define SymGetLineFromName64 SymGetLineFromNameW64 #define SymGetLineFromName64 SymGetLineFromNameW64
#define SymGetLineFromAddr64 SymGetLineFromAddrW64 #define SymGetLineFromAddr64 SymGetLineFromAddrW64
#define SymGetLineFromInlineContext SymGetLineFromInlineContextW
#define SymGetLineNext64 SymGetLineNextW64 #define SymGetLineNext64 SymGetLineNextW64
#define SymGetLinePrev64 SymGetLinePrevW64 #define SymGetLinePrev64 SymGetLinePrevW64
#define SymFromName SymFromNameW #define SymFromName SymFromNameW
#define SymFindExecutableImage SymFindExecutableImageW #define SymFindExecutableImage SymFindExecutableImageW
#define FindExecutableImageEx FindExecutableImageExW #define FindExecutableImageEx FindExecutableImageExW
#define SymSearch SymSearchW #define SymSearch SymSearchW
#define SymEnumLines SymEnumLinesW #define SymEnumLines SymEnumLinesW
#define SymEnumSourceLines SymEnumSourceLinesW #define SymEnumSourceLines SymEnumSourceLinesW
#define SymGetTypeFromName SymGetTypeFromNameW #define SymGetTypeFromName SymGetTypeFromNameW
#define SymEnumSymbolsForAddr SymEnumSymbolsForAddrW #define SymEnumSymbolsForAddr SymEnumSymbolsForAddrW
#define SymFromAddr SymFromAddrW #define SymFromAddr SymFromAddrW
#define SymFromInlineContext SymFromInlineContextW
#define SymMatchString SymMatchStringW #define SymMatchString SymMatchStringW
#define SymEnumSourceFiles SymEnumSourceFilesW #define SymEnumSourceFiles SymEnumSourceFilesW
#define SymEnumSymbols SymEnumSymbolsW #define SymEnumSymbols SymEnumSymbolsW
#define SymEnumSymbolsEx SymEnumSymbolsExW
#define SymLoadModuleEx SymLoadModuleExW #define SymLoadModuleEx SymLoadModuleExW
#define SymSetSearchPath SymSetSearchPathW #define SymSetSearchPath SymSetSearchPathW
#define SymGetSearchPath SymGetSearchPathW #define SymGetSearchPath SymGetSearchPathW
#define EnumDirTree EnumDirTreeW #define EnumDirTree EnumDirTreeW
#define SymFromToken SymFromTokenW #define SymFromToken SymFromTokenW
#define SymFromIndex SymFromIndexW #define SymFromIndex SymFromIndexW
#define SymGetScope SymGetScopeW #define SymGetScope SymGetScopeW
#define SymNext SymNextW #define SymNext SymNextW
#define SymPrev SymPrevW #define SymPrev SymPrevW
#define SymEnumTypes SymEnumTypesW #define SymEnumTypes SymEnumTypesW
skipping to change at line 3287 skipping to change at line 3440
#define SymGetSourceFileToken SymGetSourceFileTokenW #define SymGetSourceFileToken SymGetSourceFileTokenW
#define SymGetSourceFileFromToken SymGetSourceFileFromTokenW #define SymGetSourceFileFromToken SymGetSourceFileFromTokenW
#define SymGetSourceVarFromToken SymGetSourceVarFromTokenW #define SymGetSourceVarFromToken SymGetSourceVarFromTokenW
#define SymGetSourceFileToken SymGetSourceFileTokenW #define SymGetSourceFileToken SymGetSourceFileTokenW
#define SymGetFileLineOffsets64 SymGetFileLineOffsetsW64 #define SymGetFileLineOffsets64 SymGetFileLineOffsetsW64
#define SymFindFileInPath SymFindFileInPathW #define SymFindFileInPath SymFindFileInPathW
#define SymMatchFileName SymMatchFileNameW #define SymMatchFileName SymMatchFileNameW
#define SymGetSourceFileFromToken SymGetSourceFileFromTokenW #define SymGetSourceFileFromToken SymGetSourceFileFromTokenW
#define SymGetSourceVarFromToken SymGetSourceVarFromTokenW #define SymGetSourceVarFromToken SymGetSourceVarFromTokenW
#define SymGetModuleInfo64 SymGetModuleInfoW64 #define SymGetModuleInfo64 SymGetModuleInfoW64
#define SymAddSourceStream SymAddSourceStreamW
#define SymSrvIsStore SymSrvIsStoreW #define SymSrvIsStore SymSrvIsStoreW
#define SymSrvDeltaName SymSrvDeltaNameW #define SymSrvDeltaName SymSrvDeltaNameW
#define SymSrvGetSupplement SymSrvGetSupplementW #define SymSrvGetSupplement SymSrvGetSupplementW
#define SymSrvStoreSupplement SymSrvStoreSupplementW #define SymSrvStoreSupplement SymSrvStoreSupplementW
#define SymSrvGetFileIndexes SymSrvGetFileIndexes #define SymSrvGetFileIndexes SymSrvGetFileIndexes
#define SymSrvGetFileIndexString SymSrvGetFileIndexStringW #define SymSrvGetFileIndexString SymSrvGetFileIndexStringW
#define SymSrvStoreFile SymSrvStoreFileW #define SymSrvStoreFile SymSrvStoreFileW
#define SymGetSymbolFile SymGetSymbolFileW #define SymGetSymbolFile SymGetSymbolFileW
#define EnumerateLoadedModules64 EnumerateLoadedModulesW64 #define EnumerateLoadedModules64 EnumerateLoadedModulesW64
#define EnumerateLoadedModulesEx EnumerateLoadedModulesExW #define EnumerateLoadedModulesEx EnumerateLoadedModulesExW
skipping to change at line 3342 skipping to change at line 3496
// The following APIs exist only for backwards compatibility // The following APIs exist only for backwards compatibility
// with a pre-release version documented in an MSDN release. // with a pre-release version documented in an MSDN release.
// You should use SymFindFileInPath if you want to maintain // You should use SymFindFileInPath if you want to maintain
// future compatibility. // future compatibility.
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
FindFileInPath( FindFileInPath(
__in HANDLE hprocess, _In_ HANDLE hprocess,
__in PCSTR SearchPath, _In_ PCSTR SearchPath,
__in PCSTR FileName, _In_ PCSTR FileName,
__in PVOID id, _In_ PVOID id,
__in DWORD two, _In_ DWORD two,
__in DWORD three, _In_ DWORD three,
__in DWORD flags, _In_ DWORD flags,
__out_ecount(MAX_PATH + 1) PSTR FilePath _Out_writes_(MAX_PATH + 1) PSTR FilePath
); );
// You should use SymFindFileInPath if you want to maintain // You should use SymFindFileInPath if you want to maintain
// future compatibility. // future compatibility.
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
FindFileInSearchPath( FindFileInSearchPath(
__in HANDLE hprocess, _In_ HANDLE hprocess,
__in PCSTR SearchPath, _In_ PCSTR SearchPath,
__in PCSTR FileName, _In_ PCSTR FileName,
__in DWORD one, _In_ DWORD one,
__in DWORD two, _In_ DWORD two,
__in DWORD three, _In_ DWORD three,
__out_ecount(MAX_PATH + 1) PSTR FilePath _Out_writes_(MAX_PATH + 1) PSTR FilePath
); );
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumSym( SymEnumSym(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateSymbols64( SymEnumerateSymbols64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, _In_ PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateSymbolsW64( SymEnumerateSymbolsW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG64 BaseOfDll, _In_ ULONG64 BaseOfDll,
__in PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback, _In_ PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymEnumerateSymbols SymEnumerateSymbols64 #define SymEnumerateSymbols SymEnumerateSymbols64
#define SymEnumerateSymbolsW SymEnumerateSymbolsW64 #define SymEnumerateSymbolsW SymEnumerateSymbolsW64
#else #else
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateSymbols( SymEnumerateSymbols(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG BaseOfDll, _In_ ULONG BaseOfDll,
__in PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, _In_ PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
DBHLP_DEPRECIATED DBHLP_DEPRECIATED
BOOL BOOL
IMAGEAPI IMAGEAPI
SymEnumerateSymbolsW( SymEnumerateSymbolsW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in ULONG BaseOfDll, _In_ ULONG BaseOfDll,
__in PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, _In_ PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,
__in_opt PVOID UserContext _In_opt_ PVOID UserContext
); );
#endif #endif
// use SymLoadModuleEx // use SymLoadModuleEx
DWORD64 DWORD64
IMAGEAPI IMAGEAPI
SymLoadModule64( SymLoadModule64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt HANDLE hFile, _In_opt_ HANDLE hFile,
__in_opt PCSTR ImageName, _In_opt_ PCSTR ImageName,
__in_opt PCSTR ModuleName, _In_opt_ PCSTR ModuleName,
__in DWORD64 BaseOfDll, _In_ DWORD64 BaseOfDll,
__in DWORD SizeOfDll _In_ DWORD SizeOfDll
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymLoadModule SymLoadModule64 #define SymLoadModule SymLoadModule64
#else #else
DWORD DWORD
IMAGEAPI IMAGEAPI
SymLoadModule( SymLoadModule(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in_opt HANDLE hFile, _In_opt_ HANDLE hFile,
__in_opt PCSTR ImageName, _In_opt_ PCSTR ImageName,
__in_opt PCSTR ModuleName, _In_opt_ PCSTR ModuleName,
__in DWORD BaseOfDll, _In_ DWORD BaseOfDll,
__in DWORD SizeOfDll _In_ DWORD SizeOfDll
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymNext64( SymGetSymNext64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOL64 Symbol _Inout_ PIMAGEHLP_SYMBOL64 Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymNextW64( SymGetSymNextW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOLW64 Symbol _Inout_ PIMAGEHLP_SYMBOLW64 Symbol
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetSymNext SymGetSymNext64 #define SymGetSymNext SymGetSymNext64
#define SymGetSymNextW SymGetSymNextW64 #define SymGetSymNextW SymGetSymNextW64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymNext( SymGetSymNext(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOL Symbol _Inout_ PIMAGEHLP_SYMBOL Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymNextW( SymGetSymNextW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOLW Symbol _Inout_ PIMAGEHLP_SYMBOLW Symbol
); );
#endif #endif
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymPrev64( SymGetSymPrev64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOL64 Symbol _Inout_ PIMAGEHLP_SYMBOL64 Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymPrevW64( SymGetSymPrevW64(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOLW64 Symbol _Inout_ PIMAGEHLP_SYMBOLW64 Symbol
); );
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetSymPrev SymGetSymPrev64 #define SymGetSymPrev SymGetSymPrev64
#define SymGetSymPrevW SymGetSymPrevW64 #define SymGetSymPrevW SymGetSymPrevW64
#else #else
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymPrev( SymGetSymPrev(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOL Symbol _Inout_ PIMAGEHLP_SYMBOL Symbol
); );
BOOL BOOL
IMAGEAPI IMAGEAPI
SymGetSymPrevW( SymGetSymPrevW(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__inout PIMAGEHLP_SYMBOLW Symbol _Inout_ PIMAGEHLP_SYMBOLW Symbol
); );
#endif #endif
// This type indicates the call back function type
typedef ULONG (__stdcall *LPCALL_BACK_USER_INTERRUPT_ROUTINE )(VOID);
// Extra data to report for the symbol load summary
typedef struct
{
PCWSTR pBinPathNonExist;
PCWSTR pSymbolPathNonExist;
}DBGHELP_DATA_REPORT_STRUCT, *PDBGHELP_DATA_REPORT_STRUCT;
void
IMAGEAPI
SetCheckUserInterruptShared(
_In_ LPCALL_BACK_USER_INTERRUPT_ROUTINE lpStartAddress
);
LPCALL_BACK_USER_INTERRUPT_ROUTINE
IMAGEAPI
GetCheckUserInterruptShared(
void
);
DWORD
IMAGEAPI
GetSymLoadError(
void
);
void
IMAGEAPI
SetSymLoadError(
_In_ DWORD error
);
BOOL
IMAGEAPI
ReportSymbolLoadSummary(
_In_ HANDLE hProcess,
_In_opt_ PCWSTR pLoadModule,
_In_ PDBGHELP_DATA_REPORT_STRUCT pSymbolData
);
void
IMAGEAPI
RemoveInvalidModuleList(
_In_ HANDLE hProcess
);
// These values should not be used. // These values should not be used.
// They have been replaced by SYMFLAG_ values. // They have been replaced by SYMFLAG_ values.
#define SYMF_OMAP_GENERATED 0x00000001 #define SYMF_OMAP_GENERATED 0x00000001
#define SYMF_OMAP_MODIFIED 0x00000002 #define SYMF_OMAP_MODIFIED 0x00000002
#define SYMF_REGISTER 0x00000008 #define SYMF_REGISTER 0x00000008
#define SYMF_REGREL 0x00000010 #define SYMF_REGREL 0x00000010
#define SYMF_FRAMEREL 0x00000020 #define SYMF_FRAMEREL 0x00000020
#define SYMF_PARAMETER 0x00000040 #define SYMF_PARAMETER 0x00000040
#define SYMF_LOCAL 0x00000080 #define SYMF_LOCAL 0x00000080
skipping to change at line 3550 skipping to change at line 3752
#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL // 0x001 0 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL // 0x001 0
#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL // 0x002 0 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL // 0x002 0
#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER // 0x004 0 #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER // 0x004 0
#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL // 0x008 0 #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL // 0x008 0
#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT // 0x010 0 #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT // 0x010 0
#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION // 0x080 0 #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION // 0x080 0
#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL // 0x100 0 #define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL // 0x100 0
#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK // 0x200 0 #define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK // 0x200 0
#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL // 0x400 0 #define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL // 0x400 0
//
// RangeMap APIs.
//
PVOID
IMAGEAPI
RangeMapCreate(
VOID
);
VOID
IMAGEAPI
RangeMapFree(
_In_opt_ PVOID RmapHandle
);
#define IMAGEHLP_RMAP_MAPPED_FLAT 0x00000001
#define IMAGEHLP_RMAP_BIG_ENDIAN 0x00000002
#define IMAGEHLP_RMAP_IGNORE_MISCOMPARE 0x00000004
#define IMAGEHLP_RMAP_LOAD_RW_DATA_SECTIONS 0x20000000
#define IMAGEHLP_RMAP_OMIT_SHARED_RW_DATA_SECTIONS 0x40000000
#define IMAGEHLP_RMAP_FIXUP_IMAGEBASE 0x80000000
BOOL
IMAGEAPI
RangeMapAddPeImageSections(
_In_ PVOID RmapHandle,
_In_opt_ PCWSTR ImageName,
_In_reads_bytes_(MappingBytes) PVOID MappedImage,
_In_ DWORD MappingBytes,
_In_ DWORD64 ImageBase,
_In_ DWORD64 UserTag,
_In_ DWORD MappingFlags
);
BOOL
IMAGEAPI
RangeMapRemove(
_In_ PVOID RmapHandle,
_In_ DWORD64 UserTag
);
BOOL
IMAGEAPI
RangeMapRead(
_In_ PVOID RmapHandle,
_In_ DWORD64 Offset,
_Out_writes_bytes_to_(RequestBytes, *DoneBytes) PVOID Buffer,
_In_ DWORD RequestBytes,
_In_ DWORD Flags,
_Out_opt_ PDWORD DoneBytes
);
BOOL
IMAGEAPI
RangeMapWrite(
_In_ PVOID RmapHandle,
_In_ DWORD64 Offset,
_In_reads_bytes_(RequestBytes) PVOID Buffer,
_In_ DWORD RequestBytes,
_In_ DWORD Flags,
_Out_opt_ PDWORD DoneBytes
);
#include <poppack.h> #include <poppack.h>
#include <pshpack4.h> #include <pshpack4.h>
#if defined(_MSC_VER) #if defined(_MSC_VER)
#if _MSC_VER >= 800 #if _MSC_VER >= 800
#if _MSC_VER >= 1200 #if _MSC_VER >= 1200
#pragma warning(push) #pragma warning(push)
#endif #endif
#pragma warning(disable:4200) /* Zero length array */ #pragma warning(disable:4200) /* Zero length array */
skipping to change at line 3652 skipping to change at line 3918
CommentStreamA = 10, CommentStreamA = 10,
CommentStreamW = 11, CommentStreamW = 11,
HandleDataStream = 12, HandleDataStream = 12,
FunctionTableStream = 13, FunctionTableStream = 13,
UnloadedModuleListStream = 14, UnloadedModuleListStream = 14,
MiscInfoStream = 15, MiscInfoStream = 15,
MemoryInfoListStream = 16, MemoryInfoListStream = 16,
ThreadInfoListStream = 17, ThreadInfoListStream = 17,
HandleOperationListStream = 18, HandleOperationListStream = 18,
TokenStream = 19, TokenStream = 19,
JavaScriptDataStream = 20,
ceStreamNull = 0x8000, ceStreamNull = 0x8000,
ceStreamSystemInfo = 0x8001, ceStreamSystemInfo = 0x8001,
ceStreamException = 0x8002, ceStreamException = 0x8002,
ceStreamModuleList = 0x8003, ceStreamModuleList = 0x8003,
ceStreamProcessList = 0x8004, ceStreamProcessList = 0x8004,
ceStreamThreadList = 0x8005, ceStreamThreadList = 0x8005,
ceStreamThreadContextList = 0x8006, ceStreamThreadContextList = 0x8006,
ceStreamThreadCallStackList = 0x8007, ceStreamThreadCallStackList = 0x8007,
ceStreamMemoryVirtualList = 0x8008, ceStreamMemoryVirtualList = 0x8008,
skipping to change at line 3940 skipping to change at line 4207
// so on. The minidump gives a minidump identifier // so on. The minidump gives a minidump identifier
// to each possible data format for identification // to each possible data format for identification
// purposes but does not control nor describe the actual data. // purposes but does not control nor describe the actual data.
typedef enum _MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE { typedef enum _MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE {
MiniHandleObjectInformationNone, MiniHandleObjectInformationNone,
MiniThreadInformation1, MiniThreadInformation1,
MiniMutantInformation1, MiniMutantInformation1,
MiniMutantInformation2, MiniMutantInformation2,
MiniProcessInformation1, MiniProcessInformation1,
MiniProcessInformation2, MiniProcessInformation2,
MiniEventInformation1,
MiniSectionInformation1,
MiniHandleObjectInformationTypeMax MiniHandleObjectInformationTypeMax
} MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE; } MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE;
typedef struct _MINIDUMP_HANDLE_OBJECT_INFORMATION { typedef struct _MINIDUMP_HANDLE_OBJECT_INFORMATION {
RVA NextInfoRva; RVA NextInfoRva;
ULONG32 InfoType; ULONG32 InfoType;
ULONG32 SizeOfInfo; ULONG32 SizeOfInfo;
// Raw information follows. // Raw information follows.
} MINIDUMP_HANDLE_OBJECT_INFORMATION; } MINIDUMP_HANDLE_OBJECT_INFORMATION;
skipping to change at line 4056 skipping to change at line 4325
// bit is set. // bit is set.
// //
#define MINIDUMP_MISC1_PROCESS_ID 0x00000001 #define MINIDUMP_MISC1_PROCESS_ID 0x00000001
#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002 #define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004 #define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
#define MINIDUMP_MISC3_PROCESS_INTEGRITY 0x00000010 #define MINIDUMP_MISC3_PROCESS_INTEGRITY 0x00000010
#define MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS 0x00000020 #define MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS 0x00000020
#define MINIDUMP_MISC3_TIMEZONE 0x00000040 #define MINIDUMP_MISC3_TIMEZONE 0x00000040
#define MINIDUMP_MISC3_PROTECTED_PROCESS 0x00000080 #define MINIDUMP_MISC3_PROTECTED_PROCESS 0x00000080
#define MINIDUMP_MISC4_BUILDSTRING 0x00000100
typedef struct _MINIDUMP_MISC_INFO { typedef struct _MINIDUMP_MISC_INFO {
ULONG32 SizeOfInfo; ULONG32 SizeOfInfo;
ULONG32 Flags1; ULONG32 Flags1;
ULONG32 ProcessId; ULONG32 ProcessId;
ULONG32 ProcessCreateTime; ULONG32 ProcessCreateTime;
ULONG32 ProcessUserTime; ULONG32 ProcessUserTime;
ULONG32 ProcessKernelTime; ULONG32 ProcessKernelTime;
} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO; } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
skipping to change at line 4099 skipping to change at line 4369
ULONG32 ProcessorMhzLimit; ULONG32 ProcessorMhzLimit;
ULONG32 ProcessorMaxIdleState; ULONG32 ProcessorMaxIdleState;
ULONG32 ProcessorCurrentIdleState; ULONG32 ProcessorCurrentIdleState;
ULONG32 ProcessIntegrityLevel; ULONG32 ProcessIntegrityLevel;
ULONG32 ProcessExecuteFlags; ULONG32 ProcessExecuteFlags;
ULONG32 ProtectedProcess; ULONG32 ProtectedProcess;
ULONG32 TimeZoneId; ULONG32 TimeZoneId;
TIME_ZONE_INFORMATION TimeZone; TIME_ZONE_INFORMATION TimeZone;
} MINIDUMP_MISC_INFO_3, *PMINIDUMP_MISC_INFO_3; } MINIDUMP_MISC_INFO_3, *PMINIDUMP_MISC_INFO_3;
typedef struct _MINIDUMP_MISC_INFO_4 {
ULONG32 SizeOfInfo;
ULONG32 Flags1;
ULONG32 ProcessId;
ULONG32 ProcessCreateTime;
ULONG32 ProcessUserTime;
ULONG32 ProcessKernelTime;
ULONG32 ProcessorMaxMhz;
ULONG32 ProcessorCurrentMhz;
ULONG32 ProcessorMhzLimit;
ULONG32 ProcessorMaxIdleState;
ULONG32 ProcessorCurrentIdleState;
ULONG32 ProcessIntegrityLevel;
ULONG32 ProcessExecuteFlags;
ULONG32 ProtectedProcess;
ULONG32 TimeZoneId;
TIME_ZONE_INFORMATION TimeZone;
WCHAR BuildString[MAX_PATH];
WCHAR DbgBldStr[40];
} MINIDUMP_MISC_INFO_4, *PMINIDUMP_MISC_INFO_4;
// The latest MINIDUMP_MISC_INFO definition. // The latest MINIDUMP_MISC_INFO definition.
typedef MINIDUMP_MISC_INFO_3 MINIDUMP_MISC_INFO_N; typedef MINIDUMP_MISC_INFO_4 MINIDUMP_MISC_INFO_N;
typedef MINIDUMP_MISC_INFO_N* PMINIDUMP_MISC_INFO_N; typedef MINIDUMP_MISC_INFO_N* PMINIDUMP_MISC_INFO_N;
// //
// The memory information stream contains memory region // The memory information stream contains memory region
// description information. This stream corresponds to // description information. This stream corresponds to
// what VirtualQuery would return for the process the // what VirtualQuery would return for the process the
// dump was created for. // dump was created for.
// //
typedef struct _MINIDUMP_MEMORY_INFO { typedef struct _MINIDUMP_MEMORY_INFO {
skipping to change at line 4220 skipping to change at line 4511
CancelCallback, CancelCallback,
WriteKernelMinidumpCallback, WriteKernelMinidumpCallback,
KernelMinidumpStatusCallback, KernelMinidumpStatusCallback,
RemoveMemoryCallback, RemoveMemoryCallback,
IncludeVmRegionCallback, IncludeVmRegionCallback,
IoStartCallback, IoStartCallback,
IoWriteAllCallback, IoWriteAllCallback,
IoFinishCallback, IoFinishCallback,
ReadMemoryFailureCallback, ReadMemoryFailureCallback,
SecondaryFlagsCallback, SecondaryFlagsCallback,
IsProcessSnapshotCallback,
VmStartCallback,
VmQueryCallback,
VmPreReadCallback,
VmPostReadCallback,
} MINIDUMP_CALLBACK_TYPE; } MINIDUMP_CALLBACK_TYPE;
typedef struct _MINIDUMP_THREAD_CALLBACK { typedef struct _MINIDUMP_THREAD_CALLBACK {
ULONG ThreadId; ULONG ThreadId;
HANDLE ThreadHandle; HANDLE ThreadHandle;
CONTEXT Context; CONTEXT Context;
ULONG SizeOfContext; ULONG SizeOfContext;
ULONG64 StackBase; ULONG64 StackBase;
ULONG64 StackEnd; ULONG64 StackEnd;
} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
skipping to change at line 4298 skipping to change at line 4594
} MINIDUMP_IO_CALLBACK, *PMINIDUMP_IO_CALLBACK; } MINIDUMP_IO_CALLBACK, *PMINIDUMP_IO_CALLBACK;
typedef struct _MINIDUMP_READ_MEMORY_FAILURE_CALLBACK typedef struct _MINIDUMP_READ_MEMORY_FAILURE_CALLBACK
{ {
ULONG64 Offset; ULONG64 Offset;
ULONG Bytes; ULONG Bytes;
HRESULT FailureStatus; HRESULT FailureStatus;
} MINIDUMP_READ_MEMORY_FAILURE_CALLBACK, } MINIDUMP_READ_MEMORY_FAILURE_CALLBACK,
*PMINIDUMP_READ_MEMORY_FAILURE_CALLBACK; *PMINIDUMP_READ_MEMORY_FAILURE_CALLBACK;
typedef struct _MINIDUMP_VM_QUERY_CALLBACK
{
ULONG64 Offset;
} MINIDUMP_VM_QUERY_CALLBACK, *PMINIDUMP_VM_QUERY_CALLBACK;
typedef struct _MINIDUMP_VM_PRE_READ_CALLBACK
{
ULONG64 Offset;
PVOID Buffer;
ULONG Size;
} MINIDUMP_VM_PRE_READ_CALLBACK, *PMINIDUMP_VM_PRE_READ_CALLBACK;
typedef struct _MINIDUMP_VM_POST_READ_CALLBACK
{
ULONG64 Offset;
PVOID Buffer;
ULONG Size;
ULONG Completed;
HRESULT Status;
} MINIDUMP_VM_POST_READ_CALLBACK, *PMINIDUMP_VM_POST_READ_CALLBACK;
typedef struct _MINIDUMP_CALLBACK_INPUT { typedef struct _MINIDUMP_CALLBACK_INPUT {
ULONG ProcessId; ULONG ProcessId;
HANDLE ProcessHandle; HANDLE ProcessHandle;
ULONG CallbackType; ULONG CallbackType;
union { union {
HRESULT Status; HRESULT Status;
MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_CALLBACK Thread;
MINIDUMP_THREAD_EX_CALLBACK ThreadEx; MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
MINIDUMP_MODULE_CALLBACK Module; MINIDUMP_MODULE_CALLBACK Module;
MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
MINIDUMP_IO_CALLBACK Io; MINIDUMP_IO_CALLBACK Io;
MINIDUMP_READ_MEMORY_FAILURE_CALLBACK ReadMemoryFailure; MINIDUMP_READ_MEMORY_FAILURE_CALLBACK ReadMemoryFailure;
ULONG SecondaryFlags; ULONG SecondaryFlags;
MINIDUMP_VM_QUERY_CALLBACK VmQuery;
MINIDUMP_VM_PRE_READ_CALLBACK VmPreRead;
MINIDUMP_VM_POST_READ_CALLBACK VmPostRead;
}; };
} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
typedef struct _MINIDUMP_CALLBACK_OUTPUT { typedef struct _MINIDUMP_CALLBACK_OUTPUT {
union { union {
ULONG ModuleWriteFlags; ULONG ModuleWriteFlags;
ULONG ThreadWriteFlags; ULONG ThreadWriteFlags;
ULONG SecondaryFlags; ULONG SecondaryFlags;
struct { struct {
ULONG64 MemoryBase; ULONG64 MemoryBase;
skipping to change at line 4333 skipping to change at line 4653
}; };
struct { struct {
BOOL CheckCancel; BOOL CheckCancel;
BOOL Cancel; BOOL Cancel;
}; };
HANDLE Handle; HANDLE Handle;
struct { struct {
MINIDUMP_MEMORY_INFO VmRegion; MINIDUMP_MEMORY_INFO VmRegion;
BOOL Continue; BOOL Continue;
}; };
struct {
HRESULT VmQueryStatus;
MINIDUMP_MEMORY_INFO VmQueryResult;
};
struct {
HRESULT VmReadStatus;
ULONG VmReadBytesCompleted;
};
HRESULT Status; HRESULT Status;
}; };
} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
// //
// A normal minidump contains just the information // A normal minidump contains just the information
// necessary to capture stack traces for all of the // necessary to capture stack traces for all of the
// existing threads in a process. // existing threads in a process.
// //
// A minidump with data segments includes all of the data // A minidump with data segments includes all of the data
skipping to change at line 4433 skipping to change at line 4761
MiniDumpWithPrivateReadWriteMemory = 0x00000200, MiniDumpWithPrivateReadWriteMemory = 0x00000200,
MiniDumpWithoutOptionalData = 0x00000400, MiniDumpWithoutOptionalData = 0x00000400,
MiniDumpWithFullMemoryInfo = 0x00000800, MiniDumpWithFullMemoryInfo = 0x00000800,
MiniDumpWithThreadInfo = 0x00001000, MiniDumpWithThreadInfo = 0x00001000,
MiniDumpWithCodeSegs = 0x00002000, MiniDumpWithCodeSegs = 0x00002000,
MiniDumpWithoutAuxiliaryState = 0x00004000, MiniDumpWithoutAuxiliaryState = 0x00004000,
MiniDumpWithFullAuxiliaryState = 0x00008000, MiniDumpWithFullAuxiliaryState = 0x00008000,
MiniDumpWithPrivateWriteCopyMemory = 0x00010000, MiniDumpWithPrivateWriteCopyMemory = 0x00010000,
MiniDumpIgnoreInaccessibleMemory = 0x00020000, MiniDumpIgnoreInaccessibleMemory = 0x00020000,
MiniDumpWithTokenInformation = 0x00040000, MiniDumpWithTokenInformation = 0x00040000,
MiniDumpValidTypeFlags = 0x0007ffff, MiniDumpWithModuleHeaders = 0x00080000,
MiniDumpFilterTriage = 0x00100000,
MiniDumpValidTypeFlags = 0x001fffff,
} MINIDUMP_TYPE; } MINIDUMP_TYPE;
// //
// In addition to the primary flags provided to // In addition to the primary flags provided to
// MiniDumpWriteDump there are additional, less // MiniDumpWriteDump there are additional, less
// frequently used options queried via the secondary // frequently used options queried via the secondary
// flags callback. // flags callback.
// //
// MiniSecondaryWithoutPowerInfo suppresses the minidump // MiniSecondaryWithoutPowerInfo suppresses the minidump
// query that retrieves processor power information for // query that retrieves processor power information for
skipping to change at line 4462 skipping to change at line 4792
// //
// The minidump callback should modify the FieldsToWrite parameter to reflect // The minidump callback should modify the FieldsToWrite parameter to reflect
// what portions of the specified thread or module should be written to the // what portions of the specified thread or module should be written to the
// file. // file.
// //
typedef typedef
BOOL BOOL
(WINAPI * MINIDUMP_CALLBACK_ROUTINE) ( (WINAPI * MINIDUMP_CALLBACK_ROUTINE) (
__inout PVOID CallbackParam, _Inout_ PVOID CallbackParam,
__in PMINIDUMP_CALLBACK_INPUT CallbackInput, _In_ PMINIDUMP_CALLBACK_INPUT CallbackInput,
__inout PMINIDUMP_CALLBACK_OUTPUT CallbackOutput _Inout_ PMINIDUMP_CALLBACK_OUTPUT CallbackOutput
); );
typedef struct _MINIDUMP_CALLBACK_INFORMATION { typedef struct _MINIDUMP_CALLBACK_INFORMATION {
MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
PVOID CallbackParam; PVOID CallbackParam;
} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
//++ //++
// //
// PVOID // PVOID
skipping to change at line 4502 skipping to change at line 4832
// //
// A pointer to the desired data. // A pointer to the desired data.
// //
//-- //--
#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva))) #define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
BOOL BOOL
WINAPI WINAPI
MiniDumpWriteDump( MiniDumpWriteDump(
__in HANDLE hProcess, _In_ HANDLE hProcess,
__in DWORD ProcessId, _In_ DWORD ProcessId,
__in HANDLE hFile, _In_ HANDLE hFile,
__in MINIDUMP_TYPE DumpType, _In_ MINIDUMP_TYPE DumpType,
__in_opt PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, _In_opt_ PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
__in_opt PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, _In_opt_ PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
__in_opt PMINIDUMP_CALLBACK_INFORMATION CallbackParam _In_opt_ PMINIDUMP_CALLBACK_INFORMATION CallbackParam
); );
BOOL BOOL
WINAPI WINAPI
MiniDumpReadDumpStream( MiniDumpReadDumpStream(
__in PVOID BaseOfDump, _In_ PVOID BaseOfDump,
__in ULONG StreamNumber, _In_ ULONG StreamNumber,
__deref_out_opt PMINIDUMP_DIRECTORY * Dir, _Outptr_result_maybenull_ PMINIDUMP_DIRECTORY * Dir,
__deref_out_opt PVOID * StreamPointer, _Outptr_result_maybenull_ PVOID * StreamPointer,
__out_opt ULONG * StreamSize _Out_opt_ ULONG * StreamSize
); );
#if defined(_MSC_VER) #if defined(_MSC_VER)
#if _MSC_VER >= 800 #if _MSC_VER >= 800
#if _MSC_VER >= 1200 #if _MSC_VER >= 1200
#pragma warning(pop) #pragma warning(pop)
#else #else
#pragma warning(default:4200) /* Zero length array */ #pragma warning(default:4200) /* Zero length array */
#pragma warning(default:4201) /* Nameless struct/union */ #pragma warning(default:4201) /* Nameless struct/union */
#endif #endif
#endif #endif
#endif #endif
#include <poppack.h> #include <poppack.h>
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#endif // _DBGHELP_ #endif // _DBGHELP_
 End of changes. 270 change blocks. 
976 lines changed or deleted 1314 lines changed or added

This html diff was produced by rfcdiff 1.41.