Beispiel #1
0
 public MetadataToken ExpandTypeDefRefOrSpecToken(uint pToken)
 {
     MetadataToken token = new MetadataToken();
     token.Table = (byte)(pToken & 0x03);
     switch (token.Table)
     {
         case 0: token.Table = CLIMetadataTables.TypeDef; break;
         case 1: token.Table = CLIMetadataTables.TypeRef; break;
         case 2: token.Table = CLIMetadataTables.TypeSpec; break;
         default: return token;
     }
     uint index = pToken >> 2;
     if (index == 0) return token;
     --index;
     switch (token.Table)
     {
         case CLIMetadataTables.TypeDef: token.Data = TypeDefTable[index]; break;
         case CLIMetadataTables.TypeRef: token.Data = TypeRefTable[index]; break;
         case CLIMetadataTables.TypeSpec: token.Data = TypeSpecTable[index]; break;
         default: break;
     }
     return token;
 }
Beispiel #2
0
 public MetadataToken ExpandMetadataToken(uint pToken)
 {
     MetadataToken token = new MetadataToken();
     token.Table = (byte)(pToken >> 24);
     token.IsUserString = token.Table == CLIMetadataTables.UserStrings;
     uint index = pToken & 0x00FFFFFF;
     if (index == 0) return token;
     if (token.IsUserString)
     {
         token.Data = ReadUserStringHeap((int)index);
         return token;
     }
     --index;
     switch (token.Table)
     {
         case CLIMetadataTables.Module: token.Data = ModuleTable[index]; break;
         case CLIMetadataTables.TypeRef: token.Data = TypeDefTable[index]; break;
         case CLIMetadataTables.TypeDef: token.Data = TypeDefTable[index]; break;
         case CLIMetadataTables.Field: token.Data = FieldTable[index]; break;
         case CLIMetadataTables.MethodDef: token.Data = MethodDefTable[index]; break;
         case CLIMetadataTables.Param: token.Data = ParamTable[index]; break;
         case CLIMetadataTables.InterfaceImpl: token.Data = InterfaceImplTable[index]; break;
         case CLIMetadataTables.MemberRef: token.Data = MemberRefTable[index]; break;
         case CLIMetadataTables.Constant: token.Data = ConstantTable[index]; break;
         case CLIMetadataTables.CustomAttribute: token.Data = CustomAttributeTable[index]; break;
         case CLIMetadataTables.FieldMarshal: token.Data = FieldMarshalTable[index]; break;
         case CLIMetadataTables.DeclSecurity: token.Data = DeclSecurityTable[index]; break;
         case CLIMetadataTables.ClassLayout: token.Data = ClassLayoutTable[index]; break;
         case CLIMetadataTables.FieldLayout: token.Data = FieldLayoutTable[index]; break;
         case CLIMetadataTables.StandAloneSig: token.Data = StandAloneSigTable[index]; break;
         case CLIMetadataTables.EventMap: token.Data = EventMapTable[index]; break;
         case CLIMetadataTables.Event: token.Data = EventTable[index]; break;
         case CLIMetadataTables.PropertyMap: token.Data = PropertyMapTable[index]; break;
         case CLIMetadataTables.Property: token.Data = PropertyTable[index]; break;
         case CLIMetadataTables.MethodSemantics: token.Data = MethodSemanticsTable[index]; break;
         case CLIMetadataTables.MethodImpl: token.Data = MethodImplTable[index]; break;
         case CLIMetadataTables.ModuleRef: token.Data = ModuleRefTable[index]; break;
         case CLIMetadataTables.TypeSpec: token.Data = TypeSpecTable[index]; break;
         case CLIMetadataTables.ImplMap: token.Data = ImplMapTable[index]; break;
         case CLIMetadataTables.FieldRVA: token.Data = FieldRVATable[index]; break;
         case CLIMetadataTables.Assembly: token.Data = AssemblyTable[index]; break;
         case CLIMetadataTables.AssemblyProcessor: token.Data = AssemblyProcessorTable[index]; break;
         case CLIMetadataTables.AssemblyOS: token.Data = AssemblyOSTable[index]; break;
         case CLIMetadataTables.AssemblyRef: token.Data = AssemblyRefTable[index]; break;
         case CLIMetadataTables.AssemblyRefProcessor: token.Data = AssemblyRefProcessorTable[index]; break;
         case CLIMetadataTables.AssemblyRefOS: token.Data = AssemblyRefOSTable[index]; break;
         case CLIMetadataTables.File: token.Data = FileTable[index]; break;
         case CLIMetadataTables.ExportedType: token.Data = ExportedTypeTable[index]; break;
         case CLIMetadataTables.ManifestResource: token.Data = ManifestResourceTable[index]; break;
         case CLIMetadataTables.NestedClass: token.Data = NestedClassTable[index]; break;
         case CLIMetadataTables.GenericParam: token.Data = GenericParamTable[index]; break;
         case CLIMetadataTables.MethodSpec: token.Data = MethodSpecTable[index]; break;
         case CLIMetadataTables.GenericParamConstraint: token.Data = GenericParamConstraintTable[index]; break;
         default: break;
     }
     return token;
 }