mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
98b90e7394
This fixes ARM64 build in preparation for PR #4809. CORE-18200
2481 lines
78 KiB
C
2481 lines
78 KiB
C
#pragma once
|
|
|
|
#include <typedefs.h>
|
|
#include <guiddef.h>
|
|
#include <pecoff.h>
|
|
#include <wine/unicode.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <wchar.h>
|
|
#include <ctype.h>
|
|
#include <wctype.h>
|
|
|
|
#define wcsnicmp strncmpiW
|
|
#define wcsicmp strcmpiW
|
|
#define wcsrchr strrchrW
|
|
#define wcschr strchrW
|
|
|
|
typedef HANDLE HWND;
|
|
|
|
#define min(x, y) (((x) < (y)) ? (x) : (y))
|
|
#define max(x, y) (((x) > (y)) ? (x) : (y))
|
|
#define _strnicmp(_String1, _String2, _MaxCount) strncasecmp(_String1, _String2, _MaxCount)
|
|
#define stricmp(_String1, _String2) strcasecmp(_String1, _String2)
|
|
|
|
#ifdef __i386__
|
|
#define CDECL __cdecl
|
|
#else
|
|
#define CDECL
|
|
#endif
|
|
typedef PVOID IUnknown, IDispatch, IRecordInfo;
|
|
|
|
// windef.h
|
|
#define MAX_PATH 260
|
|
#define CALLBACK
|
|
typedef int (*FARPROC)();
|
|
|
|
// bytesex.h
|
|
#define SWAPD(x) x
|
|
#define SWAPW(x) x
|
|
|
|
// Wine stuff
|
|
#define DECLSPEC_HIDDEN
|
|
#define WINE_DEFAULT_DEBUG_CHANNEL(x)
|
|
#define WINE_DECLARE_DEBUG_CHANNEL(x)
|
|
extern const char *wine_dbgstr_an( const char * s, int n );
|
|
extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
|
|
extern const char *wine_dbg_sprintf( const char *format, ... );
|
|
static __inline const char *wine_dbgstr_longlong( ULONGLONG ll )
|
|
{
|
|
if (/*sizeof(ll) > sizeof(unsigned long) &&*/ ll >> 32) /* ULONGLONG is always > long in ReactOS */
|
|
return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
|
|
else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
|
|
}
|
|
static __inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
|
|
static __inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
|
|
static __inline const char *debugstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); }
|
|
static __inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
|
|
static __inline const char *wine_dbgstr_w( const WCHAR *s ){return wine_dbgstr_wn( s, -1 );}
|
|
/* This should never be called */
|
|
#define wine_get_dos_file_name(__x) (assert(0), NULL)
|
|
|
|
#if 0
|
|
#define WARN(fmt, ...) fprintf(stderr, "WARN %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
|
|
#define FIXME(fmt, ...) fprintf(stderr, "FIXME %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
|
|
#define TRACE(fmt, ...) fprintf(stderr, "TRACE %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
|
|
#define ERR(fmt, ...) fprintf(stderr, "ERR %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
|
|
#else
|
|
#define WARN(fmt, ...)
|
|
#define FIXME(fmt, ...)
|
|
#define TRACE(fmt, ...)
|
|
#define ERR(fmt, ...)
|
|
#endif
|
|
|
|
#define TRACE_ON(x) FALSE
|
|
#define TRACE_(x) TRACE
|
|
#define FIXME_(x) FIXME
|
|
const char *wine_dbg_sprintf( const char *format, ... );
|
|
#define CP_UNIXCP CP_ACP
|
|
#define __TRY if(1)
|
|
#define __EXCEPT_PAGE_FAULT else
|
|
#define __ENDTRY
|
|
|
|
// basetsd.h
|
|
typedef ULONG_PTR KAFFINITY;
|
|
|
|
// excpt.h
|
|
typedef enum _EXCEPTION_DISPOSITION
|
|
{
|
|
ExceptionContinueExecution,
|
|
ExceptionContinueSearch,
|
|
ExceptionNestedException,
|
|
ExceptionCollidedUnwind,
|
|
} EXCEPTION_DISPOSITION;
|
|
|
|
// winerror.h
|
|
#define ERROR_ACCESS_DENIED 5
|
|
#define ERROR_INVALID_HANDLE 6
|
|
#define ERROR_OUTOFMEMORY 14
|
|
#define ERROR_NOT_SUPPORTED 50
|
|
#define ERROR_INVALID_PARAMETER 87
|
|
#define ERROR_CALL_NOT_IMPLEMENTED 120
|
|
#define ERROR_INVALID_NAME 123
|
|
#define ERROR_MOD_NOT_FOUND 126
|
|
#define ERROR_NO_MORE_ITEMS 259
|
|
#define ERROR_INVALID_ADDRESS 487
|
|
|
|
// winnls.h
|
|
#define CP_ACP 0
|
|
#define MultiByteToWideChar __MultiByteToWideChar
|
|
#define WideCharToMultiByte __WideCharToMultiByte
|
|
INT __MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, LPWSTR dst, INT dstlen );
|
|
INT __WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, LPSTR dst, INT dstlen, LPCSTR defchar, BOOL *used );
|
|
|
|
// #define strlenW(s) wcslen((s))
|
|
// #define strcpyW(d,s) wcscpy((d),(s))
|
|
// #define strchrW(s,c) wcschr((s),(c))
|
|
// #define strcatW(d,s) wcscat((d),(s))
|
|
// #define strncmpiW(s1,s2,n) _wcsnicmp((s1),(s2),(n))
|
|
// #define strcmpW(s1,s2) wcscmp((s1),(s2))
|
|
// #define strcmpiW(s1,s2) _wcsicmp((s1),(s2))
|
|
// #define tolowerW(n) towlower((n))
|
|
// #define toupperW(n) towupper((n))
|
|
|
|
// winnt.h
|
|
# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
|
#define IMAGE_FILE_MACHINE_ARMNT 0x1c4
|
|
#define IMAGE_FILE_MACHINE_POWERPC 0x1f0
|
|
#define IMAGE_FILE_MACHINE_ARM64 0xaa64
|
|
#define DLL_PROCESS_DETACH 0
|
|
#define DLL_PROCESS_ATTACH 1
|
|
#define DLL_THREAD_ATTACH 2
|
|
#define DLL_THREAD_DETACH 3
|
|
#define HEAP_ZERO_MEMORY 8
|
|
#define GENERIC_READ 0x80000000
|
|
#define FILE_SHARE_READ 0x00000001
|
|
#define FILE_ATTRIBUTE_NORMAL 0x00000080
|
|
#define PAGE_READONLY 0x0002
|
|
#define SECTION_MAP_READ 4
|
|
#define IMAGE_DEBUG_TYPE_UNKNOWN 0
|
|
#define IMAGE_DEBUG_TYPE_COFF 1
|
|
#define IMAGE_DEBUG_TYPE_CODEVIEW 2
|
|
#define IMAGE_DEBUG_TYPE_FPO 3
|
|
#define IMAGE_DEBUG_TYPE_MISC 4
|
|
#define IMAGE_DEBUG_TYPE_EXCEPTION 5
|
|
#define IMAGE_DEBUG_TYPE_FIXUP 6
|
|
#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
|
|
#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
|
|
#define IMAGE_SYM_CLASS_EXTERNAL 2
|
|
#define IMAGE_SYM_CLASS_FILE 103
|
|
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
|
|
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
|
|
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
|
|
#define IMAGE_DEBUG_MISC_EXENAME 1
|
|
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
|
|
typedef struct _IMAGE_EXPORT_DIRECTORY {
|
|
DWORD Characteristics;
|
|
DWORD TimeDateStamp;
|
|
WORD MajorVersion;
|
|
WORD MinorVersion;
|
|
DWORD Name;
|
|
DWORD Base;
|
|
DWORD NumberOfFunctions;
|
|
DWORD NumberOfNames;
|
|
DWORD AddressOfFunctions;
|
|
DWORD AddressOfNames;
|
|
DWORD AddressOfNameOrdinals;
|
|
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
|
|
typedef struct _IMAGE_DEBUG_MISC {
|
|
DWORD DataType;
|
|
DWORD Length;
|
|
BOOLEAN Unicode;
|
|
BYTE Reserved[3];
|
|
BYTE Data[1];
|
|
} IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;
|
|
typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
|
|
WORD Signature;
|
|
WORD Flags;
|
|
WORD Machine;
|
|
WORD Characteristics;
|
|
DWORD TimeDateStamp;
|
|
DWORD CheckSum;
|
|
DWORD ImageBase;
|
|
DWORD SizeOfImage;
|
|
DWORD NumberOfSections;
|
|
DWORD ExportedNamesSize;
|
|
DWORD DebugDirectorySize;
|
|
DWORD SectionAlignment;
|
|
DWORD Reserved[2];
|
|
} IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER;
|
|
typedef struct _SECURITY_ATTRIBUTES {
|
|
DWORD nLength;
|
|
LPVOID lpSecurityDescriptor;
|
|
BOOL bInheritHandle;
|
|
} SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
|
|
typedef struct _IMAGE_DEBUG_DIRECTORY {
|
|
DWORD Characteristics;
|
|
DWORD TimeDateStamp;
|
|
WORD MajorVersion;
|
|
WORD MinorVersion;
|
|
DWORD Type;
|
|
DWORD SizeOfData;
|
|
DWORD AddressOfRawData;
|
|
DWORD PointerToRawData;
|
|
} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
|
|
#define EXCEPTION_MAXIMUM_PARAMETERS 15
|
|
typedef struct _EXCEPTION_RECORD {
|
|
DWORD ExceptionCode;
|
|
DWORD ExceptionFlags;
|
|
struct _EXCEPTION_RECORD *ExceptionRecord;
|
|
PVOID ExceptionAddress;
|
|
DWORD NumberParameters;
|
|
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
|
|
} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
|
|
|
|
#define WOW64_CONTEXT_i386 0x00010000
|
|
#define WOW64_CONTEXT_i486 0x00010000
|
|
#define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
|
|
#define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
|
|
#define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
|
|
#define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
|
|
#define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
|
|
#define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
|
|
#define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
|
|
#define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \
|
|
WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \
|
|
WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
|
|
|
|
#define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
|
|
|
|
#define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
|
|
#define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
|
|
#define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
|
|
#define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
|
|
|
|
#define WOW64_SIZE_OF_80387_REGISTERS 80
|
|
#define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
|
|
|
|
typedef struct _WOW64_FLOATING_SAVE_AREA
|
|
{
|
|
DWORD ControlWord;
|
|
DWORD StatusWord;
|
|
DWORD TagWord;
|
|
DWORD ErrorOffset;
|
|
DWORD ErrorSelector;
|
|
DWORD DataOffset;
|
|
DWORD DataSelector;
|
|
BYTE RegisterArea[WOW64_SIZE_OF_80387_REGISTERS];
|
|
DWORD Cr0NpxState;
|
|
} WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA;
|
|
|
|
#include "pshpack4.h"
|
|
typedef struct _WOW64_CONTEXT
|
|
{
|
|
DWORD ContextFlags;
|
|
DWORD Dr0;
|
|
DWORD Dr1;
|
|
DWORD Dr2;
|
|
DWORD Dr3;
|
|
DWORD Dr6;
|
|
DWORD Dr7;
|
|
WOW64_FLOATING_SAVE_AREA FloatSave;
|
|
DWORD SegGs;
|
|
DWORD SegFs;
|
|
DWORD SegEs;
|
|
DWORD SegDs;
|
|
DWORD Edi;
|
|
DWORD Esi;
|
|
DWORD Ebx;
|
|
DWORD Edx;
|
|
DWORD Ecx;
|
|
DWORD Eax;
|
|
DWORD Ebp;
|
|
DWORD Eip;
|
|
DWORD SegCs;
|
|
DWORD EFlags;
|
|
DWORD Esp;
|
|
DWORD SegSs;
|
|
BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION];
|
|
} WOW64_CONTEXT, *PWOW64_CONTEXT;
|
|
#include "poppack.h"
|
|
|
|
#if defined(TARGET_i386)
|
|
#define SIZE_OF_80387_REGISTERS 80
|
|
#define CONTEXT_i386 0x10000
|
|
#define CONTEXT_i486 0x10000
|
|
#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
|
|
#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
|
|
#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
|
|
#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
|
|
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
|
|
#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
|
|
#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
|
|
#define MAXIMUM_SUPPORTED_EXTENSION 512
|
|
|
|
#define EXCEPTION_READ_FAULT 0
|
|
#define EXCEPTION_WRITE_FAULT 1
|
|
#define EXCEPTION_EXECUTE_FAULT 8
|
|
|
|
typedef struct _FLOATING_SAVE_AREA {
|
|
DWORD ControlWord;
|
|
DWORD StatusWord;
|
|
DWORD TagWord;
|
|
DWORD ErrorOffset;
|
|
DWORD ErrorSelector;
|
|
DWORD DataOffset;
|
|
DWORD DataSelector;
|
|
BYTE RegisterArea[80];
|
|
DWORD Cr0NpxState;
|
|
} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
|
|
|
|
typedef struct _CONTEXT {
|
|
DWORD ContextFlags;
|
|
DWORD Dr0;
|
|
DWORD Dr1;
|
|
DWORD Dr2;
|
|
DWORD Dr3;
|
|
DWORD Dr6;
|
|
DWORD Dr7;
|
|
FLOATING_SAVE_AREA FloatSave;
|
|
DWORD SegGs;
|
|
DWORD SegFs;
|
|
DWORD SegEs;
|
|
DWORD SegDs;
|
|
DWORD Edi;
|
|
DWORD Esi;
|
|
DWORD Ebx;
|
|
DWORD Edx;
|
|
DWORD Ecx;
|
|
DWORD Eax;
|
|
DWORD Ebp;
|
|
DWORD Eip;
|
|
DWORD SegCs;
|
|
DWORD EFlags;
|
|
DWORD Esp;
|
|
DWORD SegSs;
|
|
BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
|
|
} CONTEXT;
|
|
|
|
#elif defined TARGET_amd64
|
|
|
|
typedef struct _M128A {
|
|
ULONGLONG Low;
|
|
LONGLONG High;
|
|
} M128A, *PM128A;
|
|
|
|
typedef struct _XMM_SAVE_AREA32 {
|
|
WORD ControlWord;
|
|
WORD StatusWord;
|
|
BYTE TagWord;
|
|
BYTE Reserved1;
|
|
WORD ErrorOpcode;
|
|
DWORD ErrorOffset;
|
|
WORD ErrorSelector;
|
|
WORD Reserved2;
|
|
DWORD DataOffset;
|
|
WORD DataSelector;
|
|
WORD Reserved3;
|
|
DWORD MxCsr;
|
|
DWORD MxCsr_Mask;
|
|
M128A FloatRegisters[8];
|
|
M128A XmmRegisters[16];
|
|
BYTE Reserved4[96];
|
|
} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
|
|
|
|
typedef struct _CONTEXT {
|
|
DWORD64 P1Home;
|
|
DWORD64 P2Home;
|
|
DWORD64 P3Home;
|
|
DWORD64 P4Home;
|
|
DWORD64 P5Home;
|
|
DWORD64 P6Home;
|
|
|
|
/* Control flags */
|
|
DWORD ContextFlags;
|
|
DWORD MxCsr;
|
|
|
|
/* Segment */
|
|
WORD SegCs;
|
|
WORD SegDs;
|
|
WORD SegEs;
|
|
WORD SegFs;
|
|
WORD SegGs;
|
|
WORD SegSs;
|
|
DWORD EFlags;
|
|
|
|
/* Debug */
|
|
DWORD64 Dr0;
|
|
DWORD64 Dr1;
|
|
DWORD64 Dr2;
|
|
DWORD64 Dr3;
|
|
DWORD64 Dr6;
|
|
DWORD64 Dr7;
|
|
|
|
/* Integer */
|
|
DWORD64 Rax;
|
|
DWORD64 Rcx;
|
|
DWORD64 Rdx;
|
|
DWORD64 Rbx;
|
|
DWORD64 Rsp;
|
|
DWORD64 Rbp;
|
|
DWORD64 Rsi;
|
|
DWORD64 Rdi;
|
|
DWORD64 R8;
|
|
DWORD64 R9;
|
|
DWORD64 R10;
|
|
DWORD64 R11;
|
|
DWORD64 R12;
|
|
DWORD64 R13;
|
|
DWORD64 R14;
|
|
DWORD64 R15;
|
|
|
|
/* Counter */
|
|
DWORD64 Rip;
|
|
|
|
/* Floating point */
|
|
union {
|
|
XMM_SAVE_AREA32 FltSave;
|
|
struct {
|
|
M128A Header[2];
|
|
M128A Legacy[8];
|
|
M128A Xmm0;
|
|
M128A Xmm1;
|
|
M128A Xmm2;
|
|
M128A Xmm3;
|
|
M128A Xmm4;
|
|
M128A Xmm5;
|
|
M128A Xmm6;
|
|
M128A Xmm7;
|
|
M128A Xmm8;
|
|
M128A Xmm9;
|
|
M128A Xmm10;
|
|
M128A Xmm11;
|
|
M128A Xmm12;
|
|
M128A Xmm13;
|
|
M128A Xmm14;
|
|
M128A Xmm15;
|
|
} DUMMYSTRUCTNAME;
|
|
} DUMMYUNIONNAME;
|
|
|
|
/* Vector */
|
|
M128A VectorRegister[26];
|
|
DWORD64 VectorControl;
|
|
|
|
/* Debug control */
|
|
DWORD64 DebugControl;
|
|
DWORD64 LastBranchToRip;
|
|
DWORD64 LastBranchFromRip;
|
|
DWORD64 LastExceptionToRip;
|
|
DWORD64 LastExceptionFromRip;
|
|
} CONTEXT;
|
|
|
|
#elif defined TARGET_arm
|
|
|
|
/* The following flags control the contents of the CONTEXT structure. */
|
|
|
|
#define CONTEXT_ARM 0x0200000
|
|
#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001)
|
|
#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002)
|
|
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
|
|
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
|
|
|
|
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
|
|
|
|
#define EXCEPTION_READ_FAULT 0
|
|
#define EXCEPTION_WRITE_FAULT 1
|
|
#define EXCEPTION_EXECUTE_FAULT 8
|
|
|
|
typedef struct _RUNTIME_FUNCTION
|
|
{
|
|
DWORD BeginAddress;
|
|
union {
|
|
DWORD UnwindData;
|
|
struct {
|
|
DWORD Flag : 2;
|
|
DWORD FunctionLength : 11;
|
|
DWORD Ret : 2;
|
|
DWORD H : 1;
|
|
DWORD Reg : 3;
|
|
DWORD R : 1;
|
|
DWORD L : 1;
|
|
DWORD C : 1;
|
|
DWORD StackAdjust : 10;
|
|
} DUMMYSTRUCTNAME;
|
|
} DUMMYUNIONNAME;
|
|
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
|
|
|
#define UNWIND_HISTORY_TABLE_SIZE 12
|
|
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
|
|
{
|
|
DWORD ImageBase;
|
|
PRUNTIME_FUNCTION FunctionEntry;
|
|
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
|
|
|
typedef struct _UNWIND_HISTORY_TABLE
|
|
{
|
|
DWORD Count;
|
|
BYTE LocalHint;
|
|
BYTE GlobalHint;
|
|
BYTE Search;
|
|
BYTE Once;
|
|
DWORD LowAddress;
|
|
DWORD HighAddress;
|
|
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
|
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
|
|
|
typedef struct _CONTEXT {
|
|
/* The flags values within this flag control the contents of
|
|
a CONTEXT record.
|
|
|
|
If the context record is used as an input parameter, then
|
|
for each portion of the context record controlled by a flag
|
|
whose value is set, it is assumed that that portion of the
|
|
context record contains valid context. If the context record
|
|
is being used to modify a thread's context, then only that
|
|
portion of the threads context will be modified.
|
|
|
|
If the context record is used as an IN OUT parameter to capture
|
|
the context of a thread, then only those portions of the thread's
|
|
context corresponding to set flags will be returned.
|
|
|
|
The context record is never used as an OUT only parameter. */
|
|
|
|
ULONG ContextFlags;
|
|
|
|
/* This section is specified/returned if the ContextFlags word contains
|
|
the flag CONTEXT_INTEGER. */
|
|
ULONG R0;
|
|
ULONG R1;
|
|
ULONG R2;
|
|
ULONG R3;
|
|
ULONG R4;
|
|
ULONG R5;
|
|
ULONG R6;
|
|
ULONG R7;
|
|
ULONG R8;
|
|
ULONG R9;
|
|
ULONG R10;
|
|
ULONG Fp;
|
|
ULONG Ip;
|
|
|
|
/* These are selected by CONTEXT_CONTROL */
|
|
ULONG Sp;
|
|
ULONG Lr;
|
|
ULONG Pc;
|
|
ULONG Cpsr;
|
|
} CONTEXT;
|
|
|
|
BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD);
|
|
BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
|
|
PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*);
|
|
|
|
#elif defined TARGET_arm64
|
|
|
|
#define CONTEXT_ARM64 0x00400000L
|
|
#define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x1L)
|
|
#define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x2L)
|
|
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x4L)
|
|
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x8L)
|
|
#define CONTEXT_X18 (CONTEXT_ARM64 | 0x10L)
|
|
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
|
|
|
|
#define EXCEPTION_READ_FAULT 0
|
|
#define EXCEPTION_WRITE_FAULT 1
|
|
#define EXCEPTION_EXECUTE_FAULT 8
|
|
|
|
typedef union NEON128 {
|
|
struct {
|
|
ULONGLONG Low;
|
|
LONGLONG High;
|
|
} DUMMYSTRUCTNAME;
|
|
double D[2];
|
|
float S[4];
|
|
WORD H[8];
|
|
BYTE B[16];
|
|
} NEON128, *PNEON128;
|
|
|
|
#define ARM64_MAX_BREAKPOINTS 8
|
|
#define ARM64_MAX_WATCHPOINTS 2
|
|
|
|
typedef struct _CONTEXT {
|
|
|
|
//
|
|
// Control flags.
|
|
//
|
|
|
|
DWORD ContextFlags;
|
|
|
|
//
|
|
// Integer registers
|
|
//
|
|
|
|
DWORD Cpsr;
|
|
union {
|
|
struct {
|
|
DWORD64 X0;
|
|
DWORD64 X1;
|
|
DWORD64 X2;
|
|
DWORD64 X3;
|
|
DWORD64 X4;
|
|
DWORD64 X5;
|
|
DWORD64 X6;
|
|
DWORD64 X7;
|
|
DWORD64 X8;
|
|
DWORD64 X9;
|
|
DWORD64 X10;
|
|
DWORD64 X11;
|
|
DWORD64 X12;
|
|
DWORD64 X13;
|
|
DWORD64 X14;
|
|
DWORD64 X15;
|
|
DWORD64 X16;
|
|
DWORD64 X17;
|
|
DWORD64 X18;
|
|
DWORD64 X19;
|
|
DWORD64 X20;
|
|
DWORD64 X21;
|
|
DWORD64 X22;
|
|
DWORD64 X23;
|
|
DWORD64 X24;
|
|
DWORD64 X25;
|
|
DWORD64 X26;
|
|
DWORD64 X27;
|
|
DWORD64 X28;
|
|
DWORD64 Fp;
|
|
DWORD64 Lr;
|
|
} DUMMYSTRUCTNAME;
|
|
DWORD64 X[31];
|
|
} DUMMYUNIONNAME;
|
|
|
|
DWORD64 Sp;
|
|
DWORD64 Pc;
|
|
|
|
//
|
|
// Floating Point/NEON Registers
|
|
//
|
|
|
|
NEON128 V[32];
|
|
DWORD Fpcr;
|
|
DWORD Fpsr;
|
|
|
|
//
|
|
// Debug registers
|
|
//
|
|
|
|
DWORD Bcr[ARM64_MAX_BREAKPOINTS];
|
|
DWORD64 Bvr[ARM64_MAX_BREAKPOINTS];
|
|
DWORD Wcr[ARM64_MAX_WATCHPOINTS];
|
|
DWORD64 Wvr[ARM64_MAX_WATCHPOINTS];
|
|
|
|
} _CONTEXT, *P_CONTEXT;
|
|
typedef _CONTEXT CONTEXT, *PCONTEXT;
|
|
|
|
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY {
|
|
DWORD BeginAddress;
|
|
union {
|
|
DWORD UnwindData;
|
|
struct {
|
|
DWORD Flag : 2;
|
|
DWORD FunctionLength : 11;
|
|
DWORD RegF : 3;
|
|
DWORD RegI : 4;
|
|
DWORD H : 1;
|
|
DWORD CR : 2;
|
|
DWORD FrameSize : 9;
|
|
} DUMMYSTRUCTNAME;
|
|
} DUMMYUNIONNAME;
|
|
} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY, * PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
|
|
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
|
|
|
#define UNWIND_HISTORY_TABLE_SIZE 12
|
|
|
|
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
|
|
ULONG_PTR ImageBase;
|
|
PRUNTIME_FUNCTION FunctionEntry;
|
|
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
|
|
|
typedef struct _UNWIND_HISTORY_TABLE {
|
|
DWORD Count;
|
|
BYTE LocalHint;
|
|
BYTE GlobalHint;
|
|
BYTE Search;
|
|
BYTE Once;
|
|
ULONG_PTR LowAddress;
|
|
ULONG_PTR HighAddress;
|
|
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
|
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
|
|
|
BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD);
|
|
BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
|
|
PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*);
|
|
|
|
#else
|
|
|
|
#error "Unknown target platform"
|
|
|
|
#endif
|
|
|
|
typedef CONTEXT *PCONTEXT;
|
|
|
|
typedef
|
|
EXCEPTION_DISPOSITION
|
|
NTAPI
|
|
EXCEPTION_ROUTINE(
|
|
struct _EXCEPTION_RECORD *ExceptionRecord,
|
|
PVOID EstablisherFrame,
|
|
struct _CONTEXT *ContextRecord,
|
|
PVOID DispatcherContext);
|
|
typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
|
|
typedef struct _NT_TIB {
|
|
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
|
|
PVOID StackBase;
|
|
PVOID StackLimit;
|
|
PVOID SubSystemTib;
|
|
union {
|
|
PVOID FiberData;
|
|
DWORD Version;
|
|
} DUMMYUNIONNAME;
|
|
PVOID ArbitraryUserPointer;
|
|
struct _NT_TIB *Self;
|
|
} NT_TIB,*PNT_TIB;
|
|
|
|
// rtltypes.h
|
|
typedef struct _EXCEPTION_REGISTRATION_RECORD
|
|
{
|
|
struct _EXCEPTION_REGISTRATION_RECORD *Next;
|
|
PEXCEPTION_ROUTINE Handler;
|
|
} EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
|
|
|
|
// winbase.h
|
|
#define INVALID_HANDLE_VALUE (HANDLE)(-1)
|
|
#define INVALID_SET_FILE_POINTER ((DWORD)-1)
|
|
#define HeapAlloc __HeapAlloc
|
|
#define HeapReAlloc __HeapReAlloc
|
|
#define HeapFree(x,y,z) free(z)
|
|
#define GetProcessHeap() 1
|
|
#define GetProcessId(x) 8
|
|
#define lstrcpynW __lstrcpynW
|
|
#define CloseHandle __CloseHandle
|
|
#define CreateFileA(a,b,c,d,e,f,g) fopen(a, "rb")
|
|
#define CreateFileW __CreateFileW
|
|
#define ReadFile(a,b,c,d,e) __ReadFile
|
|
#define SetFilePointer __SetFilePointer
|
|
#define CreateFileMappingW(a,b,c,d,e,f) a
|
|
#define MapViewOfFile __MapViewOfFile
|
|
#define UnmapViewOfFile __UnmapViewOfFile
|
|
#define LoadLibraryW(x) 0
|
|
#define FreeLibrary(x) 0
|
|
#define lstrcpyW strcpyW // Forward this to wine unicode inline function
|
|
#define lstrlenW strlenW // ditto
|
|
#define lstrcpynA __lstrcpynA
|
|
#define SetLastError(x)
|
|
#define GetProcAddress(x,y) 0
|
|
#define GetEnvironmentVariableA(x, y, z) 0
|
|
#define GetEnvironmentVariableW(x, y, z) 0
|
|
#define GetCurrentDirectoryW(x, y) 0
|
|
#define GetFileSizeEx __GetFileSizeEx
|
|
#define ReadProcessMemory(a,b,c,d,e) 0
|
|
#define GetCurrentProcess() (HANDLE)1
|
|
#define IsWow64Process __IsWow64Process
|
|
#define FILE_BEGIN 0
|
|
|
|
void* __HeapAlloc(int heap, int flags, size_t size);
|
|
void* __HeapReAlloc(int heap, DWORD d2, void *slab, SIZE_T newsize);
|
|
WCHAR* __lstrcpynW(WCHAR* lpString1, const WCHAR* lpString2, int iMaxLength);
|
|
BOOL __CloseHandle(HANDLE handle);
|
|
HANDLE __CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
|
|
BOOL __ReadFile(HANDLE,PVOID,DWORD,PDWORD,/*LPOVERLAPPED*/ PVOID);
|
|
DWORD __SetFilePointer(HANDLE,LONG,PLONG,DWORD);
|
|
void* __MapViewOfFile(HANDLE file,DWORD d1,DWORD d2,DWORD d3,SIZE_T s);
|
|
BOOL __UnmapViewOfFile(const void*);
|
|
LPSTR __lstrcpynA(LPSTR,LPCSTR,int);
|
|
BOOL __GetFileSizeEx(HANDLE,PLARGE_INTEGER);
|
|
BOOL WINAPI __IsWow64Process(HANDLE,BOOL*);
|
|
#define OPEN_EXISTING 3
|
|
#define FILE_MAP_READ SECTION_MAP_READ
|
|
typedef struct _LDT_ENTRY {
|
|
WORD LimitLow;
|
|
WORD BaseLow;
|
|
union {
|
|
struct {
|
|
BYTE BaseMid;
|
|
BYTE Flags1;
|
|
BYTE Flags2;
|
|
BYTE BaseHi;
|
|
} Bytes;
|
|
struct {
|
|
DWORD BaseMid:8;
|
|
DWORD Type:5;
|
|
DWORD Dpl:2;
|
|
DWORD Pres:1;
|
|
DWORD LimitHi:4;
|
|
DWORD Sys:1;
|
|
DWORD Reserved_0:1;
|
|
DWORD Default_Big:1;
|
|
DWORD Granularity:1;
|
|
DWORD BaseHi:8;
|
|
} Bits;
|
|
} HighWord;
|
|
} LDT_ENTRY,*PLDT_ENTRY,*LPLDT_ENTRY;
|
|
|
|
// umtypes.h
|
|
typedef LONG KPRIORITY;
|
|
|
|
// winternl.h
|
|
#define RtlImageNtHeader __RtlImageNtHeader
|
|
#define RtlImageRvaToVa __RtlImageRvaToVa
|
|
#define RtlImageRvaToSection __RtlImageRvaToSection
|
|
#define RtlImageDirectoryEntryToData __RtlImageDirectoryEntryToData
|
|
#define RtlComputeCrc32 __RtlComputeCrc32
|
|
|
|
#ifdef _MSC_VER
|
|
#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
|
|
#else
|
|
#define RtlUlongByteSwap(_x) __builtin_bswap32((_x))
|
|
#endif
|
|
|
|
PIMAGE_NT_HEADERS __RtlImageNtHeader(void *data);
|
|
PVOID __RtlImageRvaToVa (const IMAGE_NT_HEADERS* NtHeader, PVOID BaseAddress, ULONG Rva, PIMAGE_SECTION_HEADER *SectionHeader);
|
|
PVOID __RtlImageDirectoryEntryToData(PVOID BaseAddress, BOOLEAN MappedAsImage, USHORT Directory, PULONG Size);
|
|
ULONG __RtlComputeCrc32(ULONG Initial, PUCHAR Data, ULONG Length);
|
|
|
|
typedef struct _CLIENT_ID
|
|
{
|
|
HANDLE UniqueProcess;
|
|
HANDLE UniqueThread;
|
|
} CLIENT_ID, *PCLIENT_ID;
|
|
#define GDI_BATCH_BUFFER_SIZE 0x136
|
|
typedef struct _GDI_TEB_BATCH
|
|
{
|
|
ULONG Offset;
|
|
HANDLE HDC;
|
|
ULONG Buffer[GDI_BATCH_BUFFER_SIZE];
|
|
} GDI_TEB_BATCH, *PGDI_TEB_BATCH;
|
|
typedef struct _TEB
|
|
{
|
|
NT_TIB Tib; /* 000 */
|
|
PVOID EnvironmentPointer; /* 01c */
|
|
CLIENT_ID ClientId; /* 020 */
|
|
PVOID ActiveRpcHandle; /* 028 */
|
|
PVOID ThreadLocalStoragePointer; /* 02c */
|
|
PVOID Peb; /* 030 */
|
|
ULONG LastErrorValue; /* 034 */
|
|
ULONG CountOfOwnedCriticalSections;/* 038 */
|
|
PVOID CsrClientThread; /* 03c */
|
|
PVOID Win32ThreadInfo; /* 040 */
|
|
ULONG Win32ClientInfo[31]; /* 044 used for user32 private data in Wine */
|
|
PVOID WOW32Reserved; /* 0c0 */
|
|
ULONG CurrentLocale; /* 0c4 */
|
|
ULONG FpSoftwareStatusRegister; /* 0c8 */
|
|
PVOID SystemReserved1[54]; /* 0cc used for kernel32 private data in Wine */
|
|
PVOID Spare1; /* 1a4 */
|
|
LONG ExceptionCode; /* 1a8 */
|
|
PVOID ActivationContextStackPointer; /* 1a8/02c8 */
|
|
BYTE SpareBytes1[36]; /* 1ac */
|
|
PVOID SystemReserved2[10]; /* 1d4 used for ntdll private data in Wine */
|
|
GDI_TEB_BATCH GdiTebBatch; /* 1fc */
|
|
ULONG gdiRgn; /* 6dc */
|
|
ULONG gdiPen; /* 6e0 */
|
|
ULONG gdiBrush; /* 6e4 */
|
|
CLIENT_ID RealClientId; /* 6e8 */
|
|
HANDLE GdiCachedProcessHandle; /* 6f0 */
|
|
ULONG GdiClientPID; /* 6f4 */
|
|
ULONG GdiClientTID; /* 6f8 */
|
|
PVOID GdiThreadLocaleInfo; /* 6fc */
|
|
PVOID UserReserved[5]; /* 700 */
|
|
PVOID glDispatchTable[280]; /* 714 */
|
|
ULONG glReserved1[26]; /* b74 */
|
|
PVOID glReserved2; /* bdc */
|
|
PVOID glSectionInfo; /* be0 */
|
|
PVOID glSection; /* be4 */
|
|
PVOID glTable; /* be8 */
|
|
PVOID glCurrentRC; /* bec */
|
|
PVOID glContext; /* bf0 */
|
|
ULONG LastStatusValue; /* bf4 */
|
|
UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
|
|
WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
|
|
PVOID DeallocationStack; /* e0c */
|
|
PVOID TlsSlots[64]; /* e10 */
|
|
LIST_ENTRY TlsLinks; /* f10 */
|
|
PVOID Vdm; /* f18 */
|
|
PVOID ReservedForNtRpc; /* f1c */
|
|
PVOID DbgSsReserved[2]; /* f20 */
|
|
ULONG HardErrorDisabled; /* f28 */
|
|
PVOID Instrumentation[16]; /* f2c */
|
|
PVOID WinSockData; /* f6c */
|
|
ULONG GdiBatchCount; /* f70 */
|
|
ULONG Spare2; /* f74 */
|
|
ULONG Spare3; /* f78 */
|
|
ULONG Spare4; /* f7c */
|
|
PVOID ReservedForOle; /* f80 */
|
|
ULONG WaitingOnLoaderLock; /* f84 */
|
|
PVOID Reserved5[3]; /* f88 */
|
|
PVOID *TlsExpansionSlots; /* f94 */
|
|
} TEB, *PTEB;
|
|
|
|
|
|
// winver.h
|
|
typedef struct tagVS_FIXEDFILEINFO {
|
|
DWORD dwSignature;
|
|
DWORD dwStrucVersion;
|
|
DWORD dwFileVersionMS;
|
|
DWORD dwFileVersionLS;
|
|
DWORD dwProductVersionMS;
|
|
DWORD dwProductVersionLS;
|
|
DWORD dwFileFlagsMask;
|
|
DWORD dwFileFlags;
|
|
DWORD dwFileOS;
|
|
DWORD dwFileType;
|
|
DWORD dwFileSubtype;
|
|
DWORD dwFileDateMS;
|
|
DWORD dwFileDateLS;
|
|
} VS_FIXEDFILEINFO;
|
|
|
|
|
|
// psapi.h
|
|
typedef struct _MODULEINFO {
|
|
LPVOID lpBaseOfDll;
|
|
DWORD SizeOfImage;
|
|
LPVOID EntryPoint;
|
|
} MODULEINFO,*LPMODULEINFO;
|
|
#define GetModuleFileNameExW(w, x, y, z) 0
|
|
|
|
// pstypes.h
|
|
typedef struct _THREAD_BASIC_INFORMATION
|
|
{
|
|
NTSTATUS ExitStatus;
|
|
PVOID TebBaseAddress;
|
|
CLIENT_ID ClientId;
|
|
KAFFINITY AffinityMask;
|
|
KPRIORITY Priority;
|
|
KPRIORITY BasePriority;
|
|
} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
|
|
typedef enum _THREADINFOCLASS {
|
|
ThreadBasicInformation,
|
|
ThreadTimes,
|
|
ThreadPriority,
|
|
ThreadBasePriority,
|
|
ThreadAffinityMask,
|
|
ThreadImpersonationToken,
|
|
ThreadDescriptorTableEntry,
|
|
ThreadEnableAlignmentFaultFixup,
|
|
ThreadEventPair_Reusable,
|
|
ThreadQuerySetWin32StartAddress,
|
|
ThreadZeroTlsCell,
|
|
ThreadPerformanceCount,
|
|
ThreadAmILastThread,
|
|
ThreadIdealProcessor,
|
|
ThreadPriorityBoost,
|
|
ThreadSetTlsArrayAddress,
|
|
ThreadIsIoPending,
|
|
ThreadHideFromDebugger,
|
|
ThreadBreakOnTermination,
|
|
ThreadSwitchLegacyState,
|
|
ThreadIsTerminated,
|
|
ThreadLastSystemCall,
|
|
ThreadIoPriority,
|
|
ThreadCycleTime,
|
|
ThreadPagePriority,
|
|
ThreadActualBasePriority,
|
|
ThreadTebInformation,
|
|
ThreadCSwitchMon,
|
|
ThreadCSwitchPmu,
|
|
ThreadWow64Context,
|
|
ThreadGroupInformation,
|
|
ThreadUmsInformation,
|
|
ThreadCounterProfiling,
|
|
ThreadIdealProcessorEx,
|
|
MaxThreadInfoClass
|
|
} THREADINFOCLASS;
|
|
|
|
|
|
// dbghelp.h
|
|
typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
|
|
#define MAX_SYM_NAME 2000
|
|
#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
|
|
#define CBA_READ_MEMORY 0x00000006
|
|
#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
|
|
#define CBA_SET_OPTIONS 0x00000008
|
|
#define CBA_EVENT 0x00000010
|
|
#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
|
|
#define CBA_DEBUG_INFO 0x10000000
|
|
#define SYMOPT_CASE_INSENSITIVE 0x00000001
|
|
#define SYMOPT_UNDNAME 0x00000002
|
|
#define SYMOPT_DEFERRED_LOADS 0x00000004
|
|
#define SYMOPT_LOAD_LINES 0x00000010
|
|
#define SYMOPT_LOAD_ANYTHING 0x00000040
|
|
#define SYMOPT_PUBLICS_ONLY 0x00004000
|
|
#define SYMOPT_NO_PUBLICS 0x00008000
|
|
#define SYMOPT_AUTO_PUBLICS 0x00010000
|
|
#define SYMFLAG_VALUEPRESENT 0x00000001
|
|
#define SYMFLAG_REGISTER 0x00000008
|
|
#define SYMFLAG_REGREL 0x00000010
|
|
#define SYMFLAG_FRAMEREL 0x00000020
|
|
#define SYMFLAG_PARAMETER 0x00000040
|
|
#define SYMFLAG_LOCAL 0x00000080
|
|
#define SYMFLAG_CONSTANT 0x00000100
|
|
#define SYMFLAG_EXPORT 0x00000200
|
|
#define SYMFLAG_FORWARDER 0x00000400
|
|
#define SYMFLAG_FUNCTION 0x00000800
|
|
#define SYMFLAG_VIRTUAL 0x00001000
|
|
#define SYMFLAG_THUNK 0x00002000
|
|
#define SYMFLAG_TLSREL 0x00004000
|
|
#define SYMFLAG_SLOT 0x00008000
|
|
#define SYMFLAG_ILREL 0x00010000
|
|
#define SYMFLAG_METADATA 0x00020000
|
|
#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
|
|
#define UNDNAME_COMPLETE (0x0000)
|
|
#define UNDNAME_NAME_ONLY (0x1000)
|
|
typedef struct _TI_FINDCHILDREN_PARAMS
|
|
{
|
|
ULONG Count;
|
|
ULONG Start;
|
|
ULONG ChildId[1];
|
|
} TI_FINDCHILDREN_PARAMS;
|
|
#define SYMSEARCH_GLOBALSONLY 0x04
|
|
/* flags for SymLoadModuleEx */
|
|
#define SLMFLAG_VIRTUAL 0x1
|
|
#define SLMFLAG_NO_SYMBOLS 0x4
|
|
typedef struct _DBGHELP_MODLOAD_DATA
|
|
{
|
|
DWORD ssize;
|
|
DWORD ssig;
|
|
PVOID data;
|
|
DWORD size;
|
|
DWORD flags;
|
|
} MODLOAD_DATA, *PMODLOAD_DATA;
|
|
typedef struct _SYMBOL_INFO
|
|
{
|
|
ULONG SizeOfStruct;
|
|
ULONG TypeIndex;
|
|
ULONG64 Reserved[2];
|
|
ULONG Index;
|
|
ULONG Size;
|
|
ULONG64 ModBase;
|
|
ULONG Flags;
|
|
ULONG64 Value;
|
|
ULONG64 Address;
|
|
ULONG Register;
|
|
ULONG Scope;
|
|
ULONG Tag;
|
|
ULONG NameLen;
|
|
ULONG MaxNameLen;
|
|
CHAR Name[1];
|
|
} SYMBOL_INFO, *PSYMBOL_INFO;
|
|
typedef enum
|
|
{
|
|
SymNone = 0,
|
|
SymCoff,
|
|
SymCv,
|
|
SymPdb,
|
|
SymExport,
|
|
SymDeferred,
|
|
SymSym,
|
|
SymDia,
|
|
SymVirtual,
|
|
NumSymTypes
|
|
} SYM_TYPE;
|
|
typedef struct _IMAGEHLP_MODULEW64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD64 BaseOfImage;
|
|
DWORD ImageSize;
|
|
DWORD TimeDateStamp;
|
|
DWORD CheckSum;
|
|
DWORD NumSyms;
|
|
SYM_TYPE SymType;
|
|
WCHAR ModuleName[32];
|
|
WCHAR ImageName[256];
|
|
WCHAR LoadedImageName[256];
|
|
WCHAR LoadedPdbName[256];
|
|
DWORD CVSig;
|
|
WCHAR CVData[MAX_PATH*3];
|
|
DWORD PdbSig;
|
|
GUID PdbSig70;
|
|
DWORD PdbAge;
|
|
BOOL PdbUnmatched;
|
|
BOOL DbgUnmatched;
|
|
BOOL LineNumbers;
|
|
BOOL GlobalSymbols;
|
|
BOOL TypeInfo;
|
|
BOOL SourceIndexed;
|
|
BOOL Publics;
|
|
} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
|
|
typedef struct _IMAGEHLP_LINE64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
PVOID Key;
|
|
DWORD LineNumber;
|
|
PCHAR FileName;
|
|
DWORD64 Address;
|
|
} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
|
|
typedef enum
|
|
{
|
|
SYMOPT_EX_DISABLEACCESSTIMEUPDATE,
|
|
SYMOPT_EX_MAX,
|
|
/* __WINESRC__ */
|
|
SYMOPT_EX_WINE_NATIVE_MODULES = 1000
|
|
} IMAGEHLP_EXTENDED_OPTIONS;
|
|
typedef struct _SRCCODEINFO
|
|
{
|
|
DWORD SizeOfStruct;
|
|
PVOID Key;
|
|
DWORD64 ModBase;
|
|
CHAR Obj[MAX_PATH+1];
|
|
CHAR FileName[MAX_PATH+1];
|
|
DWORD LineNumber;
|
|
DWORD64 Address;
|
|
} SRCCODEINFO, *PSRCCODEINFO;
|
|
typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
|
|
BOOL WINAPI SymInitialize(HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess);
|
|
BOOL WINAPI SymCleanup(HANDLE hProcess);
|
|
BOOL WINAPI SymAddSymbolW(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR name, DWORD64 addr, DWORD size, DWORD flags);
|
|
BOOL WINAPI SymGetModuleInfoW64(HANDLE hProcess, DWORD64 dwAddr, PIMAGEHLP_MODULEW64 ModuleInfo);
|
|
BOOL WINAPI SymMatchStringW(PCWSTR string, PCWSTR re, BOOL _case);
|
|
DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PCSTR ImageName,
|
|
PCSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
|
|
DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
|
|
PMODLOAD_DATA, DWORD);
|
|
DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
|
|
PMODLOAD_DATA, DWORD);
|
|
DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
|
|
BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
|
|
PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD);
|
|
PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
|
|
BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 Address, DWORD64* Displacement, PSYMBOL_INFO Symbol);
|
|
BOOL WINAPI SymEnumLines(HANDLE hProcess, ULONG64 base, PCSTR compiland, PCSTR srcfile, PSYM_ENUMLINES_CALLBACK cb, PVOID user);
|
|
DWORD WINAPI SymSetOptions(DWORD opts);
|
|
BOOL WINAPI SymSetExtendedOption(IMAGEHLP_EXTENDED_OPTIONS option, BOOL value);
|
|
BOOL WINAPI SymGetLineFromAddr64(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line);
|
|
typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
|
|
#define FindExecutableImageExW __FindExecutableImageExW
|
|
HANDLE __FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
|
|
DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
|
|
typedef enum _THREAD_WRITE_FLAGS
|
|
{
|
|
ThreadWriteThread = 0x0001,
|
|
ThreadWriteStack = 0x0002,
|
|
ThreadWriteContext = 0x0004,
|
|
ThreadWriteBackingStore = 0x0008,
|
|
ThreadWriteInstructionWindow = 0x0010,
|
|
ThreadWriteThreadData = 0x0020,
|
|
ThreadWriteThreadInfo = 0x0040
|
|
} THREAD_WRITE_FLAGS;
|
|
typedef enum
|
|
{
|
|
AddrMode1616,
|
|
AddrMode1632,
|
|
AddrModeReal,
|
|
AddrModeFlat
|
|
} ADDRESS_MODE;
|
|
typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD64 BaseOfImage;
|
|
DWORD CheckSum;
|
|
DWORD TimeDateStamp;
|
|
WCHAR FileName[MAX_PATH + 1];
|
|
BOOLEAN Reparse;
|
|
HANDLE hFile;
|
|
DWORD Flags;
|
|
} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
|
|
typedef struct _tagADDRESS64
|
|
{
|
|
DWORD64 Offset;
|
|
WORD Segment;
|
|
ADDRESS_MODE Mode;
|
|
} ADDRESS64, *LPADDRESS64;
|
|
typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
|
|
typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
|
|
typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
|
|
typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
|
|
typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
|
|
typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE, DWORD64, PVOID, DWORD, PDWORD);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
|
|
typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
|
|
typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
|
|
|
|
BOOL WINAPI SymEnumerateModulesW64(HANDLE hProcess, PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback, PVOID UserContext);
|
|
|
|
typedef struct _tagADDRESS
|
|
{
|
|
DWORD Offset;
|
|
WORD Segment;
|
|
ADDRESS_MODE Mode;
|
|
} ADDRESS, *LPADDRESS;
|
|
|
|
typedef struct _IMAGEHLP_MODULE
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD BaseOfImage;
|
|
DWORD ImageSize;
|
|
DWORD TimeDateStamp;
|
|
DWORD CheckSum;
|
|
DWORD NumSyms;
|
|
SYM_TYPE SymType;
|
|
CHAR ModuleName[32];
|
|
CHAR ImageName[256];
|
|
CHAR LoadedImageName[256];
|
|
} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
|
|
typedef struct _IMAGEHLP_MODULEW
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD BaseOfImage;
|
|
DWORD ImageSize;
|
|
DWORD TimeDateStamp;
|
|
DWORD CheckSum;
|
|
DWORD NumSyms;
|
|
SYM_TYPE SymType;
|
|
WCHAR ModuleName[32];
|
|
WCHAR ImageName[256];
|
|
WCHAR LoadedImageName[256];
|
|
} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
|
|
typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
|
|
typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
|
|
typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);
|
|
typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
|
|
typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
|
|
typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
|
|
|
|
typedef struct _IMAGEHLP_MODULE64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD64 BaseOfImage;
|
|
DWORD ImageSize;
|
|
DWORD TimeDateStamp;
|
|
DWORD CheckSum;
|
|
DWORD NumSyms;
|
|
SYM_TYPE SymType;
|
|
CHAR ModuleName[32];
|
|
CHAR ImageName[256];
|
|
CHAR LoadedImageName[256];
|
|
CHAR LoadedPdbName[256];
|
|
DWORD CVSig;
|
|
CHAR CVData[MAX_PATH*3];
|
|
DWORD PdbSig;
|
|
GUID PdbSig70;
|
|
DWORD PdbAge;
|
|
BOOL PdbUnmatched;
|
|
BOOL DbgUnmatched;
|
|
BOOL LineNumbers;
|
|
BOOL GlobalSymbols;
|
|
BOOL TypeInfo;
|
|
BOOL SourceIndexed;
|
|
BOOL Publics;
|
|
} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
|
|
typedef DWORD RVA;
|
|
typedef ULONG64 RVA64;
|
|
typedef enum _MINIDUMP_TYPE
|
|
{
|
|
MiniDumpNormal = 0x0000,
|
|
MiniDumpWithDataSegs = 0x0001,
|
|
MiniDumpWithFullMemory = 0x0002,
|
|
MiniDumpWithHandleData = 0x0004,
|
|
MiniDumpFilterMemory = 0x0008,
|
|
MiniDumpScanMemory = 0x0010,
|
|
MiniDumpWithUnloadedModules = 0x0020,
|
|
MiniDumpWithIndirectlyReferencedMemory = 0x0040,
|
|
MiniDumpFilterModulePaths = 0x0080,
|
|
MiniDumpWithProcessThreadData = 0x0100,
|
|
MiniDumpWithPrivateReadWriteMemory = 0x0200,
|
|
MiniDumpWithoutOptionalData = 0x0400,
|
|
MiniDumpWithFullMemoryInfo = 0x0800,
|
|
MiniDumpWithThreadInfo = 0x1000,
|
|
MiniDumpWithCodeSegs = 0x2000
|
|
} MINIDUMP_TYPE;
|
|
typedef struct _MINIDUMP_THREAD_CALLBACK
|
|
{
|
|
ULONG ThreadId;
|
|
HANDLE ThreadHandle;
|
|
CONTEXT Context;
|
|
ULONG SizeOfContext;
|
|
ULONG64 StackBase;
|
|
ULONG64 StackEnd;
|
|
} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
|
|
typedef struct _MINIDUMP_THREAD_EX_CALLBACK
|
|
{
|
|
ULONG ThreadId;
|
|
HANDLE ThreadHandle;
|
|
CONTEXT Context;
|
|
ULONG SizeOfContext;
|
|
ULONG64 StackBase;
|
|
ULONG64 StackEnd;
|
|
ULONG64 BackingStoreBase;
|
|
ULONG64 BackingStoreEnd;
|
|
} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
|
|
typedef struct _MINIDUMP_MODULE_CALLBACK
|
|
{
|
|
PWCHAR FullPath;
|
|
ULONG64 BaseOfImage;
|
|
ULONG SizeOfImage;
|
|
ULONG CheckSum;
|
|
ULONG TimeDateStamp;
|
|
VS_FIXEDFILEINFO VersionInfo;
|
|
PVOID CvRecord;
|
|
ULONG SizeOfCvRecord;
|
|
PVOID MiscRecord;
|
|
ULONG SizeOfMiscRecord;
|
|
} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
|
|
typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
|
|
{
|
|
ULONG ThreadId;
|
|
} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
|
|
typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
|
|
{
|
|
ULONG64 BaseOfImage;
|
|
} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
|
|
typedef struct _MINIDUMP_CALLBACK_INPUT
|
|
{
|
|
ULONG ProcessId;
|
|
HANDLE ProcessHandle;
|
|
ULONG CallbackType;
|
|
union
|
|
{
|
|
MINIDUMP_THREAD_CALLBACK Thread;
|
|
MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
|
|
MINIDUMP_MODULE_CALLBACK Module;
|
|
MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
|
|
MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
|
|
} DUMMYUNIONNAME;
|
|
} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
|
|
typedef struct _MINIDUMP_CALLBACK_OUTPUT
|
|
{
|
|
union
|
|
{
|
|
ULONG ModuleWriteFlags;
|
|
ULONG ThreadWriteFlags;
|
|
struct
|
|
{
|
|
ULONG64 MemoryBase;
|
|
ULONG MemorySize;
|
|
} DUMMYSTRUCTNAME;
|
|
} DUMMYUNIONNAME;
|
|
} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
|
|
typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
|
|
typedef struct _MINIDUMP_CALLBACK_INFORMATION
|
|
{
|
|
MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
|
|
void* CallbackParam;
|
|
} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
|
|
typedef struct _SYMBOL_INFOW
|
|
{
|
|
ULONG SizeOfStruct;
|
|
ULONG TypeIndex;
|
|
ULONG64 Reserved[2];
|
|
ULONG Index;
|
|
ULONG Size;
|
|
ULONG64 ModBase;
|
|
ULONG Flags;
|
|
ULONG64 Value;
|
|
ULONG64 Address;
|
|
ULONG Register;
|
|
ULONG Scope;
|
|
ULONG Tag;
|
|
ULONG NameLen;
|
|
ULONG MaxNameLen;
|
|
WCHAR Name[1];
|
|
} SYMBOL_INFOW, *PSYMBOL_INFOW;
|
|
typedef struct _IMAGEHLP_STACK_FRAME
|
|
{
|
|
ULONG64 InstructionOffset;
|
|
ULONG64 ReturnOffset;
|
|
ULONG64 FrameOffset;
|
|
ULONG64 StackOffset;
|
|
ULONG64 BackingStoreOffset;
|
|
ULONG64 FuncTableEntry;
|
|
ULONG64 Params[4];
|
|
ULONG64 Reserved[5];
|
|
BOOL Virtual;
|
|
ULONG Reserved2;
|
|
} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
|
|
typedef struct _KDHELP64
|
|
{
|
|
DWORD64 Thread;
|
|
DWORD ThCallbackStack;
|
|
DWORD ThCallbackBStore;
|
|
DWORD NextCallback;
|
|
DWORD FramePointer;
|
|
DWORD64 KiCallUserMode;
|
|
DWORD64 KeUserCallbackDispatcher;
|
|
DWORD64 SystemRangeStart;
|
|
DWORD64 Reserved[8];
|
|
} KDHELP64, *PKDHELP64;
|
|
typedef struct _STACKFRAME64
|
|
{
|
|
ADDRESS64 AddrPC;
|
|
ADDRESS64 AddrReturn;
|
|
ADDRESS64 AddrFrame;
|
|
ADDRESS64 AddrStack;
|
|
ADDRESS64 AddrBStore;
|
|
PVOID FuncTableEntry;
|
|
DWORD64 Params[4];
|
|
BOOL Far;
|
|
BOOL Virtual;
|
|
DWORD64 Reserved[3];
|
|
KDHELP64 KdHelp;
|
|
} STACKFRAME64, *LPSTACKFRAME64;
|
|
typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
|
|
{
|
|
TI_GET_SYMTAG,
|
|
TI_GET_SYMNAME,
|
|
TI_GET_LENGTH,
|
|
TI_GET_TYPE,
|
|
TI_GET_TYPEID,
|
|
TI_GET_BASETYPE,
|
|
TI_GET_ARRAYINDEXTYPEID,
|
|
TI_FINDCHILDREN,
|
|
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,
|
|
TI_GET_UDTKIND,
|
|
TI_IS_EQUIV_TO,
|
|
TI_GET_CALLING_CONVENTION,
|
|
} IMAGEHLP_SYMBOL_TYPE_INFO;
|
|
typedef struct _SOURCEFILE
|
|
{
|
|
DWORD64 ModBase;
|
|
PCHAR FileName;
|
|
} SOURCEFILE, *PSOURCEFILE;
|
|
typedef struct _SOURCEFILEW
|
|
{
|
|
DWORD64 ModBase;
|
|
PWSTR FileName;
|
|
} SOURCEFILEW, *PSOURCEFILEW;
|
|
typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
|
|
typedef struct _SRCCODEINFOW
|
|
{
|
|
DWORD SizeOfStruct;
|
|
PVOID Key;
|
|
DWORD64 ModBase;
|
|
WCHAR Obj[MAX_PATH+1];
|
|
WCHAR FileName[MAX_PATH+1];
|
|
DWORD LineNumber;
|
|
DWORD64 Address;
|
|
} SRCCODEINFOW, *PSRCCODEINFOW;
|
|
typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
|
|
typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
|
|
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
|
|
#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
|
|
#define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64
|
|
#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
|
|
#define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64
|
|
#else
|
|
typedef struct _IMAGEHLP_SYMBOL
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD Address;
|
|
DWORD Size;
|
|
DWORD Flags;
|
|
DWORD MaxNameLength;
|
|
CHAR Name[1];
|
|
} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
|
|
|
|
typedef struct _IMAGEHLP_SYMBOLW
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD Address;
|
|
DWORD Size;
|
|
DWORD Flags;
|
|
DWORD MaxNameLength;
|
|
WCHAR Name[1];
|
|
} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
|
|
#endif
|
|
typedef struct _IMAGEHLP_SYMBOL64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD64 Address;
|
|
DWORD Size;
|
|
DWORD Flags;
|
|
DWORD MaxNameLength;
|
|
CHAR Name[1];
|
|
} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
|
|
typedef struct _IMAGEHLP_SYMBOLW64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD64 Address;
|
|
DWORD Size;
|
|
DWORD Flags;
|
|
DWORD MaxNameLength;
|
|
WCHAR Name[1];
|
|
} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
|
|
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
|
|
#define IMAGEHLP_LINE IMAGEHLP_LINE64
|
|
#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
|
|
#define IMAGEHLP_LINEW IMAGEHLP_LINEW64
|
|
#define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
|
|
#else
|
|
typedef struct _IMAGEHLP_LINE
|
|
{
|
|
DWORD SizeOfStruct;
|
|
PVOID Key;
|
|
DWORD LineNumber;
|
|
PCHAR FileName;
|
|
DWORD Address;
|
|
} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
|
|
|
|
typedef struct _IMAGEHLP_LINEW
|
|
{
|
|
DWORD SizeOfStruct;
|
|
PVOID Key;
|
|
DWORD LineNumber;
|
|
PWSTR FileName;
|
|
DWORD Address;
|
|
} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
|
|
#endif
|
|
typedef struct _IMAGEHLP_LINEW64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
PVOID Key;
|
|
DWORD LineNumber;
|
|
PWSTR FileName;
|
|
DWORD64 Address;
|
|
} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
|
|
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
|
|
#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
|
|
#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
|
|
#else
|
|
typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD BaseOfImage;
|
|
DWORD CheckSum;
|
|
DWORD TimeDateStamp;
|
|
CHAR FileName[MAX_PATH];
|
|
BOOLEAN Reparse;
|
|
HANDLE hFile;
|
|
} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
|
|
#endif
|
|
typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
|
|
{
|
|
DWORD SizeOfStruct;
|
|
DWORD64 BaseOfImage;
|
|
DWORD CheckSum;
|
|
DWORD TimeDateStamp;
|
|
CHAR FileName[MAX_PATH];
|
|
BOOLEAN Reparse;
|
|
HANDLE hFile;
|
|
DWORD Flags;
|
|
} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
|
|
typedef struct API_VERSION
|
|
{
|
|
USHORT MajorVersion;
|
|
USHORT MinorVersion;
|
|
USHORT Revision;
|
|
USHORT Reserved;
|
|
} API_VERSION, *LPAPI_VERSION;
|
|
|
|
// cvconst.h
|
|
/* symbols & types enumeration */
|
|
enum SymTagEnum
|
|
{
|
|
SymTagNull,
|
|
SymTagExe,
|
|
SymTagCompiland,
|
|
SymTagCompilandDetails,
|
|
SymTagCompilandEnv,
|
|
SymTagFunction,
|
|
SymTagBlock,
|
|
SymTagData,
|
|
SymTagAnnotation,
|
|
SymTagLabel,
|
|
SymTagPublicSymbol,
|
|
SymTagUDT,
|
|
SymTagEnum,
|
|
SymTagFunctionType,
|
|
SymTagPointerType,
|
|
SymTagArrayType,
|
|
SymTagBaseType,
|
|
SymTagTypedef,
|
|
SymTagBaseClass,
|
|
SymTagFriend,
|
|
SymTagFunctionArgType,
|
|
SymTagFuncDebugStart,
|
|
SymTagFuncDebugEnd,
|
|
SymTagUsingNamespace,
|
|
SymTagVTableShape,
|
|
SymTagVTable,
|
|
SymTagCustom,
|
|
SymTagThunk,
|
|
SymTagCustomType,
|
|
SymTagManagedType,
|
|
SymTagDimension,
|
|
SymTagMax
|
|
};
|
|
|
|
enum BasicType
|
|
{
|
|
btNoType = 0,
|
|
btVoid = 1,
|
|
btChar = 2,
|
|
btWChar = 3,
|
|
btInt = 6,
|
|
btUInt = 7,
|
|
btFloat = 8,
|
|
btBCD = 9,
|
|
btBool = 10,
|
|
btLong = 13,
|
|
btULong = 14,
|
|
btCurrency = 25,
|
|
btDate = 26,
|
|
btVariant = 27,
|
|
btComplex = 28,
|
|
btBit = 29,
|
|
btBSTR = 30,
|
|
btHresult = 31,
|
|
};
|
|
|
|
/* kind of UDT */
|
|
enum UdtKind
|
|
{
|
|
UdtStruct,
|
|
UdtClass,
|
|
UdtUnion
|
|
};
|
|
|
|
/* kind of SymTagData */
|
|
enum DataKind
|
|
{
|
|
DataIsUnknown,
|
|
DataIsLocal,
|
|
DataIsStaticLocal,
|
|
DataIsParam,
|
|
DataIsObjectPtr,
|
|
DataIsFileStatic,
|
|
DataIsGlobal,
|
|
DataIsMember,
|
|
DataIsStaticMember,
|
|
DataIsConstant
|
|
};
|
|
|
|
/* values for registers (on different CPUs) */
|
|
enum CV_HREG_e
|
|
{
|
|
/* those values are common to all supported CPUs (and CPU independent) */
|
|
CV_ALLREG_ERR = 30000,
|
|
CV_ALLREG_TEB = 30001,
|
|
CV_ALLREG_TIMER = 30002,
|
|
CV_ALLREG_EFAD1 = 30003,
|
|
CV_ALLREG_EFAD2 = 30004,
|
|
CV_ALLREG_EFAD3 = 30005,
|
|
CV_ALLREG_VFRAME = 30006,
|
|
CV_ALLREG_HANDLE = 30007,
|
|
CV_ALLREG_PARAMS = 30008,
|
|
CV_ALLREG_LOCALS = 30009,
|
|
CV_ALLREG_TID = 30010,
|
|
CV_ALLREG_ENV = 30011,
|
|
CV_ALLREG_CMDLN = 30012,
|
|
|
|
/* Intel x86 CPU */
|
|
CV_REG_NONE = 0,
|
|
CV_REG_AL = 1,
|
|
CV_REG_CL = 2,
|
|
CV_REG_DL = 3,
|
|
CV_REG_BL = 4,
|
|
CV_REG_AH = 5,
|
|
CV_REG_CH = 6,
|
|
CV_REG_DH = 7,
|
|
CV_REG_BH = 8,
|
|
CV_REG_AX = 9,
|
|
CV_REG_CX = 10,
|
|
CV_REG_DX = 11,
|
|
CV_REG_BX = 12,
|
|
CV_REG_SP = 13,
|
|
CV_REG_BP = 14,
|
|
CV_REG_SI = 15,
|
|
CV_REG_DI = 16,
|
|
CV_REG_EAX = 17,
|
|
CV_REG_ECX = 18,
|
|
CV_REG_EDX = 19,
|
|
CV_REG_EBX = 20,
|
|
CV_REG_ESP = 21,
|
|
CV_REG_EBP = 22,
|
|
CV_REG_ESI = 23,
|
|
CV_REG_EDI = 24,
|
|
CV_REG_ES = 25,
|
|
CV_REG_CS = 26,
|
|
CV_REG_SS = 27,
|
|
CV_REG_DS = 28,
|
|
CV_REG_FS = 29,
|
|
CV_REG_GS = 30,
|
|
CV_REG_IP = 31,
|
|
CV_REG_FLAGS = 32,
|
|
CV_REG_EIP = 33,
|
|
CV_REG_EFLAGS = 34,
|
|
|
|
/* <pcode> */
|
|
CV_REG_TEMP = 40,
|
|
CV_REG_TEMPH = 41,
|
|
CV_REG_QUOTE = 42,
|
|
CV_REG_PCDR3 = 43, /* this includes PCDR4 to PCDR7 */
|
|
CV_REG_CR0 = 80, /* this includes CR1 to CR4 */
|
|
CV_REG_DR0 = 90, /* this includes DR1 to DR7 */
|
|
/* </pcode> */
|
|
|
|
CV_REG_GDTR = 110,
|
|
CV_REG_GDTL = 111,
|
|
CV_REG_IDTR = 112,
|
|
CV_REG_IDTL = 113,
|
|
CV_REG_LDTR = 114,
|
|
CV_REG_TR = 115,
|
|
|
|
CV_REG_PSEUDO1 = 116, /* this includes Pseudo02 to Pseudo09 */
|
|
CV_REG_ST0 = 128, /* this includes ST1 to ST7 */
|
|
CV_REG_CTRL = 136,
|
|
CV_REG_STAT = 137,
|
|
CV_REG_TAG = 138,
|
|
CV_REG_FPIP = 139,
|
|
CV_REG_FPCS = 140,
|
|
CV_REG_FPDO = 141,
|
|
CV_REG_FPDS = 142,
|
|
CV_REG_ISEM = 143,
|
|
CV_REG_FPEIP = 144,
|
|
CV_REG_FPEDO = 145,
|
|
CV_REG_MM0 = 146, /* this includes MM1 to MM7 */
|
|
CV_REG_XMM0 = 154, /* this includes XMM1 to XMM7 */
|
|
CV_REG_XMM00 = 162,
|
|
CV_REG_XMM0L = 194, /* this includes XMM1L to XMM7L */
|
|
CV_REG_XMM0H = 202, /* this includes XMM1H to XMM7H */
|
|
CV_REG_MXCSR = 211,
|
|
CV_REG_EDXEAX = 212,
|
|
CV_REG_EMM0L = 220,
|
|
CV_REG_EMM0H = 228,
|
|
CV_REG_MM00 = 236,
|
|
CV_REG_MM01 = 237,
|
|
CV_REG_MM10 = 238,
|
|
CV_REG_MM11 = 239,
|
|
CV_REG_MM20 = 240,
|
|
CV_REG_MM21 = 241,
|
|
CV_REG_MM30 = 242,
|
|
CV_REG_MM31 = 243,
|
|
CV_REG_MM40 = 244,
|
|
CV_REG_MM41 = 245,
|
|
CV_REG_MM50 = 246,
|
|
CV_REG_MM51 = 247,
|
|
CV_REG_MM60 = 248,
|
|
CV_REG_MM61 = 249,
|
|
CV_REG_MM70 = 250,
|
|
CV_REG_MM71 = 251,
|
|
|
|
CV_REG_YMM0 = 252, /* this includes YMM1 to YMM7 */
|
|
CV_REG_YMM0H = 260, /* this includes YMM1H to YMM7H */
|
|
CV_REG_YMM0I0 = 268, /* this includes YMM0I1 to YMM0I3 */
|
|
CV_REG_YMM1I0 = 272, /* this includes YMM1I1 to YMM1I3 */
|
|
CV_REG_YMM2I0 = 276, /* this includes YMM2I1 to YMM2I3 */
|
|
CV_REG_YMM3I0 = 280, /* this includes YMM3I1 to YMM3I3 */
|
|
CV_REG_YMM4I0 = 284, /* this includes YMM4I1 to YMM4I3 */
|
|
CV_REG_YMM5I0 = 288, /* this includes YMM5I1 to YMM5I3 */
|
|
CV_REG_YMM6I0 = 292, /* this includes YMM6I1 to YMM6I3 */
|
|
CV_REG_YMM7I0 = 296, /* this includes YMM7I1 to YMM7I3 */
|
|
CV_REG_YMM0F0 = 300, /* this includes YMM0F1 to YMM0F7 */
|
|
CV_REG_YMM1F0 = 308, /* this includes YMM1F1 to YMM1F7 */
|
|
CV_REG_YMM2F0 = 316, /* this includes YMM2F1 to YMM2F7 */
|
|
CV_REG_YMM3F0 = 324, /* this includes YMM3F1 to YMM3F7 */
|
|
CV_REG_YMM4F0 = 332, /* this includes YMM4F1 to YMM4F7 */
|
|
CV_REG_YMM5F0 = 340, /* this includes YMM5F1 to YMM5F7 */
|
|
CV_REG_YMM6F0 = 348, /* this includes YMM6F1 to YMM6F7 */
|
|
CV_REG_YMM7F0 = 356, /* this includes YMM7F1 to YMM7F7 */
|
|
CV_REG_YMM0D0 = 364, /* this includes YMM0D1 to YMM0D3 */
|
|
CV_REG_YMM1D0 = 368, /* this includes YMM1D1 to YMM1D3 */
|
|
CV_REG_YMM2D0 = 372, /* this includes YMM2D1 to YMM2D3 */
|
|
CV_REG_YMM3D0 = 376, /* this includes YMM3D1 to YMM3D3 */
|
|
CV_REG_YMM4D0 = 380, /* this includes YMM4D1 to YMM4D3 */
|
|
CV_REG_YMM5D0 = 384, /* this includes YMM5D1 to YMM5D3 */
|
|
CV_REG_YMM6D0 = 388, /* this includes YMM6D1 to YMM6D3 */
|
|
CV_REG_YMM7D0 = 392, /* this includes YMM7D1 to YMM7D3 */
|
|
|
|
/* Motorola 68K CPU */
|
|
CV_R68_D0 = 0, /* this includes D1 to D7 too */
|
|
CV_R68_A0 = 8, /* this includes A1 to A7 too */
|
|
CV_R68_CCR = 16,
|
|
CV_R68_SR = 17,
|
|
CV_R68_USP = 18,
|
|
CV_R68_MSP = 19,
|
|
CV_R68_SFC = 20,
|
|
CV_R68_DFC = 21,
|
|
CV_R68_CACR = 22,
|
|
CV_R68_VBR = 23,
|
|
CV_R68_CAAR = 24,
|
|
CV_R68_ISP = 25,
|
|
CV_R68_PC = 26,
|
|
CV_R68_FPCR = 28,
|
|
CV_R68_FPSR = 29,
|
|
CV_R68_FPIAR = 30,
|
|
CV_R68_FP0 = 32, /* this includes FP1 to FP7 */
|
|
CV_R68_MMUSR030 = 41,
|
|
CV_R68_MMUSR = 42,
|
|
CV_R68_URP = 43,
|
|
CV_R68_DTT0 = 44,
|
|
CV_R68_DTT1 = 45,
|
|
CV_R68_ITT0 = 46,
|
|
CV_R68_ITT1 = 47,
|
|
CV_R68_PSR = 51,
|
|
CV_R68_PCSR = 52,
|
|
CV_R68_VAL = 53,
|
|
CV_R68_CRP = 54,
|
|
CV_R68_SRP = 55,
|
|
CV_R68_DRP = 56,
|
|
CV_R68_TC = 57,
|
|
CV_R68_AC = 58,
|
|
CV_R68_SCC = 59,
|
|
CV_R68_CAL = 60,
|
|
CV_R68_TT0 = 61,
|
|
CV_R68_TT1 = 62,
|
|
CV_R68_BAD0 = 64, /* this includes BAD1 to BAD7 */
|
|
CV_R68_BAC0 = 72, /* this includes BAC1 to BAC7 */
|
|
|
|
/* MIPS 4000 CPU */
|
|
CV_M4_NOREG = CV_REG_NONE,
|
|
CV_M4_IntZERO = 10,
|
|
CV_M4_IntAT = 11,
|
|
CV_M4_IntV0 = 12,
|
|
CV_M4_IntV1 = 13,
|
|
CV_M4_IntA0 = 14, /* this includes IntA1 to IntA3 */
|
|
CV_M4_IntT0 = 18, /* this includes IntT1 to IntT7 */
|
|
CV_M4_IntS0 = 26, /* this includes IntS1 to IntS7 */
|
|
CV_M4_IntT8 = 34,
|
|
CV_M4_IntT9 = 35,
|
|
CV_M4_IntKT0 = 36,
|
|
CV_M4_IntKT1 = 37,
|
|
CV_M4_IntGP = 38,
|
|
CV_M4_IntSP = 39,
|
|
CV_M4_IntS8 = 40,
|
|
CV_M4_IntRA = 41,
|
|
CV_M4_IntLO = 42,
|
|
CV_M4_IntHI = 43,
|
|
CV_M4_Fir = 50,
|
|
CV_M4_Psr = 51,
|
|
CV_M4_FltF0 = 60, /* this includes FltF1 to Flt31 */
|
|
CV_M4_FltFsr = 92,
|
|
|
|
/* Alpha AXP CPU */
|
|
CV_ALPHA_NOREG = CV_REG_NONE,
|
|
CV_ALPHA_FltF0 = 10, /* this includes FltF1 to FltF31 */
|
|
CV_ALPHA_IntV0 = 42,
|
|
CV_ALPHA_IntT0 = 43, /* this includes T1 to T7 */
|
|
CV_ALPHA_IntS0 = 51, /* this includes S1 to S5 */
|
|
CV_ALPHA_IntFP = 57,
|
|
CV_ALPHA_IntA0 = 58, /* this includes A1 to A5 */
|
|
CV_ALPHA_IntT8 = 64,
|
|
CV_ALPHA_IntT9 = 65,
|
|
CV_ALPHA_IntT10 = 66,
|
|
CV_ALPHA_IntT11 = 67,
|
|
CV_ALPHA_IntRA = 68,
|
|
CV_ALPHA_IntT12 = 69,
|
|
CV_ALPHA_IntAT = 70,
|
|
CV_ALPHA_IntGP = 71,
|
|
CV_ALPHA_IntSP = 72,
|
|
CV_ALPHA_IntZERO = 73,
|
|
CV_ALPHA_Fpcr = 74,
|
|
CV_ALPHA_Fir = 75,
|
|
CV_ALPHA_Psr = 76,
|
|
CV_ALPHA_FltFsr = 77,
|
|
CV_ALPHA_SoftFpcr = 78,
|
|
|
|
/* Motorola & IBM PowerPC CPU */
|
|
CV_PPC_GPR0 = 1, /* this includes GPR1 to GPR31 */
|
|
CV_PPC_CR = 33,
|
|
CV_PPC_CR0 = 34, /* this includes CR1 to CR7 */
|
|
CV_PPC_FPR0 = 42, /* this includes FPR1 to FPR31 */
|
|
|
|
CV_PPC_FPSCR = 74,
|
|
CV_PPC_MSR = 75,
|
|
CV_PPC_SR0 = 76, /* this includes SR1 to SR15 */
|
|
CV_PPC_PC = 99,
|
|
CV_PPC_MQ = 100,
|
|
CV_PPC_XER = 101,
|
|
CV_PPC_RTCU = 104,
|
|
CV_PPC_RTCL = 105,
|
|
CV_PPC_LR = 108,
|
|
CV_PPC_CTR = 109,
|
|
CV_PPC_COMPARE = 110,
|
|
CV_PPC_COUNT = 111,
|
|
CV_PPC_DSISR = 118,
|
|
CV_PPC_DAR = 119,
|
|
CV_PPC_DEC = 122,
|
|
CV_PPC_SDR1 = 125,
|
|
CV_PPC_SRR0 = 126,
|
|
CV_PPC_SRR1 = 127,
|
|
CV_PPC_SPRG0 = 372, /* this includes SPRG1 to SPRG3 */
|
|
CV_PPC_ASR = 280,
|
|
CV_PPC_EAR = 382,
|
|
CV_PPC_PVR = 287,
|
|
CV_PPC_BAT0U = 628,
|
|
CV_PPC_BAT0L = 629,
|
|
CV_PPC_BAT1U = 630,
|
|
CV_PPC_BAT1L = 631,
|
|
CV_PPC_BAT2U = 632,
|
|
CV_PPC_BAT2L = 633,
|
|
CV_PPC_BAT3U = 634,
|
|
CV_PPC_BAT3L = 635,
|
|
CV_PPC_DBAT0U = 636,
|
|
CV_PPC_DBAT0L = 637,
|
|
CV_PPC_DBAT1U = 638,
|
|
CV_PPC_DBAT1L = 639,
|
|
CV_PPC_DBAT2U = 640,
|
|
CV_PPC_DBAT2L = 641,
|
|
CV_PPC_DBAT3U = 642,
|
|
CV_PPC_DBAT3L = 643,
|
|
CV_PPC_PMR0 = 1044, /* this includes PMR1 to PMR15 */
|
|
CV_PPC_DMISS = 1076,
|
|
CV_PPC_DCMP = 1077,
|
|
CV_PPC_HASH1 = 1078,
|
|
CV_PPC_HASH2 = 1079,
|
|
CV_PPC_IMISS = 1080,
|
|
CV_PPC_ICMP = 1081,
|
|
CV_PPC_RPA = 1082,
|
|
CV_PPC_HID0 = 1108, /* this includes HID1 to HID15 */
|
|
|
|
/* Java */
|
|
CV_JAVA_PC = 1,
|
|
|
|
/* Hitachi SH3 CPU */
|
|
CV_SH3_NOREG = CV_REG_NONE,
|
|
CV_SH3_IntR0 = 10, /* this include R1 to R13 */
|
|
CV_SH3_IntFp = 24,
|
|
CV_SH3_IntSp = 25,
|
|
CV_SH3_Gbr = 38,
|
|
CV_SH3_Pr = 39,
|
|
CV_SH3_Mach = 40,
|
|
CV_SH3_Macl = 41,
|
|
CV_SH3_Pc = 50,
|
|
CV_SH3_Sr = 51,
|
|
CV_SH3_BarA = 60,
|
|
CV_SH3_BasrA = 61,
|
|
CV_SH3_BamrA = 62,
|
|
CV_SH3_BbrA = 63,
|
|
CV_SH3_BarB = 64,
|
|
CV_SH3_BasrB = 65,
|
|
CV_SH3_BamrB = 66,
|
|
CV_SH3_BbrB = 67,
|
|
CV_SH3_BdrB = 68,
|
|
CV_SH3_BdmrB = 69,
|
|
CV_SH3_Brcr = 70,
|
|
CV_SH_Fpscr = 75,
|
|
CV_SH_Fpul = 76,
|
|
CV_SH_FpR0 = 80, /* this includes FpR1 to FpR15 */
|
|
CV_SH_XFpR0 = 96, /* this includes XFpR1 to XXFpR15 */
|
|
|
|
/* ARM CPU */
|
|
CV_ARM_NOREG = CV_REG_NONE,
|
|
CV_ARM_R0 = 10, /* this includes R1 to R12 */
|
|
CV_ARM_SP = 23,
|
|
CV_ARM_LR = 24,
|
|
CV_ARM_PC = 25,
|
|
CV_ARM_CPSR = 26,
|
|
CV_ARM_ACC0 = 27,
|
|
CV_ARM_FPSCR = 40,
|
|
CV_ARM_FPEXC = 41,
|
|
CV_ARM_FS0 = 50, /* this includes FS1 to FS31 */
|
|
CV_ARM_FPEXTRA0 = 90, /* this includes FPEXTRA1 to FPEXTRA7 */
|
|
CV_ARM_WR0 = 128, /* this includes WR1 to WR15 */
|
|
CV_ARM_WCID = 144,
|
|
CV_ARM_WCON = 145,
|
|
CV_ARM_WCSSF = 146,
|
|
CV_ARM_WCASF = 147,
|
|
CV_ARM_WC4 = 148,
|
|
CV_ARM_WC5 = 149,
|
|
CV_ARM_WC6 = 150,
|
|
CV_ARM_WC7 = 151,
|
|
CV_ARM_WCGR0 = 152, /* this includes WCGR1 to WCGR3 */
|
|
CV_ARM_WC12 = 156,
|
|
CV_ARM_WC13 = 157,
|
|
CV_ARM_WC14 = 158,
|
|
CV_ARM_WC15 = 159,
|
|
CV_ARM_FS32 = 200, /* this includes FS33 to FS63 */
|
|
CV_ARM_ND0 = 300, /* this includes ND1 to ND31 */
|
|
CV_ARM_NQ0 = 400, /* this includes NQ1 to NQ15 */
|
|
|
|
/* Intel IA64 CPU */
|
|
CV_IA64_NOREG = CV_REG_NONE,
|
|
CV_IA64_Br0 = 512, /* this includes Br1 to Br7 */
|
|
CV_IA64_P0 = 704, /* this includes P1 to P63 */
|
|
CV_IA64_Preds = 768,
|
|
CV_IA64_IntH0 = 832, /* this includes H1 to H15 */
|
|
CV_IA64_Ip = 1016,
|
|
CV_IA64_Umask = 1017,
|
|
CV_IA64_Cfm = 1018,
|
|
CV_IA64_Psr = 1019,
|
|
CV_IA64_Nats = 1020,
|
|
CV_IA64_Nats2 = 1021,
|
|
CV_IA64_Nats3 = 1022,
|
|
CV_IA64_IntR0 = 1024, /* this includes R1 to R127 */
|
|
CV_IA64_FltF0 = 2048, /* this includes FltF1 to FltF127 */
|
|
/* some IA64 registers missing */
|
|
|
|
/* TriCore CPU */
|
|
CV_TRI_NOREG = CV_REG_NONE,
|
|
CV_TRI_D0 = 10, /* includes D1 to D15 */
|
|
CV_TRI_A0 = 26, /* includes A1 to A15 */
|
|
CV_TRI_E0 = 42,
|
|
CV_TRI_E2 = 43,
|
|
CV_TRI_E4 = 44,
|
|
CV_TRI_E6 = 45,
|
|
CV_TRI_E8 = 46,
|
|
CV_TRI_E10 = 47,
|
|
CV_TRI_E12 = 48,
|
|
CV_TRI_E14 = 49,
|
|
CV_TRI_EA0 = 50,
|
|
CV_TRI_EA2 = 51,
|
|
CV_TRI_EA4 = 52,
|
|
CV_TRI_EA6 = 53,
|
|
CV_TRI_EA8 = 54,
|
|
CV_TRI_EA10 = 55,
|
|
CV_TRI_EA12 = 56,
|
|
CV_TRI_EA14 = 57,
|
|
CV_TRI_PSW = 58,
|
|
CV_TRI_PCXI = 59,
|
|
CV_TRI_PC = 60,
|
|
CV_TRI_FCX = 61,
|
|
CV_TRI_LCX = 62,
|
|
CV_TRI_ISP = 63,
|
|
CV_TRI_ICR = 64,
|
|
CV_TRI_BIV = 65,
|
|
CV_TRI_BTV = 66,
|
|
CV_TRI_SYSCON = 67,
|
|
CV_TRI_DPRx_0 = 68, /* includes DPRx_1 to DPRx_3 */
|
|
CV_TRI_CPRx_0 = 68, /* includes CPRx_1 to CPRx_3 */
|
|
CV_TRI_DPMx_0 = 68, /* includes DPMx_1 to DPMx_3 */
|
|
CV_TRI_CPMx_0 = 68, /* includes CPMx_1 to CPMx_3 */
|
|
CV_TRI_DBGSSR = 72,
|
|
CV_TRI_EXEVT = 73,
|
|
CV_TRI_SWEVT = 74,
|
|
CV_TRI_CREVT = 75,
|
|
CV_TRI_TRnEVT = 76,
|
|
CV_TRI_MMUCON = 77,
|
|
CV_TRI_ASI = 78,
|
|
CV_TRI_TVA = 79,
|
|
CV_TRI_TPA = 80,
|
|
CV_TRI_TPX = 81,
|
|
CV_TRI_TFA = 82,
|
|
|
|
/* AM33 (and the likes) CPU */
|
|
CV_AM33_NOREG = CV_REG_NONE,
|
|
CV_AM33_E0 = 10, /* this includes E1 to E7 */
|
|
CV_AM33_A0 = 20, /* this includes A1 to A3 */
|
|
CV_AM33_D0 = 30, /* this includes D1 to D3 */
|
|
CV_AM33_FS0 = 40, /* this includes FS1 to FS31 */
|
|
CV_AM33_SP = 80,
|
|
CV_AM33_PC = 81,
|
|
CV_AM33_MDR = 82,
|
|
CV_AM33_MDRQ = 83,
|
|
CV_AM33_MCRH = 84,
|
|
CV_AM33_MCRL = 85,
|
|
CV_AM33_MCVF = 86,
|
|
CV_AM33_EPSW = 87,
|
|
CV_AM33_FPCR = 88,
|
|
CV_AM33_LIR = 89,
|
|
CV_AM33_LAR = 90,
|
|
|
|
/* Mitsubishi M32R CPU */
|
|
CV_M32R_NOREG = CV_REG_NONE,
|
|
CV_M32R_R0 = 10, /* this includes R1 to R11 */
|
|
CV_M32R_R12 = 22,
|
|
CV_M32R_R13 = 23,
|
|
CV_M32R_R14 = 24,
|
|
CV_M32R_R15 = 25,
|
|
CV_M32R_PSW = 26,
|
|
CV_M32R_CBR = 27,
|
|
CV_M32R_SPI = 28,
|
|
CV_M32R_SPU = 29,
|
|
CV_M32R_SPO = 30,
|
|
CV_M32R_BPC = 31,
|
|
CV_M32R_ACHI = 32,
|
|
CV_M32R_ACLO = 33,
|
|
CV_M32R_PC = 34,
|
|
|
|
/* AMD/Intel x86_64 CPU */
|
|
CV_AMD64_NONE = CV_REG_NONE,
|
|
CV_AMD64_AL = CV_REG_AL,
|
|
CV_AMD64_CL = CV_REG_CL,
|
|
CV_AMD64_DL = CV_REG_DL,
|
|
CV_AMD64_BL = CV_REG_BL,
|
|
CV_AMD64_AH = CV_REG_AH,
|
|
CV_AMD64_CH = CV_REG_CH,
|
|
CV_AMD64_DH = CV_REG_DH,
|
|
CV_AMD64_BH = CV_REG_BH,
|
|
CV_AMD64_AX = CV_REG_AX,
|
|
CV_AMD64_CX = CV_REG_CX,
|
|
CV_AMD64_DX = CV_REG_DX,
|
|
CV_AMD64_BX = CV_REG_BX,
|
|
CV_AMD64_SP = CV_REG_SP,
|
|
CV_AMD64_BP = CV_REG_BP,
|
|
CV_AMD64_SI = CV_REG_SI,
|
|
CV_AMD64_DI = CV_REG_DI,
|
|
CV_AMD64_EAX = CV_REG_EAX,
|
|
CV_AMD64_ECX = CV_REG_ECX,
|
|
CV_AMD64_EDX = CV_REG_EDX,
|
|
CV_AMD64_EBX = CV_REG_EBX,
|
|
CV_AMD64_ESP = CV_REG_ESP,
|
|
CV_AMD64_EBP = CV_REG_EBP,
|
|
CV_AMD64_ESI = CV_REG_ESI,
|
|
CV_AMD64_EDI = CV_REG_EDI,
|
|
CV_AMD64_ES = CV_REG_ES,
|
|
CV_AMD64_CS = CV_REG_CS,
|
|
CV_AMD64_SS = CV_REG_SS,
|
|
CV_AMD64_DS = CV_REG_DS,
|
|
CV_AMD64_FS = CV_REG_FS,
|
|
CV_AMD64_GS = CV_REG_GS,
|
|
CV_AMD64_FLAGS = CV_REG_FLAGS,
|
|
CV_AMD64_RIP = CV_REG_EIP,
|
|
CV_AMD64_EFLAGS = CV_REG_EFLAGS,
|
|
|
|
/* <pcode> */
|
|
CV_AMD64_TEMP = CV_REG_TEMP,
|
|
CV_AMD64_TEMPH = CV_REG_TEMPH,
|
|
CV_AMD64_QUOTE = CV_REG_QUOTE,
|
|
CV_AMD64_PCDR3 = CV_REG_PCDR3, /* this includes PCDR4 to PCDR7 */
|
|
CV_AMD64_CR0 = CV_REG_CR0, /* this includes CR1 to CR4 */
|
|
CV_AMD64_DR0 = CV_REG_DR0, /* this includes DR1 to DR7 */
|
|
/* </pcode> */
|
|
|
|
CV_AMD64_GDTR = CV_REG_GDTR,
|
|
CV_AMD64_GDTL = CV_REG_GDTL,
|
|
CV_AMD64_IDTR = CV_REG_IDTR,
|
|
CV_AMD64_IDTL = CV_REG_IDTL,
|
|
CV_AMD64_LDTR = CV_REG_LDTR,
|
|
CV_AMD64_TR = CV_REG_TR,
|
|
|
|
CV_AMD64_PSEUDO1 = CV_REG_PSEUDO1, /* this includes Pseudo02 to Pseudo09 */
|
|
CV_AMD64_ST0 = CV_REG_ST0, /* this includes ST1 to ST7 */
|
|
CV_AMD64_CTRL = CV_REG_CTRL,
|
|
CV_AMD64_STAT = CV_REG_STAT,
|
|
CV_AMD64_TAG = CV_REG_TAG,
|
|
CV_AMD64_FPIP = CV_REG_FPIP,
|
|
CV_AMD64_FPCS = CV_REG_FPCS,
|
|
CV_AMD64_FPDO = CV_REG_FPDO,
|
|
CV_AMD64_FPDS = CV_REG_FPDS,
|
|
CV_AMD64_ISEM = CV_REG_ISEM,
|
|
CV_AMD64_FPEIP = CV_REG_FPEIP,
|
|
CV_AMD64_FPEDO = CV_REG_FPEDO,
|
|
CV_AMD64_MM0 = CV_REG_MM0, /* this includes MM1 to MM7 */
|
|
CV_AMD64_XMM0 = CV_REG_XMM0, /* this includes XMM1 to XMM7 */
|
|
CV_AMD64_XMM00 = CV_REG_XMM00,
|
|
CV_AMD64_XMM0L = CV_REG_XMM0L, /* this includes XMM1L to XMM7L */
|
|
CV_AMD64_XMM0H = CV_REG_XMM0H, /* this includes XMM1H to XMM7H */
|
|
CV_AMD64_MXCSR = CV_REG_MXCSR,
|
|
CV_AMD64_EDXEAX = CV_REG_EDXEAX,
|
|
CV_AMD64_EMM0L = CV_REG_EMM0L,
|
|
CV_AMD64_EMM0H = CV_REG_EMM0H,
|
|
CV_AMD64_MM00 = CV_REG_MM00,
|
|
CV_AMD64_MM01 = CV_REG_MM01,
|
|
CV_AMD64_MM10 = CV_REG_MM10,
|
|
CV_AMD64_MM11 = CV_REG_MM11,
|
|
CV_AMD64_MM20 = CV_REG_MM20,
|
|
CV_AMD64_MM21 = CV_REG_MM21,
|
|
CV_AMD64_MM30 = CV_REG_MM30,
|
|
CV_AMD64_MM31 = CV_REG_MM31,
|
|
CV_AMD64_MM40 = CV_REG_MM40,
|
|
CV_AMD64_MM41 = CV_REG_MM41,
|
|
CV_AMD64_MM50 = CV_REG_MM50,
|
|
CV_AMD64_MM51 = CV_REG_MM51,
|
|
CV_AMD64_MM60 = CV_REG_MM60,
|
|
CV_AMD64_MM61 = CV_REG_MM61,
|
|
CV_AMD64_MM70 = CV_REG_MM70,
|
|
CV_AMD64_MM71 = CV_REG_MM71,
|
|
|
|
CV_AMD64_XMM8 = 252, /* this includes XMM9 to XMM15 */
|
|
|
|
CV_AMD64_RAX = 328,
|
|
CV_AMD64_RBX = 329,
|
|
CV_AMD64_RCX = 330,
|
|
CV_AMD64_RDX = 331,
|
|
CV_AMD64_RSI = 332,
|
|
CV_AMD64_RDI = 333,
|
|
CV_AMD64_RBP = 334,
|
|
CV_AMD64_RSP = 335,
|
|
|
|
CV_AMD64_R8 = 336,
|
|
CV_AMD64_R9 = 337,
|
|
CV_AMD64_R10 = 338,
|
|
CV_AMD64_R11 = 339,
|
|
CV_AMD64_R12 = 340,
|
|
CV_AMD64_R13 = 341,
|
|
CV_AMD64_R14 = 342,
|
|
CV_AMD64_R15 = 343,
|
|
|
|
/* Wine extension */
|
|
CV_ARM64_NOREG = CV_REG_NONE,
|
|
CV_ARM64_X0 = 10, /* this includes X0 to X30 */
|
|
CV_ARM64_SP = 41,
|
|
CV_ARM64_PC = 42,
|
|
CV_ARM64_PSTATE = 43,
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
THUNK_ORDINAL_NOTYPE,
|
|
THUNK_ORDINAL_ADJUSTOR,
|
|
THUNK_ORDINAL_VCALL,
|
|
THUNK_ORDINAL_PCODE,
|
|
THUNK_ORDINAL_LOAD
|
|
} THUNK_ORDINAL;
|
|
|
|
typedef enum CV_call_e
|
|
{
|
|
CV_CALL_NEAR_C,
|
|
CV_CALL_FAR_C,
|
|
CV_CALL_NEAR_PASCAL,
|
|
CV_CALL_FAR_PASCAL,
|
|
CV_CALL_NEAR_FAST,
|
|
CV_CALL_FAR_FAST,
|
|
CV_CALL_SKIPPED,
|
|
CV_CALL_NEAR_STD,
|
|
CV_CALL_FAR_STD,
|
|
CV_CALL_NEAR_SYS,
|
|
CV_CALL_FAR_SYS,
|
|
CV_CALL_THISCALL,
|
|
CV_CALL_MIPSCALL,
|
|
CV_CALL_GENERIC,
|
|
CV_CALL_ALPHACALL,
|
|
CV_CALL_PPCCALL,
|
|
CV_CALL_SHCALL,
|
|
CV_CALL_ARMCALL,
|
|
CV_CALL_AM33CALL,
|
|
CV_CALL_TRICALL,
|
|
CV_CALL_SH5CALL,
|
|
CV_CALL_M32RCALL,
|
|
CV_CALL_RESERVED,
|
|
} CV_call_e;
|
|
|
|
|
|
// wtypes.h
|
|
typedef LONG SCODE;
|
|
typedef double DATE;
|
|
typedef unsigned short VARTYPE;
|
|
typedef union tagCY {
|
|
struct {
|
|
#ifdef WORDS_BIGENDIAN
|
|
LONG Hi;
|
|
ULONG Lo;
|
|
#else
|
|
ULONG Lo;
|
|
LONG Hi;
|
|
#endif
|
|
} DUMMYSTRUCTNAME;
|
|
LONGLONG int64;
|
|
} CY;
|
|
typedef struct tagDEC {
|
|
USHORT wReserved;
|
|
union {
|
|
struct {
|
|
BYTE scale;
|
|
BYTE sign;
|
|
} DUMMYSTRUCTNAME;
|
|
USHORT signscale;
|
|
} DUMMYUNIONNAME;
|
|
ULONG Hi32;
|
|
union {
|
|
struct {
|
|
#ifdef WORDS_BIGENDIAN
|
|
ULONG Mid32;
|
|
ULONG Lo32;
|
|
#else
|
|
ULONG Lo32;
|
|
ULONG Mid32;
|
|
#endif
|
|
} DUMMYSTRUCTNAME1;
|
|
ULONGLONG Lo64;
|
|
} DUMMYUNIONNAME1;
|
|
} DECIMAL;
|
|
typedef short VARIANT_BOOL;
|
|
typedef VARIANT_BOOL _VARIANT_BOOL;
|
|
typedef WCHAR OLECHAR;
|
|
typedef OLECHAR *BSTR;
|
|
enum VARENUM {
|
|
VT_EMPTY = 0,
|
|
VT_NULL = 1,
|
|
VT_I2 = 2,
|
|
VT_I4 = 3,
|
|
VT_R4 = 4,
|
|
VT_R8 = 5,
|
|
VT_CY = 6,
|
|
VT_DATE = 7,
|
|
VT_BSTR = 8,
|
|
VT_DISPATCH = 9,
|
|
VT_ERROR = 10,
|
|
VT_BOOL = 11,
|
|
VT_VARIANT = 12,
|
|
VT_UNKNOWN = 13,
|
|
VT_DECIMAL = 14,
|
|
VT_I1 = 16,
|
|
VT_UI1 = 17,
|
|
VT_UI2 = 18,
|
|
VT_UI4 = 19,
|
|
VT_I8 = 20,
|
|
VT_UI8 = 21,
|
|
VT_INT = 22,
|
|
VT_UINT = 23,
|
|
VT_VOID = 24,
|
|
VT_HRESULT = 25,
|
|
VT_PTR = 26,
|
|
VT_SAFEARRAY = 27,
|
|
VT_CARRAY = 28,
|
|
VT_USERDEFINED = 29,
|
|
VT_LPSTR = 30,
|
|
VT_LPWSTR = 31,
|
|
VT_RECORD = 36,
|
|
VT_INT_PTR = 37,
|
|
VT_UINT_PTR = 38,
|
|
VT_FILETIME = 64,
|
|
VT_BLOB = 65,
|
|
VT_STREAM = 66,
|
|
VT_STORAGE = 67,
|
|
VT_STREAMED_OBJECT = 68,
|
|
VT_STORED_OBJECT = 69,
|
|
VT_BLOB_OBJECT = 70,
|
|
VT_CF = 71,
|
|
VT_CLSID = 72,
|
|
VT_VERSIONED_STREAM = 73,
|
|
VT_BSTR_BLOB = 0xfff,
|
|
VT_VECTOR = 0x1000,
|
|
VT_ARRAY = 0x2000,
|
|
VT_BYREF = 0x4000,
|
|
VT_RESERVED = 0x8000,
|
|
VT_ILLEGAL = 0xffff,
|
|
VT_ILLEGALMASKED = 0xfff,
|
|
VT_TYPEMASK = 0xfff
|
|
};
|
|
|
|
// oaidl.h
|
|
typedef struct tagSAFEARRAYBOUND {
|
|
ULONG cElements;
|
|
LONG lLbound;
|
|
} SAFEARRAYBOUND;
|
|
typedef struct tagSAFEARRAY {
|
|
USHORT cDims;
|
|
USHORT fFeatures;
|
|
ULONG cbElements;
|
|
ULONG cLocks;
|
|
PVOID pvData;
|
|
SAFEARRAYBOUND rgsabound[1];
|
|
} SAFEARRAY;
|
|
typedef SAFEARRAY *LPSAFEARRAY;
|
|
|
|
#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
|
|
#define __VARIANT_NAME_1 n1
|
|
#define __VARIANT_NAME_2 n2
|
|
#define __VARIANT_NAME_3 n3
|
|
#define __VARIANT_NAME_4 brecVal
|
|
#else
|
|
#define __tagVARIANT
|
|
#define __VARIANT_NAME_1
|
|
#define __VARIANT_NAME_2
|
|
#define __VARIANT_NAME_3
|
|
#define __tagBRECORD
|
|
#define __VARIANT_NAME_4
|
|
#endif
|
|
typedef struct tagVARIANT VARIANT;
|
|
struct tagVARIANT {
|
|
union {
|
|
struct __tagVARIANT {
|
|
VARTYPE vt;
|
|
WORD wReserved1;
|
|
WORD wReserved2;
|
|
WORD wReserved3;
|
|
union {
|
|
signed char cVal;
|
|
USHORT uiVal;
|
|
ULONG ulVal;
|
|
INT intVal;
|
|
UINT uintVal;
|
|
BYTE bVal;
|
|
SHORT iVal;
|
|
LONG lVal;
|
|
FLOAT fltVal;
|
|
DOUBLE dblVal;
|
|
VARIANT_BOOL boolVal;
|
|
SCODE scode;
|
|
DATE date;
|
|
BSTR bstrVal;
|
|
CY cyVal;
|
|
IUnknown *punkVal;
|
|
IDispatch *pdispVal;
|
|
SAFEARRAY *parray;
|
|
LONGLONG llVal;
|
|
ULONGLONG ullVal;
|
|
signed char *pcVal;
|
|
USHORT *puiVal;
|
|
ULONG *pulVal;
|
|
INT *pintVal;
|
|
UINT *puintVal;
|
|
BYTE *pbVal;
|
|
SHORT *piVal;
|
|
LONG *plVal;
|
|
FLOAT *pfltVal;
|
|
DOUBLE *pdblVal;
|
|
VARIANT_BOOL *pboolVal;
|
|
SCODE *pscode;
|
|
DATE *pdate;
|
|
BSTR *pbstrVal;
|
|
VARIANT *pvarVal;
|
|
PVOID byref;
|
|
CY *pcyVal;
|
|
DECIMAL *pdecVal;
|
|
IUnknown **ppunkVal;
|
|
IDispatch **ppdispVal;
|
|
SAFEARRAY **pparray;
|
|
LONGLONG *pllVal;
|
|
ULONGLONG *pullVal;
|
|
struct __tagBRECORD {
|
|
PVOID pvRecord;
|
|
IRecordInfo *pRecInfo;
|
|
} __VARIANT_NAME_4;
|
|
} __VARIANT_NAME_3;
|
|
} __VARIANT_NAME_2;
|
|
DECIMAL decVal;
|
|
} __VARIANT_NAME_1;
|
|
};
|
|
|
|
typedef VARIANT *LPVARIANT;
|
|
typedef VARIANT VARIANTARG;
|
|
typedef VARIANTARG *LPVARIANTARG;
|
|
|
|
// wine/windef16.h
|
|
typedef DWORD SEGPTR;
|
|
|
|
// wine/winbase16.h
|
|
typedef struct _STACK32FRAME
|
|
{
|
|
DWORD restore_addr; /* 00 return address for restoring code selector */
|
|
DWORD codeselector; /* 04 code selector to restore */
|
|
EXCEPTION_REGISTRATION_RECORD frame; /* 08 Exception frame */
|
|
SEGPTR frame16; /* 10 16-bit frame from last CallFrom16() */
|
|
DWORD edi; /* 14 saved registers */
|
|
DWORD esi; /* 18 */
|
|
DWORD ebx; /* 1c */
|
|
DWORD ebp; /* 20 saved 32-bit frame pointer */
|
|
DWORD retaddr; /* 24 return address */
|
|
DWORD target; /* 28 target address / CONTEXT86 pointer */
|
|
DWORD nb_args; /* 2c number of 16-bit argument bytes */
|
|
} STACK32FRAME;
|
|
|
|
/* 16-bit stack layout after __wine_call_from_16() */
|
|
typedef struct _STACK16FRAME
|
|
{
|
|
STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */
|
|
DWORD edx; /* 04 saved registers */
|
|
DWORD ecx; /* 08 */
|
|
DWORD ebp; /* 0c */
|
|
WORD ds; /* 10 */
|
|
WORD es; /* 12 */
|
|
WORD fs; /* 14 */
|
|
WORD gs; /* 16 */
|
|
DWORD callfrom_ip; /* 18 callfrom tail IP */
|
|
DWORD module_cs; /* 1c module code segment */
|
|
DWORD relay; /* 20 relay function address */
|
|
WORD entry_ip; /* 22 entry point IP */
|
|
DWORD entry_point; /* 26 API entry point to call, reused as mutex count */
|
|
WORD bp; /* 2a 16-bit stack frame chain */
|
|
WORD ip; /* 2c return address */
|
|
WORD cs; /* 2e */
|
|
} STACK16FRAME;
|