Windows2000/private/windbg64/langapi/include/rttidata.h
2020-09-30 17:12:32 +02:00

99 lines
3.6 KiB
C

// _RTTIBaseClassDescriptor
// TypeDescriptor is declared in ehdata.h
typedef const struct _s_RTTIBaseClassDescriptor {
TypeDescriptor *pTypeDescriptor;
DWORD numContainedBases;
PMD where;
DWORD attributes;
} _RTTIBaseClassDescriptor;
#define BCD_NOTVISIBLE 0x00000001
#define BCD_AMBIGUOUS 0x00000002
#define BCD_PRIVORPROTINCOMPOBJ 0x00000004
#define BCD_PRIVORPROTBASE 0x00000008
#define BCD_VBOFCONTOBJ 0x00000010
#define BCD_NONPOLYMORPHIC 0x00000020
#define BCD_PTD(bcd) ((bcd).pTypeDescriptor)
#define BCD_NUMCONTBASES(bcd) ((bcd).numContainedBases)
#define BCD_WHERE(bcd) ((bcd).where)
#define BCD_ATTRIBUTES(bcd) ((bcd).attributes)
// _RTTIBaseClassArray
#pragma warning(disable:4200) // get rid of obnoxious nonstandard extension warning
typedef const struct _s_RTTIBaseClassArray {
_RTTIBaseClassDescriptor *arrayOfBaseClassDescriptors[];
} _RTTIBaseClassArray;
#pragma warning(default:4200)
// _RTTIClassHierarchyDescriptor
typedef const struct _s_RTTIClassHierarchyDescriptor {
DWORD signature;
DWORD attributes;
DWORD numBaseClasses;
_RTTIBaseClassArray *pBaseClassArray;
} _RTTIClassHierarchyDescriptor;
#define CHD_MULTINH 0x00000001
#define CHD_VIRTINH 0x00000002
#define CHD_AMBIGUOUS 0x00000004
#define CHD_SIGNATURE(chd) ((chd).signature)
#define CHD_ATTRIBUTES(chd) ((chd).attributes)
#define CHD_NUMBASES(chd) ((chd).numBaseClasses)
#define CHD_PBCA(chd) ((chd).pBaseClassArray)
// _RTTICompleteObjectLocator
typedef const struct _s_RTTICompleteObjectLocator {
DWORD signature;
DWORD offset;
DWORD cdOffset;
TypeDescriptor *pTypeDescriptor;
_RTTIClassHierarchyDescriptor *pClassDescriptor;
} _RTTICompleteObjectLocator;
#define COL_SIGNATURE(col) ((col).signature)
#define COL_OFFSET(col) ((col).offset)
#define COL_CDOFFSET(col) ((col).cdOffset)
#define COL_PTD(col) ((col).pTypeDescriptor)
#define COL_PCHD(col) ((col).pClassDescriptor)
#ifdef BUILDING_TYPESRC_C
// Type of the result of __RTtypeid and internal applications of typeid().
// This also introduces the tag "type_info" as an incomplete type.
typedef const class type_info &__RTtypeidReturnType;
// Declaration of CRT entrypoints, as seen by the compiler. Types are
// simplified so as to avoid type matching hassles.
// Perform a dynamic_cast on obj. of polymorphic type
extern "C" PVOID __cdecl __RTDynamicCast (
PVOID, // ptr to vfptr
LONG, // offset of vftable
PVOID, // src type
PVOID, // target type
BOOL); // isReference
// Perform 'typeid' on obj. of polymorphic type
extern "C" PVOID __cdecl __RTtypeid (PVOID); // ptr to vfptr
// Perform a dynamic_cast from obj. of polymorphic type to void*
extern "C" PVOID __cdecl __RTCastToVoid (PVOID); // ptr to vfptr
#endif