static DataType getSimpleDataType(Program program) {

		DataTypeManager dataTypeManager = program.getDataTypeManager();
		boolean is64Bit = MSDataTypeUtils.is64Bit(program);

		CategoryPath categoryPath = new CategoryPath(CATEGORY_PATH);
		StructureDataType struct =
			MSDataTypeUtils.getAlignedPack4Structure(dataTypeManager, categoryPath, STRUCTURE_NAME);

		// Add the components.
		DWordDataType dWordDataType = new DWordDataType(dataTypeManager);
		struct.add(dWordDataType, "signature", null);
		struct.add(dWordDataType, "attributes", "bit flags");
		struct.add(dWordDataType, "numBaseClasses", "number of base classes (i.e. rtti1Count)");

		DataType rtti2Dt = Rtti2Model.getSimpleIndividualEntryDataType(program);
		// FIXME! I don't think we should be making a pointer-to-pointer
		DataType rtti2RefDt =
			is64Bit ? IBO32DataType.createIBO32PointerTypedef(rtti2Dt)
					: new PointerDataType(rtti2Dt, dataTypeManager);
		struct.add(rtti2RefDt, "pBaseClassArray", "ref to BaseClassArray (RTTI 2)");

		return new TypedefDataType(categoryPath, DATA_TYPE_NAME, struct, dataTypeManager);
	}
This gets the ClassHierarchyDescriptor (RTTI 3) structure for the indicated program.
@param program the program which will contain this data type. 
@return the ClassHierarchyDescriptor (RTTI 3) structure.
Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/Rtti3Model.java