unsafe uint IMetaDataImport.GetTypeDefProps(uint td, IntPtr szTypeDef, uint cchTypeDef, out uint pchTypeDef, IntPtr pdwTypeDefFlags) { pchTypeDef = 0; if (td == 0) { return(0); } ITypeReference t = null; if ((td & 0xFF000000) == 0x1B000000) { t = this.writer.typeSpecList[(int)(td & 0xFFFFFF) - 1]; IGenericTypeInstanceReference gt = t as IGenericTypeInstanceReference; if (gt != null) { t = gt.GenericType; } } else { t = this.writer.typeDefList[(int)(td & 0xFFFFFF) - 1]; } string tName; uint parentToken = 0; if (this.lastTd == td) { tName = this.lastTName; parentToken = this.lastParentToken; } else { tName = TypeHelper.GetTypeName(t, NameFormattingOptions.UseGenericTypeNameSuffix | NameFormattingOptions.OmitContainingType); this.lastTd = td; this.lastTName = tName; ITypeReference bc = null; foreach (ITypeReference baseClassRef in t.ResolvedType.BaseClasses) { bc = baseClassRef; } if (bc != null) { parentToken = (uint)this.writer.GetTypeToken(bc); } this.lastParentToken = parentToken; } pchTypeDef = (uint)tName.Length; if (pchTypeDef >= cchTypeDef) { pchTypeDef = cchTypeDef - 1; } char *pTypeDef = (char *)szTypeDef.ToPointer(); for (int i = 0; i < pchTypeDef; i++) { *(pTypeDef + i) = tName[i]; } *(pTypeDef + pchTypeDef) = (char)0; uint *pFlags = (uint *)pdwTypeDefFlags.ToPointer(); *(pFlags) = PeWriter.GetTypeDefFlags(t.ResolvedType); return(parentToken); }