summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/imagehlp.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/sdk/inc/imagehlp.h')
-rw-r--r--public/sdk/inc/imagehlp.h922
1 files changed, 922 insertions, 0 deletions
diff --git a/public/sdk/inc/imagehlp.h b/public/sdk/inc/imagehlp.h
new file mode 100644
index 000000000..3d15665d4
--- /dev/null
+++ b/public/sdk/inc/imagehlp.h
@@ -0,0 +1,922 @@
+/*++ BUILD Version: 0001 Increment this if a change has global effects
+
+Copyright (c) 1993-1996 Microsoft Corporation
+
+Module Name:
+
+ imagehlp.h
+
+Abstract:
+
+ This module defines the prptotypes and constants required for the image
+ help routines.
+
+Revision History:
+
+--*/
+
+#ifndef _IMAGEHLP_
+#define _IMAGEHLP_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// Define checksum return codes.
+//
+
+#define CHECKSUM_SUCCESS 0
+#define CHECKSUM_OPEN_FAILURE 1
+#define CHECKSUM_MAP_FAILURE 2
+#define CHECKSUM_MAPVIEW_FAILURE 3
+#define CHECKSUM_UNICODE_FAILURE 4
+
+// Define Splitsym flags.
+
+#define SPLITSYM_REMOVE_PRIVATE 0x00000001 // Remove CV types/symbols and Fixup debug
+ // Used for creating .dbg files that ship
+ // as part of the product.
+
+#define SPLITSYM_EXTRACT_ALL 0x00000002 // Extract all debug info from image.
+ // Normally, FPO is left in the image
+ // to allow stack traces through the code.
+ // Using this switch is similar to linking
+ // with -debug:none except the .dbg file
+ // exists...
+
+#ifdef _IMAGEHLP_SOURCE_
+#define IMAGEAPI __stdcall
+#else
+#define IMAGEAPI DECLSPEC_IMPORT __stdcall
+#endif
+
+//
+// Define checksum function prototypes.
+//
+
+PIMAGE_NT_HEADERS
+IMAGEAPI
+CheckSumMappedFile (
+ LPVOID BaseAddress,
+ DWORD FileLength,
+ LPDWORD HeaderSum,
+ LPDWORD CheckSum
+ );
+
+DWORD
+IMAGEAPI
+MapFileAndCheckSumA (
+ LPSTR Filename,
+ LPDWORD HeaderSum,
+ LPDWORD CheckSum
+ );
+
+DWORD
+IMAGEAPI
+MapFileAndCheckSumW (
+ PWSTR Filename,
+ LPDWORD HeaderSum,
+ LPDWORD CheckSum
+ );
+
+#ifdef UNICODE
+#define MapFileAndCheckSum MapFileAndCheckSumW
+#else
+#define MapFileAndCheckSum MapFileAndCheckSumA
+#endif // !UNICODE
+
+
+BOOL
+IMAGEAPI
+TouchFileTimes (
+ HANDLE FileHandle,
+ LPSYSTEMTIME lpSystemTime
+ );
+
+BOOL
+IMAGEAPI
+SplitSymbols (
+ LPSTR ImageName,
+ LPSTR SymbolsPath,
+ LPSTR SymbolFilePath,
+ DWORD Flags // Combination of flags above
+ );
+
+HANDLE
+IMAGEAPI
+FindDebugInfoFile (
+ LPSTR FileName,
+ LPSTR SymbolPath,
+ LPSTR DebugFilePath
+ );
+
+HANDLE
+IMAGEAPI
+FindExecutableImage(
+ LPSTR FileName,
+ LPSTR SymbolPath,
+ LPSTR ImageFilePath
+ );
+
+BOOL
+IMAGEAPI
+UpdateDebugInfoFile(
+ LPSTR ImageFileName,
+ LPSTR SymbolPath,
+ LPSTR DebugFilePath,
+ PIMAGE_NT_HEADERS NtHeaders
+ );
+
+BOOL
+IMAGEAPI
+UpdateDebugInfoFileEx(
+ LPSTR ImageFileName,
+ LPSTR SymbolPath,
+ LPSTR DebugFilePath,
+ PIMAGE_NT_HEADERS NtHeaders,
+ DWORD OldChecksum
+ );
+
+BOOL
+IMAGEAPI
+BindImage(
+ IN LPSTR ImageName,
+ IN LPSTR DllPath,
+ IN LPSTR SymbolPath
+ );
+
+typedef enum _IMAGEHLP_STATUS_REASON {
+ BindOutOfMemory,
+ BindRvaToVaFailed,
+ BindNoRoomInImage,
+ BindImportModuleFailed,
+ BindImportProcedureFailed,
+ BindImportModule,
+ BindImportProcedure,
+ BindForwarder,
+ BindForwarderNOT,
+ BindImageModified,
+ BindExpandFileHeaders,
+ BindImageComplete,
+ BindMismatchedSymbols,
+ BindSymbolsNotUpdated
+} IMAGEHLP_STATUS_REASON;
+
+typedef
+BOOL
+(__stdcall *PIMAGEHLP_STATUS_ROUTINE)(
+ IMAGEHLP_STATUS_REASON Reason,
+ LPSTR ImageName,
+ LPSTR DllName,
+ ULONG Va,
+ ULONG Parameter
+ );
+
+
+BOOL
+IMAGEAPI
+BindImageEx(
+ IN DWORD Flags,
+ IN LPSTR ImageName,
+ IN LPSTR DllPath,
+ IN LPSTR SymbolPath,
+ IN PIMAGEHLP_STATUS_ROUTINE StatusRoutine
+ );
+
+#define BIND_NO_BOUND_IMPORTS 0x00000001
+#define BIND_NO_UPDATE 0x00000002
+#define BIND_ALL_IMAGES 0x00000004
+
+BOOL
+IMAGEAPI
+ReBaseImage(
+ IN LPSTR CurrentImageName,
+ IN LPSTR SymbolPath,
+ IN BOOL fReBase, // TRUE if actually rebasing, false if only summing
+ IN BOOL fRebaseSysfileOk, // TRUE is system images s/b rebased
+ IN BOOL fGoingDown, // TRUE if the image s/b rebased below the given base
+ IN ULONG CheckImageSize, // Max size allowed (0 if don't care)
+ OUT ULONG *OldImageSize, // Returned from the header
+ OUT ULONG *OldImageBase, // Returned from the header
+ OUT ULONG *NewImageSize, // Image size rounded to next separation boundary
+ IN OUT ULONG *NewImageBase, // (in) Desired new address.
+ // (out) Next address (actual if going down)
+ IN ULONG TimeStamp // new timestamp for image, if non-zero
+ );
+
+#define IMAGE_SEPARATION (64*1024)
+
+
+typedef struct _LOADED_IMAGE {
+ LPSTR ModuleName;
+ HANDLE hFile;
+ PUCHAR MappedAddress;
+ PIMAGE_NT_HEADERS FileHeader;
+ PIMAGE_SECTION_HEADER LastRvaSection;
+ ULONG NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+ ULONG Characteristics;
+ BOOLEAN fSystemImage;
+ BOOLEAN fDOSImage;
+ LIST_ENTRY Links;
+ ULONG SizeOfImage;
+} LOADED_IMAGE, *PLOADED_IMAGE;
+
+
+PLOADED_IMAGE
+IMAGEAPI
+ImageLoad(
+ LPSTR DllName,
+ LPSTR DllPath
+ );
+
+BOOL
+IMAGEAPI
+ImageUnload(
+ PLOADED_IMAGE LoadedImage
+ );
+
+PIMAGE_NT_HEADERS
+IMAGEAPI
+ImageNtHeader (
+ IN PVOID Base
+ );
+
+PVOID
+IMAGEAPI
+ImageDirectoryEntryToData (
+ IN PVOID Base,
+ IN BOOLEAN MappedAsImage,
+ IN USHORT DirectoryEntry,
+ OUT PULONG Size
+ );
+
+PIMAGE_SECTION_HEADER
+IMAGEAPI
+ImageRvaToSection(
+ IN PIMAGE_NT_HEADERS NtHeaders,
+ IN PVOID Base,
+ IN ULONG Rva
+ );
+
+PVOID
+IMAGEAPI
+ImageRvaToVa(
+ IN PIMAGE_NT_HEADERS NtHeaders,
+ IN PVOID Base,
+ IN ULONG Rva,
+ IN OUT PIMAGE_SECTION_HEADER *LastRvaSection
+ );
+
+BOOL
+IMAGEAPI
+MapAndLoad(
+ LPSTR ImageName,
+ LPSTR DllPath,
+ PLOADED_IMAGE LoadedImage,
+ BOOL DotDll,
+ BOOL ReadOnly
+ );
+
+BOOL
+IMAGEAPI
+GetImageConfigInformation(
+ PLOADED_IMAGE LoadedImage,
+ PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
+ );
+
+DWORD
+IMAGEAPI
+GetImageUnusedHeaderBytes(
+ PLOADED_IMAGE LoadedImage,
+ LPDWORD SizeUnusedHeaderBytes
+ );
+
+BOOL
+IMAGEAPI
+SetImageConfigInformation(
+ PLOADED_IMAGE LoadedImage,
+ PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
+ );
+
+BOOL
+IMAGEAPI
+UnMapAndLoad(
+ PLOADED_IMAGE LoadedImage
+ );
+
+typedef struct _IMAGE_DEBUG_INFORMATION {
+ LIST_ENTRY List;
+ DWORD Size;
+ PVOID MappedBase;
+ USHORT Machine;
+ USHORT Characteristics;
+ DWORD CheckSum;
+ DWORD ImageBase;
+ DWORD SizeOfImage;
+
+ DWORD NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+
+ DWORD ExportedNamesSize;
+ LPSTR ExportedNames;
+
+ DWORD NumberOfFunctionTableEntries;
+ PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
+ DWORD LowestFunctionStartingAddress;
+ DWORD HighestFunctionEndingAddress;
+
+ DWORD NumberOfFpoTableEntries;
+ PFPO_DATA FpoTableEntries;
+
+ DWORD SizeOfCoffSymbols;
+ PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
+
+ DWORD SizeOfCodeViewSymbols;
+ PVOID CodeViewSymbols;
+
+ LPSTR ImageFilePath;
+ LPSTR ImageFileName;
+ LPSTR DebugFilePath;
+
+ DWORD TimeDateStamp;
+
+ BOOL RomImage;
+ PIMAGE_DEBUG_DIRECTORY DebugDirectory;
+ DWORD NumberOfDebugDirectories;
+
+ DWORD Reserved[ 3 ];
+
+} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
+
+
+PIMAGE_DEBUG_INFORMATION
+IMAGEAPI
+MapDebugInformation (
+ HANDLE FileHandle,
+ LPSTR FileName,
+ LPSTR SymbolPath,
+ DWORD ImageBase
+ );
+
+BOOL
+IMAGEAPI
+UnmapDebugInformation(
+ PIMAGE_DEBUG_INFORMATION DebugInfo
+ );
+
+HANDLE
+IMAGEAPI
+FindExecutableImage(
+ LPSTR FileName,
+ LPSTR SymbolPath,
+ LPSTR ImageFilePath
+ );
+
+BOOL
+IMAGEAPI
+SearchTreeForFile(
+ LPSTR RootPath,
+ LPSTR InputPathName,
+ LPSTR OutputPathBuffer
+ );
+
+BOOL
+IMAGEAPI
+MakeSureDirectoryPathExists(
+ LPCSTR DirPath
+ );
+
+//
+// UnDecorateSymbolName Flags
+//
+
+#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration
+#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) // Remove leading underscores from MS extended keywords
+#define UNDNAME_NO_MS_KEYWORDS (0x0002) // Disable expansion of MS extended keywords
+#define UNDNAME_NO_FUNCTION_RETURNS (0x0004) // Disable expansion of return type for primary declaration
+#define UNDNAME_NO_ALLOCATION_MODEL (0x0008) // Disable expansion of the declaration model
+#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) // Disable expansion of the declaration language specifier
+#define UNDNAME_NO_MS_THISTYPE (0x0020) // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
+#define UNDNAME_NO_CV_THISTYPE (0x0040) // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
+#define UNDNAME_NO_THISTYPE (0x0060) // Disable all modifiers on the 'this' type
+#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) // Disable expansion of access specifiers for members
+#define UNDNAME_NO_THROW_SIGNATURES (0x0100) // Disable expansion of 'throw-signatures' for functions and pointers to functions
+#define UNDNAME_NO_MEMBER_TYPE (0x0200) // Disable expansion of 'static' or 'virtual'ness of members
+#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) // Disable expansion of MS model for UDT returns
+#define UNDNAME_32_BIT_DECODE (0x0800) // Undecorate 32-bit decorated names
+#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for primary declaration;
+ // return just [scope::]name. Does expand template params
+#define UNDNAME_NO_ARGUMENTS (0x2000) // Don't undecorate arguments to function
+#define UNDNAME_NO_SPECIAL_SYMS (0x4000) // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
+
+DWORD
+IMAGEAPI
+WINAPI
+UnDecorateSymbolName(
+ LPCSTR DecoratedName, // Name to undecorate
+ LPSTR UnDecoratedName, // If NULL, it will be allocated
+ DWORD UndecoratedLength, // The maximym length
+ DWORD Flags // See above.
+ );
+
+//
+// StackWalking API
+//
+
+typedef enum {
+ AddrMode1616,
+ AddrMode1632,
+ AddrModeReal,
+ AddrModeFlat
+} ADDRESS_MODE;
+
+typedef struct _tagADDRESS {
+ DWORD Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS, *LPADDRESS;
+
+
+//
+// This structure is included in the STACKFRAME structure,
+// and is used to trace through usermode callbacks in a thread's
+// kernel stack. The values must be copied by the kernel debugger
+// from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets.
+//
+typedef struct _KDHELP {
+
+ //
+ // address of kernel thread object, as provided in the
+ // WAIT_STATE_CHANGE packet.
+ //
+ DWORD Thread;
+
+ //
+ // offset in thread object to pointer to the current callback frame
+ // in kernel stack.
+ //
+ DWORD ThCallbackStack;
+
+ //
+ // offsets to values in frame:
+ //
+ // address of next callback frame
+ DWORD NextCallback;
+
+ // address of saved frame pointer (if applicable)
+ DWORD FramePointer;
+
+ //
+ // Address of the kernel function that calls out to user mode
+ //
+ DWORD KiCallUserMode;
+
+ //
+ // Address of the user mode dispatcher function
+ //
+ DWORD KeUserCallbackDispatcher;
+
+} KDHELP, *PKDHELP;
+
+
+typedef struct _tagSTACKFRAME {
+ ADDRESS AddrPC; // program counter
+ ADDRESS AddrReturn; // return address
+ ADDRESS AddrFrame; // frame pointer
+ ADDRESS AddrStack; // stack pointer
+ LPVOID FuncTableEntry; // pointer to pdata/fpo or NULL
+ DWORD Params[4]; // possible arguments to the function
+ BOOL Far; // WOW far call
+ BOOL Virtual; // is this a virtual frame?
+ DWORD Reserved[3]; // used internally by StackWalk api
+ KDHELP KdHelp;
+} STACKFRAME, *LPSTACKFRAME;
+
+typedef
+BOOL
+(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)(
+ HANDLE hProcess,
+ LPCVOID lpBaseAddress,
+ LPVOID lpBuffer,
+ DWORD nSize,
+ LPDWORD lpNumberOfBytesRead
+ );
+
+typedef
+LPVOID
+(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)(
+ HANDLE hProcess,
+ DWORD AddrBase
+ );
+
+typedef
+DWORD
+(__stdcall *PGET_MODULE_BASE_ROUTINE)(
+ HANDLE hProcess,
+ DWORD ReturnAddress
+ );
+
+
+typedef
+DWORD
+(__stdcall *PTRANSLATE_ADDRESS_ROUTINE)(
+ HANDLE hProcess,
+ HANDLE hThread,
+ LPADDRESS lpaddr
+ );
+
+BOOL
+IMAGEAPI
+StackWalk(
+ DWORD MachineType,
+ HANDLE hProcess,
+ HANDLE hThread,
+ LPSTACKFRAME StackFrame,
+ LPVOID ContextRecord,
+ PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
+ PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
+ PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
+ PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
+ );
+
+#define API_VERSION_NUMBER 5
+
+typedef struct API_VERSION {
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ USHORT Revision;
+ USHORT Reserved;
+} API_VERSION, *LPAPI_VERSION;
+
+LPAPI_VERSION
+IMAGEAPI
+ImagehlpApiVersion(
+ VOID
+ );
+
+LPAPI_VERSION
+IMAGEAPI
+ImagehlpApiVersionEx(
+ LPAPI_VERSION AppVersion
+ );
+
+DWORD
+IMAGEAPI
+GetTimestampForLoadedLibrary(
+ HMODULE Module
+ );
+
+BOOL
+IMAGEAPI
+RemovePrivateCvSymbolic(
+ PCHAR DebugData,
+ PCHAR * NewDebugData,
+ ULONG * NewDebugSize
+ );
+
+VOID
+IMAGEAPI
+RemoveRelocations(
+ PCHAR ImageName
+ );
+
+//
+// typedefs for function pointers
+//
+typedef BOOL
+(CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
+ LPSTR ModuleName,
+ ULONG BaseOfDll,
+ PVOID UserContext
+ );
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
+ LPSTR SymbolName,
+ ULONG SymbolAddress,
+ ULONG SymbolSize,
+ PVOID UserContext
+ );
+
+typedef BOOL
+(CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
+ LPSTR ModuleName,
+ ULONG ModuleBase,
+ ULONG ModuleSize,
+ PVOID UserContext
+ );
+
+typedef BOOL
+(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
+ HANDLE hProcess,
+ ULONG ActionCode,
+ PVOID CallbackData,
+ PVOID UserContext
+ );
+
+//
+// symbol flags
+//
+#define SYMF_OMAP_GENERATED 0x00000001
+#define SYMF_OMAP_MODIFIED 0x00000002
+
+//
+// symbol type enumeration
+//
+typedef enum {
+ SymNone,
+ SymCoff,
+ SymCv,
+ SymPdb,
+ SymExport,
+ SymDeferred,
+ SymSym // .sym file
+} SYM_TYPE;
+
+//
+// symbol data structure
+//
+typedef struct _IMAGEHLP_SYMBOL {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL)
+ DWORD Address; // virtual address including dll base address
+ DWORD Size; // estimated size of symbol, can be zero
+ DWORD Flags; // info about the symbols, see the SYMF defines
+ DWORD MaxNameLength; // maximum size of symbol name in 'Name'
+ CHAR Name[1]; // symbol name (null terminated string)
+} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
+
+//
+// module data structure
+//
+typedef struct _IMAGEHLP_MODULE {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE)
+ DWORD BaseOfImage; // base load address of module
+ DWORD ImageSize; // virtual size of the loaded module
+ DWORD TimeDateStamp; // date/time stamp from pe header
+ DWORD CheckSum; // checksum from the pe header
+ DWORD NumSyms; // number of symbols in the symbol table
+ SYM_TYPE SymType; // type of symbols loaded
+ CHAR ModuleName[32]; // module name
+ CHAR ImageName[256]; // image name
+ CHAR LoadedImageName[256]; // symbol file name
+} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
+
+//
+// data structures used for registered symbol callbacks
+//
+
+#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
+#define CBA_SYMBOLS_UNLOADED 0x00000004
+#define CBA_DUPLICATE_SYMBOL 0x00000005
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD)
+ DWORD BaseOfImage; // base load address of module
+ DWORD CheckSum; // checksum from the pe header
+ DWORD TimeDateStamp; // date/time stamp from pe header
+ CHAR FileName[MAX_PATH]; // symbols file or image name
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL)
+ DWORD NumberOfDups; // number of duplicates in the Symbol array
+ PIMAGEHLP_SYMBOL Symbol; // array of duplicate symbols
+ ULONG SelectedSymbol; // symbol selected (-1 to start)
+} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
+
+
+//
+// options that are set/returned by SymSetOptions() & SymGetOptions()
+// these are used as a mask
+//
+#define SYMOPT_CASE_INSENSITIVE 0x00000001
+#define SYMOPT_UNDNAME 0x00000002
+#define SYMOPT_DEFERRED_LOADS 0x00000004
+#define SYMOPT_NO_CPP 0x00000008
+
+
+DWORD
+IMAGEAPI
+SymSetOptions(
+ IN DWORD SymOptions
+ );
+
+DWORD
+IMAGEAPI
+SymGetOptions(
+ VOID
+ );
+
+BOOL
+IMAGEAPI
+SymCleanup(
+ IN HANDLE hProcess
+ );
+
+BOOL
+IMAGEAPI
+SymEnumerateModules(
+ IN HANDLE hProcess,
+ IN PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
+ IN PVOID UserContext
+ );
+
+BOOL
+IMAGEAPI
+SymEnumerateSymbols(
+ IN HANDLE hProcess,
+ IN DWORD BaseOfDll,
+ IN PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,
+ IN PVOID UserContext
+ );
+
+BOOL
+IMAGEAPI
+EnumerateLoadedModules(
+ IN HANDLE hProcess,
+ IN PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
+ IN PVOID UserContext
+ );
+
+LPVOID
+IMAGEAPI
+SymFunctionTableAccess(
+ HANDLE hProcess,
+ DWORD AddrBase
+ );
+
+BOOL
+IMAGEAPI
+SymGetModuleInfo(
+ IN HANDLE hProcess,
+ IN DWORD dwAddr,
+ OUT PIMAGEHLP_MODULE ModuleInfo
+ );
+
+DWORD
+IMAGEAPI
+SymGetModuleBase(
+ IN HANDLE hProcess,
+ IN DWORD dwAddr
+ );
+
+BOOL
+IMAGEAPI
+SymGetSymFromAddr(
+ IN HANDLE hProcess,
+ IN DWORD dwAddr,
+ OUT PDWORD pdwDisplacement,
+ OUT PIMAGEHLP_SYMBOL Symbol
+ );
+
+BOOL
+IMAGEAPI
+SymGetSymFromName(
+ IN HANDLE hProcess,
+ IN LPSTR Name,
+ OUT PIMAGEHLP_SYMBOL Symbol
+ );
+
+BOOL
+IMAGEAPI
+SymGetSymNext(
+ IN HANDLE hProcess,
+ IN OUT PIMAGEHLP_SYMBOL Symbol
+ );
+
+BOOL
+IMAGEAPI
+SymGetSymPrev(
+ IN HANDLE hProcess,
+ IN OUT PIMAGEHLP_SYMBOL Symbol
+ );
+
+BOOL
+IMAGEAPI
+SymInitialize(
+ IN HANDLE hProcess,
+ IN LPSTR UserSearchPath,
+ IN BOOL fInvadeProcess
+ );
+
+BOOL
+IMAGEAPI
+SymGetSearchPath(
+ IN HANDLE hProcess,
+ OUT LPSTR SearchPath,
+ IN DWORD SearchPathLength
+ );
+
+BOOL
+IMAGEAPI
+SymSetSearchPath(
+ IN HANDLE hProcess,
+ IN LPSTR SearchPath
+ );
+
+BOOL
+IMAGEAPI
+SymLoadModule(
+ IN HANDLE hProcess,
+ IN HANDLE hFile,
+ IN PSTR ImageName,
+ IN PSTR ModuleName,
+ IN DWORD BaseOfDll,
+ IN DWORD SizeOfDll
+ );
+
+BOOL
+IMAGEAPI
+SymUnloadModule(
+ IN HANDLE hProcess,
+ IN DWORD BaseOfDll
+ );
+
+BOOL
+IMAGEAPI
+SymUnDName(
+ IN PIMAGEHLP_SYMBOL sym, // Symbol to undecorate
+ OUT LPSTR UnDecName, // Buffer to store undecorated name in
+ IN DWORD UnDecNameLength // Size of the buffer
+ );
+
+BOOL
+IMAGEAPI
+SymRegisterCallback(
+ IN HANDLE hProcess,
+ IN PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
+ IN PVOID UserContext
+ );
+
+// Image Integrity API's
+
+#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 0x01
+#define CERT_PE_IMAGE_DIGEST_RESOURCES 0x02
+#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04
+
+#define CERT_SECTION_TYPE_ANY 0xFF // Any Certificate type
+
+typedef PVOID DIGEST_HANDLE;
+
+typedef BOOL (WINAPI *DIGEST_FUNCTION) (DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength);
+
+BOOL
+IMAGEAPI
+ImageGetDigestStream(
+ IN HANDLE FileHandle,
+ IN DWORD DigestLevel,
+ IN DIGEST_FUNCTION DigestFunction,
+ IN DIGEST_HANDLE DigestHandle
+ );
+
+BOOL
+IMAGEAPI
+ImageAddCertificate(
+ IN HANDLE FileHandle,
+ IN LPWIN_CERTIFICATE Certificate,
+ OUT PDWORD Index
+ );
+
+BOOL
+IMAGEAPI
+ImageRemoveCertificate(
+ IN HANDLE FileHandle,
+ IN DWORD Index
+ );
+
+BOOL
+IMAGEAPI
+ImageEnumerateCertificates(
+ IN HANDLE FileHandle,
+ IN WORD TypeFilter,
+ OUT PDWORD CertificateCount,
+ IN OUT PDWORD Indices OPTIONAL,
+ IN OUT DWORD IndexCount OPTIONAL
+ );
+
+BOOL
+IMAGEAPI
+ImageGetCertificateData(
+ IN HANDLE FileHandle,
+ IN DWORD CertificateIndex,
+ OUT LPWIN_CERTIFICATE Certificate,
+ IN OUT PDWORD RequiredLength
+ );
+
+BOOL
+IMAGEAPI
+ImageGetCertificateHeader(
+ IN HANDLE FileHandle,
+ IN DWORD CertificateIndex,
+ IN OUT LPWIN_CERTIFICATE Certificateheader
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _IMAGEHLP_