imagehlp.h

来自「这是VCF框架的代码」· C头文件 代码 · 共 2,420 行 · 第 1/5 页

H
2,420
字号
    TI_GET_DATAKIND,    TI_GET_ADDRESSOFFSET,    TI_GET_OFFSET,    TI_GET_VALUE,    TI_GET_COUNT,    TI_GET_CHILDRENCOUNT,    TI_GET_BITPOSITION,    TI_GET_VIRTUALBASECLASS,    TI_GET_VIRTUALTABLESHAPEID,    TI_GET_VIRTUALBASEPOINTEROFFSET,    TI_GET_CLASSPARENTID,    TI_GET_NESTED,    TI_GET_SYMINDEX,    TI_GET_LEXICALPARENT,    TI_GET_ADDRESS,    TI_GET_THISADJUST,} IMAGEHLP_SYMBOL_TYPE_INFO;typedef struct _TI_FINDCHILDREN_PARAMS {    ULONG Count;    ULONG Start;    ULONG ChildId[1];} TI_FINDCHILDREN_PARAMS;BOOLIMAGEAPISymGetTypeInfo(    IN  HANDLE          hProcess,    IN  DWORD64         ModBase,    IN  ULONG           TypeId,    IN  IMAGEHLP_SYMBOL_TYPE_INFO GetType,    OUT PVOID           pInfo    );BOOLIMAGEAPISymEnumTypes(    IN HANDLE                       hProcess,    IN ULONG64                      BaseOfDll,    IN PSYM_ENUMERATESYMBOLS_CALLBACK    EnumSymbolsCallback,    IN PVOID                        UserContext    );BOOLIMAGEAPISymGetTypeFromName(    IN  HANDLE              hProcess,    IN  ULONG64             BaseOfDll,    IN  LPSTR               Name,    OUT PSYMBOL_INFO        Symbol    );//// Full user-mode dump creation.//typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(    DWORD       DataType,    PVOID*      Data,    LPDWORD     DataLength,    PVOID       UserData    );BOOLWINAPIDbgHelpCreateUserDump(    IN LPSTR                              FileName,    IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,    IN PVOID                              UserData    );BOOLWINAPIDbgHelpCreateUserDumpW(    IN LPWSTR                             FileName,    IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,    IN PVOID                              UserData    );// -----------------------------------------------------------------// The following 4 legacy APIs are fully supported, but newer// ones are recommended.  SymFromName and SymFromAddr provide// much more detailed info on the returned symbol.BOOLIMAGEAPISymGetSymFromAddr64(    IN  HANDLE              hProcess,    IN  DWORD64             qwAddr,    OUT PDWORD64            pdwDisplacement,    OUT PIMAGEHLP_SYMBOL64  Symbol    );#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)#define SymGetSymFromAddr SymGetSymFromAddr64#elseBOOLIMAGEAPISymGetSymFromAddr(    IN  HANDLE            hProcess,    IN  DWORD             dwAddr,    OUT PDWORD            pdwDisplacement,    OUT PIMAGEHLP_SYMBOL  Symbol    );#endif// While following two APIs will provide a symbol from a name,// SymEnumSymbols can provide the same matching information// for ALL symbols with a matching name, even regular// expressions.  That way you can search across modules// and differentiate between identically named symbols.BOOLIMAGEAPISymGetSymFromName64(    IN  HANDLE              hProcess,    IN  PSTR                Name,    OUT PIMAGEHLP_SYMBOL64  Symbol    );#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)#define SymGetSymFromName SymGetSymFromName64#elseBOOLIMAGEAPISymGetSymFromName(    IN  HANDLE            hProcess,    IN  PSTR              Name,    OUT PIMAGEHLP_SYMBOL  Symbol    );#endif// -----------------------------------------------------------------// The following APIs exist only for backwards compatibility// with a pre-release version documented in an MSDN release.// You should use SymFindFileInPath if you want to maintain// future compatibility.DBHLP_DEPRECIATEDBOOLIMAGEAPIFindFileInPath(    HANDLE hprocess,    LPSTR  SearchPath,    LPSTR  FileName,    PVOID  id,    DWORD  two,    DWORD  three,    DWORD  flags,    LPSTR  FilePath    );// You should use SymFindFileInPath if you want to maintain// future compatibility.DBHLP_DEPRECIATEDBOOLIMAGEAPIFindFileInSearchPath(    HANDLE hprocess,    LPSTR  SearchPath,    LPSTR  FileName,    DWORD  one,    DWORD  two,    DWORD  three,    LPSTR  FilePath    );DBHLP_DEPRECIATEDBOOLIMAGEAPISymEnumSym(    IN HANDLE                       hProcess,    IN ULONG64                      BaseOfDll,    IN PSYM_ENUMERATESYMBOLS_CALLBACK    EnumSymbolsCallback,    IN PVOID                        UserContext    );#include <pshpack4.h>#pragma warning(disable:4200) // Zero length array#define MINIDUMP_SIGNATURE ('PMDM')#define MINIDUMP_VERSION   (42899)typedef DWORD RVA;typedef ULONG64 RVA64;typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {    ULONG32 DataSize;    RVA Rva;} MINIDUMP_LOCATION_DESCRIPTOR;typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {    ULONG64 DataSize;    RVA64 Rva;} MINIDUMP_LOCATION_DESCRIPTOR64;typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {    ULONG64 StartOfMemoryRange;    MINIDUMP_LOCATION_DESCRIPTOR Memory;} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;// DESCRIPTOR64 is used for full-memory minidumps where// all of the raw memory is laid out sequentially at the// end of the dump.  There is no need for individual RVAs// as the RVA is the base RVA plus the sum of the preceeding// data blocks.typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {    ULONG64 StartOfMemoryRange;    ULONG64 DataSize;} MINIDUMP_MEMORY_DESCRIPTOR64, *PMINIDUMP_MEMORY_DESCRIPTOR64;typedef struct _MINIDUMP_HEADER {    ULONG32 Signature;    ULONG32 Version;    ULONG32 NumberOfStreams;    RVA StreamDirectoryRva;    ULONG32 CheckSum;    union {        ULONG32 Reserved;        ULONG32 TimeDateStamp;    };    ULONG64 Flags;} MINIDUMP_HEADER, *PMINIDUMP_HEADER;//// The MINIDUMP_HEADER field StreamDirectoryRva points to // an array of MINIDUMP_DIRECTORY structures.//typedef struct _MINIDUMP_DIRECTORY {    ULONG32 StreamType;    MINIDUMP_LOCATION_DESCRIPTOR Location;} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;typedef struct _MINIDUMP_STRING {    ULONG32 Length;         // Length in bytes of the string    WCHAR   Buffer [0];     // Variable size buffer} MINIDUMP_STRING, *PMINIDUMP_STRING;//// The MINIDUMP_DIRECTORY field StreamType may be one of the following types.// Types will be added in the future, so if a program reading the minidump// header encounters a stream type it does not understand it should ignore// the data altogether. Any tag above LastReservedStream will not be used by// the system and is reserved for program-specific information.//typedef enum _MINIDUMP_STREAM_TYPE {    UnusedStream                = 0,    ReservedStream0             = 1,    ReservedStream1             = 2,    ThreadListStream            = 3,    ModuleListStream            = 4,    MemoryListStream            = 5,    ExceptionStream             = 6,    SystemInfoStream            = 7,    ThreadExListStream          = 8,    Memory64ListStream          = 9,    CommentStreamA              = 10,    CommentStreamW              = 11,    HandleDataStream            = 12,    FunctionTableStream         = 13,    LastReservedStream          = 0xffff} MINIDUMP_STREAM_TYPE;//// The minidump system information contains processor and// Operating System specific information.//     typedef struct _MINIDUMP_SYSTEM_INFO {    //    // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all    // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ).    //        USHORT ProcessorArchitecture;    USHORT ProcessorLevel;    USHORT ProcessorRevision;    USHORT Reserved0;              // Reserved for future use. Must be zero.    //    // MajorVersion, MinorVersion, BuildNumber, PlatformId and    // CSDVersion are all taken from the OSVERSIONINFO structure    // returned by GetVersionEx( ).    //        ULONG32 MajorVersion;    ULONG32 MinorVersion;    ULONG32 BuildNumber;    ULONG32 PlatformId;    //    // RVA to a CSDVersion string in the string table.    //        RVA CSDVersionRva;    ULONG32 Reserved1;             // Reserved for future use.    //    // CPU information is obtained from one of two places.    //    //  1) On x86 computers, CPU_INFORMATION is obtained from the CPUID    //     instruction. You must use the X86 portion of the union for X86    //     computers.    //    //  2) On non-x86 architectures, CPU_INFORMATION is obtained by calling    //     IsProcessorFeatureSupported().    //        union _CPU_INFORMATION {        //        // X86 platforms use CPUID function to obtain processor information.        //                struct {            //            // CPUID Subfunction 0, register EAX (VendorId [0]),            // EBX (VendorId [1]) and ECX (VendorId [2]).            //                        ULONG32 VendorId [ 3 ];                        //            // CPUID Subfunction 1, register EAX            //                        ULONG32 VersionInformation;            //            // CPUID Subfunction 1, register EDX            //                        ULONG32 FeatureInformation;                        //            // CPUID, Subfunction 80000001, register EBX. This will only            // be obtained if the vendor id is "AuthenticAMD".            //                        ULONG32 AMDExtendedCpuFeatures;            } X86CpuInfo;        //        // Non-x86 platforms use processor feature flags.        //                struct {            ULONG64 ProcessorFeatures [ 2 ];                    } OtherCpuInfo;            } Cpu;} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;typedef union _CPU_INFORMATION CPU_INFORMATION, *PCPU_INFORMATION;//// The minidump thread contains standard thread// information plus an RVA to the memory for this // thread and an RVA to the CONTEXT structure for// this thread.////// ThreadId must be 4 bytes on all architectures.//C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4);typedef struct _MINIDUMP_THREAD {    ULONG32 ThreadId;    ULONG32 SuspendCount;    ULONG32 PriorityClass;    ULONG32 Priority;    ULONG64 Teb;    MINIDUMP_MEMORY_DESCRIPTOR Stack;    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;} MINIDUMP_THREAD, *PMINIDUMP_THREAD;//// The thread list is a container of threads.//typedef struct _MINIDUMP_THREAD_LIST {    ULONG32 NumberOfThreads;    MINIDUMP_THREAD Threads [0];} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;typedef struct _MINIDUMP_THREAD_EX {    ULONG32 ThreadId;    ULONG32 SuspendCount;    ULONG32 PriorityClass;    ULONG32 Priority;    ULONG64 Teb;    MINIDUMP_MEMORY_DESCRIPTOR Stack;    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;    MINIDUMP_MEMORY_DESCRIPTOR BackingStore;} MINIDUMP_THREAD_EX, *PMINIDUMP_THREAD_EX;//// The thread list is a container of threads.//typedef struct _MINIDUMP_THREAD_EX_LIST {    ULONG32 NumberOfThreads;    MINIDUMP_THREAD_EX Threads [0];} MINIDUMP_THREAD_EX_LIST, *PMINIDUMP_THREAD_EX_LIST;//// The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64.//typedef struct _MINIDUMP_EXCEPTION  {    ULONG32 ExceptionCode;    ULONG32 ExceptionFlags;    ULONG64 ExceptionRecord;    ULONG64 ExceptionAddress;    ULONG32 NumberParameters;    ULONG32 __unusedAlignment;    ULONG64 ExceptionInformation [ EXCEPTION_MAXIMUM_PARAMETERS ];} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;//// The exception information stream contains the id of the thread that caused// the exception (ThreadId), the exception record for the exception// (ExceptionRecord) and an RVA to the thread context where the exception// occured.//typedef struct MINIDUMP_EXCEPTION_STREAM {    ULONG32 ThreadId;    ULONG32  __alignment;    MINIDUMP_EXCEPTION ExceptionRecord;    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;//// The MINIDUMP_MODULE contains information about a// a specific module. It includes the CheckSum and// the TimeDateStamp for the module so the module// can be reloaded during the analysis phase.//typedef struct _MINIDUMP_MODULE {    ULONG64 BaseOfImage;    ULONG32 SizeOfImage;    ULONG32 CheckSum;    ULONG32 TimeDateStamp;    RVA ModuleNameRva;    VS_FIXEDFILEINFO VersionInfo;    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;    ULONG64 Reserved0;                          // Reserved for future use. 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?