The Labs \ Source Viewer \ SSCLI \ System.Reflection \ MetadataFileAttributes

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. using System;
  16. using System.Reflection;
  17. using System.Globalization;
  18. using System.Threading;
  19. using System.Diagnostics;
  20. using System.Security.Permissions;
  21. using System.Collections;
  22. using System.Runtime.CompilerServices;
  23. using System.Security;
  24. using System.Text;
  25. using System.Reflection.Emit;
  26. using System.Runtime.InteropServices;
  27. using System.Configuration.Assemblies;
  28. namespace System.Reflection
  29. {
  30.     [Serializable()]
  31.     internal enum CorCallingConvention : byte
  32.     {
  33.         Default = 0,
  34.         Vararg = 5,
  35.         Field = 6,
  36.         LocalSig = 7,
  37.         Property = 8,
  38.         Unmanaged = 9,
  39.         GenericInstance = 10
  40.     }
  41.    
  42.     [Serializable()]
  43.     internal enum CorElementType : byte
  44.     {
  45.         End = 0,
  46.         Void = 1,
  47.         Boolean = 2,
  48.         Char = 3,
  49.         I1 = 4,
  50.         U1 = 5,
  51.         I2 = 6,
  52.         U2 = 7,
  53.         I4 = 8,
  54.         U4 = 9,
  55.         I8 = 10,
  56.         U8 = 11,
  57.         R4 = 12,
  58.         R8 = 13,
  59.         String = 14,
  60.         Ptr = 15,
  61.         ByRef = 16,
  62.         ValueType = 17,
  63.         Class = 18,
  64.         Array = 20,
  65.         TypedByRef = 22,
  66.         I = 24,
  67.         U = 25,
  68.         FnPtr = 27,
  69.         Object = 28,
  70.         SzArray = 29,
  71.         CModReqd = 31,
  72.         CModOpt = 32,
  73.         Internal = 33,
  74.         Modifier = 64,
  75.         Sentinel = 65,
  76.         Pinned = 69
  77.     }
  78.    
  79.     [Serializable(), Flags()]
  80.     internal enum MetadataFileAttributes
  81.     {
  82.         ContainsMetadata = 0,
  83.         ContainsNoMetadata = 1
  84.     }
  85.    
  86.    
  87.     [Serializable(), Flags()]
  88.     internal enum ManifestResourceAttributes
  89.     {
  90.         VisibilityMask = 7,
  91.         Public = 1,
  92.         Private = 2
  93.     }
  94.    
  95.    
  96.     [Serializable(), Flags()]
  97.     internal enum MdSigCallingConvention : byte
  98.     {
  99.         CallConvMask = 15,
  100.         // Calling convention is bottom 4 bits
  101.         Default = 0,
  102.         C = 1,
  103.         StdCall = 2,
  104.         ThisCall = 3,
  105.         FastCall = 4,
  106.         Vararg = 5,
  107.         Field = 6,
  108.         LoclaSig = 7,
  109.         Property = 8,
  110.         Unmgd = 9,
  111.         GenericInst = 10,
  112.         // generic method instantiation
  113.         Generic = 16,
  114.         // Generic method sig with explicit number of type arguments (precedes ordinary parameter count)
  115.         HasThis = 32,
  116.         // Top bit indicates a 'this' parameter
  117.         ExplicitThis = 64
  118.         // This parameter is explicitly in the signature
  119.     }
  120.    
  121.    
  122.     [Serializable(), Flags()]
  123.     internal enum PInvokeAttributes
  124.     {
  125.         NoMangle = 1,
  126.        
  127.        
  128.         CharSetMask = 6,
  129.         CharSetNotSpec = 0,
  130.         CharSetAnsi = 2,
  131.         CharSetUnicode = 4,
  132.         CharSetAuto = 6,
  133.        
  134.        
  135.         BestFitUseAssem = 0,
  136.         BestFitEnabled = 16,
  137.         BestFitDisabled = 32,
  138.         BestFitMask = 48,
  139.        
  140.         ThrowOnUnmappableCharUseAssem = 0,
  141.         ThrowOnUnmappableCharEnabled = 4096,
  142.         ThrowOnUnmappableCharDisabled = 8192,
  143.         ThrowOnUnmappableCharMask = 12288,
  144.        
  145.         SupportsLastError = 64,
  146.        
  147.         CallConvMask = 1792,
  148.         CallConvWinapi = 256,
  149.         CallConvCdecl = 512,
  150.         CallConvStdcall = 768,
  151.         CallConvThiscall = 1024,
  152.         CallConvFastcall = 1280,
  153.        
  154.         MaxValue = 65535
  155.     }
  156.    
  157.    
  158.     [Serializable(), Flags()]
  159.     internal enum MethodSemanticsAttributes
  160.     {
  161.         Setter = 1,
  162.         Getter = 2,
  163.         Other = 4,
  164.         AddOn = 8,
  165.         RemoveOn = 16,
  166.         Fire = 32
  167.     }
  168.    
  169.    
  170.     [Serializable(), Flags()]
  171.     internal enum DeclSecurityAttributes
  172.     {
  173.         ActionMask = 31,
  174.         ActionNil = 0,
  175.         Request = 1,
  176.         Demand = 2,
  177.         Assert = 3,
  178.         Deny = 4,
  179.         PermitOnly = 5,
  180.         LinktimeCheck = 6,
  181.         InheritanceCheck = 7,
  182.         RequestMinimum = 8,
  183.         RequestOptional = 9,
  184.         RequestRefuse = 10,
  185.         PrejitGrant = 11,
  186.         PrejitDenied = 12,
  187.         NonCasDemand = 13,
  188.         NonCasLinkDemand = 14,
  189.         NonCasInheritance = 15,
  190.         MaximumValue = 15
  191.     }
  192.    
  193.    
  194.     [Serializable()]
  195.     internal enum MetadataTokenType
  196.     {
  197.         Module = 0,
  198.         TypeRef = 16777216,
  199.         TypeDef = 33554432,
  200.         FieldDef = 67108864,
  201.         MethodDef = 100663296,
  202.         ParamDef = 134217728,
  203.         InterfaceImpl = 150994944,
  204.         MemberRef = 167772160,
  205.         CustomAttribute = 201326592,
  206.         Permission = 234881024,
  207.         Signature = 285212672,
  208.         Event = 335544320,
  209.         Property = 385875968,
  210.         ModuleRef = 436207616,
  211.         TypeSpec = 452984832,
  212.         Assembly = 536870912,
  213.         AssemblyRef = 587202560,
  214.         File = 637534208,
  215.         ExportedType = 654311424,
  216.         ManifestResource = 671088640,
  217.         GenericPar = 704643072,
  218.         MethodSpec = 721420288,
  219.         String = 1879048192,
  220.         Name = 1895825408,
  221.         BaseType = 1912602624,
  222.         Invalid = 2147483647
  223.     }
  224.    
  225.    
  226.     [Serializable()]
  227.     internal enum MetadataCodedTokenType
  228.     {
  229.         TypeDefOrRef,
  230.         HasConstant,
  231.         HasCustomAttribute,
  232.         HasFieldMarshal,
  233.         HasDeclSecurity,
  234.         MemberRefParent,
  235.         HasSemantic,
  236.         MethodDefOrRef,
  237.         MemberForwarded,
  238.         Implementation,
  239.         CustomAttributeType,
  240.         ResolutionScope,
  241.         TypeOrMethodDef
  242.     }
  243.    
  244.    
  245.     [Serializable()]
  246.     internal enum MetadataTable
  247.     {
  248.         Module,
  249.         TypeRef,
  250.         TypeDef,
  251.         FieldPtr,
  252.         Field,
  253.         MethodPtr,
  254.         Method,
  255.         ParamPtr,
  256.         Param,
  257.         InterfaceImpl,
  258.         MemberRef,
  259.         Constant,
  260.         CustomAttribute,
  261.         FieldMarshal,
  262.         DeclSecurity,
  263.         ClassLayout,
  264.         FieldLayout,
  265.         StandAloneSig,
  266.         EventMap,
  267.         EventPtr,
  268.         Event,
  269.         PropertyMap,
  270.         PropertyPtr,
  271.         Property,
  272.         MethodSemantics,
  273.         MethodImpl,
  274.         ModuleRef,
  275.         TypeSpec,
  276.         ImplMap,
  277.         FieldRVA,
  278.         ENCLog,
  279.         ENCMap,
  280.         Assembly,
  281.         AssemblyProcessor,
  282.         AssemblyOS,
  283.         AssemblyRef,
  284.         AssemblyRefProcessor,
  285.         AssemblyRefOS,
  286.         File,
  287.         ExportedType,
  288.         ManifestResource,
  289.         NestedClass,
  290.         GenericParam,
  291.         MethodSpec,
  292.         GenericParamConstraint,
  293.         Max
  294.     }
  295.    
  296.    
  297.     [Serializable()]
  298.     internal enum MetadataColumnType
  299.     {
  300.         Module,
  301.         TypeRef,
  302.         TypeDef,
  303.         FieldPtr,
  304.         Field,
  305.         MethodPtr,
  306.         Method,
  307.         ParamPtr,
  308.         Param,
  309.         InterfaceImpl,
  310.         MemberRef,
  311.         Constant,
  312.         CustomAttribute,
  313.         FieldMarshal,
  314.         DeclSecurity,
  315.         ClassLayout,
  316.         FieldLayout,
  317.         StandAloneSig,
  318.         EventMap,
  319.         EventPtr,
  320.         Event,
  321.         PropertyMap,
  322.         PropertyPtr,
  323.         Property,
  324.         MethodSemantics,
  325.         MethodImpl,
  326.         ModuleRef,
  327.         TypeSpec,
  328.         ImplMap,
  329.         FieldRVA,
  330.         ENCLog,
  331.         ENCMap,
  332.         Assembly,
  333.         AssemblyProcessor,
  334.         AssemblyOS,
  335.         AssemblyRef,
  336.         AssemblyRefProcessor,
  337.         AssemblyRefOS,
  338.         File,
  339.         ExportedType,
  340.         ManifestResource,
  341.         NestedClass,
  342.         GenericParam,
  343.         MethodSpec,
  344.         GenericParamConstraint,
  345.         TableIdMax = 63,
  346.         CodedToken = 64,
  347.         TypeDefOrRef,
  348.         HasConstant,
  349.         HasCustomAttribute,
  350.         HasFieldMarshal,
  351.         HasDeclSecurity,
  352.         MemberRefParent,
  353.         HasSemantic,
  354.         MethodDefOrRef,
  355.         MemberForwarded,
  356.         Implementation,
  357.         CustomAttributeType,
  358.         ResolutionScope,
  359.         TypeOrMethodDef,
  360.         CodedTokenMax = 95,
  361.         Short = 96,
  362.         UShort = 97,
  363.         Long = 98,
  364.         ULong = 99,
  365.         Byte = 100,
  366.         StringHeap = 101,
  367.         GuidHeap = 102,
  368.         BlobHeap = 103
  369.     }
  370.    
  371.    
  372.     [Serializable()]
  373.     internal enum MetadataColumn
  374.     {
  375.         ModuleGeneration = 0,
  376.         ModuleName = 1,
  377.         ModuleMvid = 2,
  378.         ModuleEncId = 3,
  379.         ModuleEncBaseId = 4,
  380.         TypeRefResolutionScope = 0,
  381.         TypeRefName = 1,
  382.         TypeRefNamespace = 2,
  383.         TypeDefFlags = 0,
  384.         TypeDefName = 1,
  385.         TypeDefNamespace = 2,
  386.         TypeDefExtends = 3,
  387.         TypeDefFieldList = 4,
  388.         TypeDefMethodList = 5,
  389.         FieldPtrField = 0,
  390.         FieldFlags = 0,
  391.         FieldName = 1,
  392.         FieldSignature = 2,
  393.         MethodPtrMethod = 0,
  394.         MethodRVA = 0,
  395.         MethodImplFlags = 1,
  396.         MethodFlags = 2,
  397.         MethodName = 3,
  398.         MethodSignature = 4,
  399.         MethodParamList = 5,
  400.         ParamPtrParam = 0,
  401.         ParamFlags = 0,
  402.         ParamSequence = 1,
  403.         ParamName = 2,
  404.         InterfaceImplClass = 0,
  405.         InterfaceImplInterface = 1,
  406.         MemberRefClass = 0,
  407.         MemberRefName = 1,
  408.         MemberRefSignature = 2,
  409.         ConstantType = 0,
  410.         ConstantParent = 1,
  411.         ConstantValue = 2,
  412.         CustomAttributeParent = 0,
  413.         CustomAttributeType = 1,
  414.         CustomAttributeArgument = 2,
  415.         FieldMarshalParent = 0,
  416.         FieldMarshalNativeType = 1,
  417.         DeclSecurityAction = 0,
  418.         DeclSecurityParent = 1,
  419.         DeclSecurityPermissionSet = 2,
  420.         ClassLayoutPackingSize = 0,
  421.         ClassLayoutClassSize = 1,
  422.         ClassLayoutParent = 2,
  423.         FieldLayoutOffSet = 0,
  424.         FieldLayoutField = 1,
  425.         StandAloneSigSignature = 0,
  426.         EventMapParent = 0,
  427.         EventMapEventList = 1,
  428.         EventPtrEvent = 0,
  429.         EventEventFlags = 0,
  430.         EventName = 1,
  431.         EventEventType = 2,
  432.         PropertyMapParent = 0,
  433.         PropertyMapPropertyList = 1,
  434.         PropertyPtrProperty = 0,
  435.         PropertyPropFlags = 0,
  436.         PropertyName = 1,
  437.         PropertyType = 2,
  438.         MethodSemanticsSemantic = 0,
  439.         MethodSemanticsMethod = 1,
  440.         MethodSemanticsAssociation = 2,
  441.         MethodImplClass = 0,
  442.         MethodImplMethodBody = 1,
  443.         MethodImplMethodDeclaration = 2,
  444.         ModuleRefName = 0,
  445.         TypeSpecSignature = 0,
  446.         ImplMapMappingFlags = 0,
  447.         ImplMapMemberForwarded = 1,
  448.         ImplMapImportName = 2,
  449.         ImplMapImportScope = 3,
  450.         FieldRVARVA = 0,
  451.         FieldRVAField = 1,
  452.         ENCLogToken = 0,
  453.         ENCLogFuncCode = 1,
  454.         ENCMapToken = 0,
  455.         AssemblyHashAlgId = 0,
  456.         AssemblyMajorVersion = 1,
  457.         AssemblyMinorVersion = 2,
  458.         AssemblyBuildNumber = 3,
  459.         AssemblyRevisionNumber = 4,
  460.         AssemblyFlags = 5,
  461.         AssemblyPublicKey = 6,
  462.         AssemblyName = 7,
  463.         AssemblyLocale = 8,
  464.         AssemblyProcessorProcessor = 0,
  465.         AssemblyOSOSPlatformId = 0,
  466.         AssemblyOSOSMajorVersion = 1,
  467.         AssemblyOSOSMinorVersion = 2,
  468.         AssemblyRefMajorVersion = 0,
  469.         AssemblyRefMinorVersion = 1,
  470.         AssemblyRefBuildNumber = 2,
  471.         AssemblyRefRevisionNumber = 3,
  472.         AssemblyRefFlags = 4,
  473.         AssemblyRefPublicKeyOrToken = 5,
  474.         AssemblyRefName = 6,
  475.         AssemblyRefLocale = 7,
  476.         AssemblyRefHashValue = 8,
  477.         AssemblyRefProcessorProcessor = 0,
  478.         AssemblyRefProcessorAssemblyRef = 1,
  479.         AssemblyRefOSOSPlatformId = 0,
  480.         AssemblyRefOSOSMajorVersion = 1,
  481.         AssemblyRefOSOSMinorVersion = 2,
  482.         AssemblyRefOSAssemblyRef = 3,
  483.         FileFlags = 0,
  484.         FileName = 1,
  485.         FileHashValue = 2,
  486.         ExportedTypeFlags = 0,
  487.         ExportedTypeTypeDefId = 1,
  488.         ExportedTypeTypeName = 2,
  489.         ExportedTypeTypeNamespace = 3,
  490.         ExportedTypeImplementation = 4,
  491.         ManifestResourceOffset = 0,
  492.         ManifestResourceFlags = 1,
  493.         ManifestResourceName = 2,
  494.         ManifestResourceImplementation = 3,
  495.         NestedClassNestedClass = 0,
  496.         NestedClassEnclosingClass = 1,
  497.         GenericParamNumber = 0,
  498.         GenericParamFlags = 1,
  499.         GenericParamOwner = 2,
  500.         GenericParamName = 3,
  501.         GenericParamKind = 4,
  502.         GenericParamDeprecatedConstraint = 5,
  503.         MethodSpecMethod = 0,
  504.         MethodSpecInstantiation = 1,
  505.         GenericParamConstraintOwner = 0,
  506.         GenericParamConstraintConstraint = 1
  507.     }
  508.    
  509.    
  510.     [Serializable()]
  511.     internal struct ConstArray
  512.     {
  513.         public IntPtr Signature {
  514.             get { return m_constArray; }
  515.         }
  516.         public int Length {
  517.             get { return m_length; }
  518.         }
  519.         public byte this[int index]
  520.         {
  521.             get {
  522.                 if (index < 0 || index > m_length)
  523.                     throw new IndexOutOfRangeException();
  524.                
  525.                 unsafe {
  526.                     return ((byte*)m_constArray.ToPointer())[index];
  527.                 }
  528.             }
  529.         }
  530.        
  531.         internal int m_length;
  532.         internal IntPtr m_constArray;
  533.     }
  534.    
  535.     [Serializable()]
  536.     internal struct MetadataToken
  537.     {
  538.         #region Implicit Cast Operators
  539.         public static implicit operator int(MetadataToken token)
  540.         {
  541.             return token.Value;
  542.         }
  543.         public static implicit operator MetadataToken(int token)
  544.         {
  545.             return new MetadataToken(token);
  546.         }
  547.         #endregion
  548.        
  549.         #region Public Static Members
  550.         public static bool IsTokenOfType(int token, params MetadataTokenType[] types)
  551.         {
  552.             for (int i = 0; i < types.Length; i++) {
  553.                 if ((int)(token & 4278190080u) == (int)types[i])
  554.                     return true;
  555.             }
  556.            
  557.             return false;
  558.         }
  559.        
  560.         public static bool IsNullToken(int token)
  561.         {
  562.             return (token & 16777215) == 0;
  563.         }
  564.         #endregion
  565.        
  566.         #region Public Data Members
  567.         public int Value;
  568.         #endregion
  569.        
  570.         #region Constructor
  571.         public MetadataToken(int token)
  572.         {
  573.             Value = token;
  574.         }
  575.         #endregion
  576.        
  577.         #region Public Members
  578.         public bool IsGlobalTypeDefToken {
  579.             get { return (Value == 33554433); }
  580.         }
  581.         public MetadataTokenType TokenType {
  582.             get { return (MetadataTokenType)(Value & 4278190080u); }
  583.         }
  584.         public bool IsTypeRef {
  585.             get { return TokenType == MetadataTokenType.TypeRef; }
  586.         }
  587.         public bool IsTypeDef {
  588.             get { return TokenType == MetadataTokenType.TypeDef; }
  589.         }
  590.         public bool IsFieldDef {
  591.             get { return TokenType == MetadataTokenType.FieldDef; }
  592.         }
  593.         public bool IsMethodDef {
  594.             get { return TokenType == MetadataTokenType.MethodDef; }
  595.         }
  596.         public bool IsMemberRef {
  597.             get { return TokenType == MetadataTokenType.MemberRef; }
  598.         }
  599.         public bool IsEvent {
  600.             get { return TokenType == MetadataTokenType.Event; }
  601.         }
  602.         public bool IsProperty {
  603.             get { return TokenType == MetadataTokenType.Property; }
  604.         }
  605.         public bool IsParamDef {
  606.             get { return TokenType == MetadataTokenType.ParamDef; }
  607.         }
  608.         public bool IsTypeSpec {
  609.             get { return TokenType == MetadataTokenType.TypeSpec; }
  610.         }
  611.         public bool IsMethodSpec {
  612.             get { return TokenType == MetadataTokenType.MethodSpec; }
  613.         }
  614.         public bool IsString {
  615.             get { return TokenType == MetadataTokenType.String; }
  616.         }
  617.         public bool IsSignature {
  618.             get { return TokenType == MetadataTokenType.Signature; }
  619.         }
  620.         #endregion
  621.        
  622.         #region Object Overrides
  623.         public override string ToString()
  624.         {
  625.             return String.Format(CultureInfo.InvariantCulture, "0x{0:x8}", Value);
  626.         }
  627.         #endregion
  628.     }
  629.    
  630.    
  631.     [Serializable()]
  632.     internal struct MetadataFieldOffset
  633.     {
  634.         public int FieldToken;
  635.         public int Offset;
  636.     }
  637.    
  638.    
  639.     [Serializable()]
  640.     static internal class MetadataArgs
  641.     {
  642.         #region Public Static Members
  643.         [Serializable(), StructLayout(LayoutKind.Auto)]
  644.         [System.Runtime.InteropServices.ComVisible(true)]
  645.         public struct SkipAddresses
  646.         {
  647.             public string String;
  648.             public int[] Int32Array;
  649.             public byte[] ByteArray;
  650.             public MetadataFieldOffset[] MetadataFieldOffsetArray;
  651.             public int Int32;
  652.             public TypeAttributes TypeAttributes;
  653.             public MethodAttributes MethodAttributes;
  654.             public PropertyAttributes PropertyAttributes;
  655.             public MethodImplAttributes MethodImplAttributes;
  656.             public ParameterAttributes ParameterAttributes;
  657.             public FieldAttributes FieldAttributes;
  658.             public EventAttributes EventAttributes;
  659.             public MetadataColumnType MetadataColumnType;
  660.             public PInvokeAttributes PInvokeAttributes;
  661.             public MethodSemanticsAttributes MethodSemanticsAttributes;
  662.             public DeclSecurityAttributes DeclSecurityAttributes;
  663.             public CorElementType CorElementType;
  664.             public ConstArray ConstArray;
  665.             public Guid Guid;
  666.         }
  667.         public static SkipAddresses Skip = new SkipAddresses();
  668.         #endregion
  669.     }
  670.    
  671.     internal struct MetadataImport
  672.     {
  673.         #region Private Data Members
  674.         private IntPtr m_metadataImport2;
  675.         #endregion
  676.        
  677.         #region Make the struct work kind of crap
  678.         static internal readonly MetadataImport EmptyImport = new MetadataImport((IntPtr)0);
  679.        
  680.         public override int GetHashCode()
  681.         {
  682.             return m_metadataImport2.GetHashCode();
  683.         }
  684.        
  685.         public override bool Equals(object obj)
  686.         {
  687.             if (!(obj is MetadataImport))
  688.                 return false;
  689.             return Equals((MetadataImport)obj);
  690.         }
  691.        
  692.         internal bool Equals(MetadataImport import)
  693.         {
  694.             return import.m_metadataImport2 == m_metadataImport2;
  695.         }
  696.        
  697.         #endregion
  698.        
  699.         #region Static Members
  700.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  701.         private static extern void _GetMarshalAs(IntPtr pNativeType, int cNativeType, out int unmanagedType, out int safeArraySubType, out string safeArrayUserDefinedSubType, out int arraySubType, out int sizeParamIndex, out int sizeConst, out string marshalType, out string marshalCookie,
  702.         out int iidParamIndex);
  703.         static internal void GetMarshalAs(ConstArray nativeType, out UnmanagedType unmanagedType, out VarEnum safeArraySubType, out string safeArrayUserDefinedSubType, out UnmanagedType arraySubType, out int sizeParamIndex, out int sizeConst, out string marshalType, out string marshalCookie, out int iidParamIndex
  704.         )
  705.         {
  706.             int _unmanagedType;
  707.             int _safeArraySubType;
  708.             int _arraySubType;
  709.            
  710.             _GetMarshalAs(nativeType.Signature, (int)nativeType.Length, out _unmanagedType, out _safeArraySubType, out safeArrayUserDefinedSubType, out _arraySubType, out sizeParamIndex, out sizeConst, out marshalType, out marshalCookie,
  711.             out iidParamIndex);
  712.            
  713.             unmanagedType = (UnmanagedType)_unmanagedType;
  714.             safeArraySubType = (VarEnum)_safeArraySubType;
  715.             arraySubType = (UnmanagedType)_arraySubType;
  716.         }
  717.         #endregion
  718.        
  719.         #region Internal Static Members
  720.         static internal Guid IID_IMetaDataImport = new Guid(3530420970u, 32600, 16771, 134, 190, 48, 174, 41, 167, 93,
  721.         141);
  722.         static internal Guid IID_IMetaDataAssemblyImport = new Guid(3999418123u, 59723, 16974, 155, 124, 47, 0, 201, 36, 159,
  723.         147);
  724.         static internal Guid IID_IMetaDataTables = new Guid(3639966123u, 16429, 19342, 130, 217, 93, 99, 177, 6, 92,
  725.         104);
  726.        
  727.         static internal void ThrowError(int hResult)
  728.         {
  729.             throw new MetadataException(hResult);
  730.         }
  731.         #endregion
  732.        
  733.         #region Constructor
  734.         internal MetadataImport(IntPtr metadataImport2)
  735.         {
  736.             m_metadataImport2 = metadataImport2;
  737.         }
  738.         #endregion
  739.        
  740.         #region FCalls
  741.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  742.         unsafe private static extern void _Enum(IntPtr scope, out MetadataArgs.SkipAddresses skipAddresses, int type, int parent, int* result, int count);
  743.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  744.         private static extern int _EnumCount(IntPtr scope, out MetadataArgs.SkipAddresses skipAddresses, int type, int parent, out int count);
  745.        
  746.         unsafe public void Enum(int type, int parent, int* result, int count)
  747.         {
  748.             _Enum(m_metadataImport2, out MetadataArgs.Skip, type, parent, result, count);
  749.         }
  750.         public int EnumCount(int type, int parent)
  751.         {
  752.             int count = 0;
  753.             _EnumCount(m_metadataImport2, out MetadataArgs.Skip, type, parent, out count);
  754.             return count;
  755.         }
  756.        
  757.         unsafe public void EnumNestedTypes(int mdTypeDef, int* result, int count)
  758.         {
  759.             Enum((int)MetadataTokenType.TypeDef, mdTypeDef, result, count);
  760.         }
  761.         public int EnumNestedTypesCount(int mdTypeDef)
  762.         {
  763.             return EnumCount((int)MetadataTokenType.TypeDef, mdTypeDef);
  764.         }
  765.        
  766.         unsafe public void EnumCustomAttributes(int mdToken, int* result, int count)
  767.         {
  768.             Enum((int)MetadataTokenType.CustomAttribute, mdToken, result, count);
  769.         }
  770.         public int EnumCustomAttributesCount(int mdToken)
  771.         {
  772.             return EnumCount((int)MetadataTokenType.CustomAttribute, mdToken);
  773.         }
  774.        
  775.         unsafe public void EnumParams(int mdMethodDef, int* result, int count)
  776.         {
  777.             Enum((int)MetadataTokenType.ParamDef, mdMethodDef, result, count);
  778.         }
  779.         public int EnumParamsCount(int mdMethodDef)
  780.         {
  781.             return EnumCount((int)MetadataTokenType.ParamDef, mdMethodDef);
  782.         }
  783.        
  784.         unsafe public void GetAssociates(int mdPropEvent, AssociateRecord* result, int count)
  785.         {
  786.             int* temp = stackalloc int[count * 2];
  787.             Enum((int)MetadataTokenType.MethodDef, mdPropEvent, temp, count);
  788.             for (int i = 0; i < count; i++) {
  789.                 result[i].MethodDefToken = temp[i * 2];
  790.                 result[i].Semantics = (MethodSemanticsAttributes)temp[i * 2 + 1];
  791.             }
  792.         }
  793.         public int GetAssociatesCount(int mdPropEvent)
  794.         {
  795.             return EnumCount((int)MetadataTokenType.MethodDef, mdPropEvent);
  796.         }
  797.        
  798.         unsafe public void EnumFields(int mdTypeDef, int* result, int count)
  799.         {
  800.             Enum((int)MetadataTokenType.FieldDef, mdTypeDef, result, count);
  801.         }
  802.         public int EnumFieldsCount(int mdTypeDef)
  803.         {
  804.             return EnumCount((int)MetadataTokenType.FieldDef, mdTypeDef);
  805.         }
  806.        
  807.         unsafe public void EnumProperties(int mdTypeDef, int* result, int count)
  808.         {
  809.             Enum((int)MetadataTokenType.Property, mdTypeDef, result, count);
  810.         }
  811.         public int EnumPropertiesCount(int mdTypeDef)
  812.         {
  813.             return EnumCount((int)MetadataTokenType.Property, mdTypeDef);
  814.         }
  815.        
  816.         unsafe public void EnumEvents(int mdTypeDef, int* result, int count)
  817.         {
  818.             Enum((int)MetadataTokenType.Event, mdTypeDef, result, count);
  819.         }
  820.         public int EnumEventsCount(int mdTypeDef)
  821.         {
  822.             return EnumCount((int)MetadataTokenType.Event, mdTypeDef);
  823.         }
  824.        
  825.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  826.         private static extern void _GetDefaultValue(IntPtr scope, out MetadataArgs.SkipAddresses skipAddresses, int mdToken, out long value, out int length, out int corElementType);
  827.         public void GetDefaultValue(int mdToken, out long value, out int length, out CorElementType corElementType)
  828.         {
  829.             int _corElementType;
  830.             _GetDefaultValue(m_metadataImport2, out MetadataArgs.Skip, mdToken, out value, out length, out _corElementType);
  831.             corElementType = (CorElementType)_corElementType;
  832.         }
  833.        
  834.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  835.         unsafe private static extern void _GetUserString(IntPtr scope, out MetadataArgs.SkipAddresses skipAddresses, int mdToken, void** name, out int length);
  836.         unsafe public string GetUserString(int mdToken)
  837.         {
  838.         }
  839.         void* name;
  840.         int length;
  841.         MetadataImport(m_metadataImport2 m_metadataImport2, out MetadataArgs.Skip Skip, mdToken mdToken);
  842.     }
  843. }

Developer Fusion