Exemplo n.º 1
0
        static unsafe string GetTypeRefName(IMetaDataImport mdi, uint token, out uint enclType)
        {
            enclType = 0;
            if (mdi == null)
            {
                return(null);
            }
            uint tkResolutionScope, chName;

            char[] nameBuf = null;
            int    hr      = mdi.GetTypeRefProps(token, out tkResolutionScope, IntPtr.Zero, 0, out chName);

            if (hr >= 0 && chName != 0)
            {
                nameBuf = new char[chName];

                fixed(char *p = &nameBuf[0])
                hr = mdi.GetTypeRefProps(token, out tkResolutionScope, new IntPtr(p), (uint)nameBuf.Length, out chName);
            }
            if (hr < 0)
            {
                return(null);
            }

            if ((tkResolutionScope >> 24) == (int)Table.TypeRef)
            {
                enclType = tkResolutionScope;
            }

            if (chName <= 1)
            {
                return(string.Empty);
            }
            return(new string(nameBuf, 0, (int)chName - 1));
        }
Exemplo n.º 2
0
        public unsafe void GetTypeRefProps(uint tr, out string szTypeRef, out uint resScope)
        {
            uint pchName, maxcbName = 50;

            byte[] buffer = new byte[2 * (maxcbName + 1)];

            importer.GetTypeRefProps(tr, out resScope, buffer, maxcbName, out pchName);
            if (pchName > maxcbName)
            {
                buffer = new byte[2 * (pchName + 1)];
                importer.GetTypeRefProps(tr, out resScope, buffer, pchName, out pchName);
            }
            szTypeRef = UnicodeEncoding.Unicode.GetString(buffer).Substring(0, (int)pchName - 1);
        }
Exemplo n.º 3
0
        public TypeRefProps GetTypeRefProps(uint typeRef)
        {
            TypeRefProps ret = new TypeRefProps();

            ret.TypeRef = typeRef;
            ret.Name    =
                Util.GetString(delegate(uint pStringLenght, out uint stringLenght, System.IntPtr pString) {
                metaData.GetTypeRefProps(
                    ret.TypeRef,
                    out ret.ResolutionScope,
                    pString, pStringLenght, out stringLenght
                    );
            });

            return(ret);
        }
Exemplo n.º 4
0
        public TypeRefProps GetTypeRefProps(uint typeToken)
        {
            TypeRefProps typeRefProps = new TypeRefProps();

            typeRefProps.Token = typeToken;
            typeRefProps.Name  =
                Util.GetString(delegate(uint pStringLenght, out uint stringLenght, System.IntPtr pString) {
                uint unused;
                metaData.GetTypeRefProps(typeRefProps.Token,
                                         out unused,
                                         pString, pStringLenght, out stringLenght                        // The string to get
                                         );
            });

            return(typeRefProps);
        }
Exemplo n.º 5
0
		public static unsafe uint GetTypeRefResolutionScope(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return 0;
			uint tkResolutionScope;
			int hr = mdi.GetTypeRefProps(token, new IntPtr(&tkResolutionScope), IntPtr.Zero, 0, IntPtr.Zero);
			return hr == 0 ? tkResolutionScope : 0;
		}
Exemplo n.º 6
0
		public static unsafe string GetTypeRefName(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return null;
			uint chName;
			char[] nameBuf = null;
			int hr = mdi.GetTypeRefProps(token, IntPtr.Zero, IntPtr.Zero, 0, new IntPtr(&chName));
			if (hr >= 0 && chName != 0) {
				nameBuf = new char[chName];
				fixed (char* p = &nameBuf[0])
					hr = mdi.GetTypeRefProps(token, IntPtr.Zero, new IntPtr(p), (uint)nameBuf.Length, new IntPtr(&chName));
			}
			if (hr < 0)
				return null;

			if (chName <= 1)
				return string.Empty;
			return new string(nameBuf, 0, (int)chName - 1);
		}
Exemplo n.º 7
0
		static unsafe string GetTypeRefName(IMetaDataImport mdi, uint token, out uint enclType) {
			enclType = 0;
			if (mdi == null)
				return null;
			uint tkResolutionScope, chName;
			char[] nameBuf = null;
			int hr = mdi.GetTypeRefProps(token, out tkResolutionScope, IntPtr.Zero, 0, out chName);
			if (hr >= 0 && chName != 0) {
				nameBuf = new char[chName];
				fixed (char* p = &nameBuf[0])
					hr = mdi.GetTypeRefProps(token, out tkResolutionScope, new IntPtr(p), (uint)nameBuf.Length, out chName);
			}
			if (hr < 0)
				return null;

			if ((tkResolutionScope >> 24) == (int)Table.TypeRef)
				enclType = tkResolutionScope;

			if (chName <= 1)
				return string.Empty;
			return new string(nameBuf, 0, (int)chName - 1);
		}
Exemplo n.º 8
0
        internal static IEnumerable GetTypeRefNames(string assemblyLocation)
        {
            IMetaDataDispenser metaDataDispenser = new MetaDataDispenser() as IMetaDataDispenser;

            if (metaDataDispenser == null)
            {
                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataDispenser"));
            }

            Guid   guidMetaDataImport = new Guid(Guids.IID_IMetaDataImport);
            object metaDataImportObj  = null;

            NativeMethods.ThrowOnFailure(metaDataDispenser.OpenScope(assemblyLocation, 0, ref guidMetaDataImport, out metaDataImportObj));
            IMetaDataImport metaDataImport = metaDataImportObj as IMetaDataImport;

            if (metaDataImport == null)
            {
                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataImport"));
            }

            IntPtr enumHandle = new IntPtr();

            uint[] typeRefs     = new uint[20];
            uint   typeRefCount = 0;

            try
            {
                do
                {
                    NativeMethods.ThrowOnFailure((metaDataImport.EnumTypeRefs(ref enumHandle, typeRefs, (uint)typeRefs.Length, ref typeRefCount)));
                    for (int typeRefIndex = 0; typeRefIndex < typeRefCount; typeRefIndex++)
                    {
                        IntPtr typeRefNamePtr = IntPtr.Zero;
                        uint   typeRefNameLength;
                        uint   resolutionScopeToken;

                        NativeMethods.ThrowOnFailure(metaDataImport.GetTypeRefProps(typeRefs[typeRefIndex], out resolutionScopeToken, typeRefNamePtr, 0, out typeRefNameLength));
                        if (typeRefNameLength > 0)
                        {
                            string typeRefName = String.Empty;
                            typeRefNamePtr = Marshal.AllocCoTaskMem((int)(2 * (typeRefNameLength + 1)));
                            try
                            {
                                NativeMethods.ThrowOnFailure(metaDataImport.GetTypeRefProps(typeRefs[typeRefIndex], out resolutionScopeToken, typeRefNamePtr, typeRefNameLength, out typeRefNameLength));
                            }
                            finally
                            {
                                typeRefName = Marshal.PtrToStringUni(typeRefNamePtr);
                                Marshal.FreeCoTaskMem(typeRefNamePtr);
                            }

                            IMetaDataAssemblyImport metaDataAssemblyImport = metaDataImportObj as IMetaDataAssemblyImport;
                            if (metaDataAssemblyImport == null)
                            {
                                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataAssemblyImport"));
                            }

                            if (TokenTypeFromToken(resolutionScopeToken) == MetadataTokenType.AssemblyRef)
                            {
                                AssemblyMetadata assemblyMetadata;
                                IntPtr           publicKeyOrToken = IntPtr.Zero;
                                uint             publicKeyOrTokenSize;
                                IntPtr           assemblyName = IntPtr.Zero;
                                uint             assemblyNameSize;
                                IntPtr           hashValueBlob = IntPtr.Zero;
                                uint             hashValueSize;
                                uint             assemblyRefFlags;

                                NativeMethods.ThrowOnFailure(metaDataAssemblyImport.GetAssemblyRefProps(resolutionScopeToken, out publicKeyOrToken, out publicKeyOrTokenSize, assemblyName, 0, out assemblyNameSize, out assemblyMetadata, out hashValueBlob, out hashValueSize, out assemblyRefFlags));

                                if (assemblyNameSize > 0)
                                {
                                    assemblyName = Marshal.AllocCoTaskMem((int)(2 * (assemblyNameSize + 1)));
                                }

                                if (assemblyMetadata.localeSize > 0)
                                {
                                    assemblyMetadata.locale = Marshal.AllocCoTaskMem((int)(2 * (assemblyMetadata.localeSize + 1)));
                                }

                                try
                                {
                                    if (assemblyNameSize > 0 || assemblyMetadata.localeSize > 0)
                                    {
                                        NativeMethods.ThrowOnFailure(metaDataAssemblyImport.GetAssemblyRefProps(resolutionScopeToken, out publicKeyOrToken, out publicKeyOrTokenSize, assemblyName, assemblyNameSize, out assemblyNameSize, out assemblyMetadata, out hashValueBlob, out hashValueSize, out assemblyRefFlags));
                                    }

                                    String publicKeyString = String.Empty;
                                    for (int pos = 0; pos < publicKeyOrTokenSize; pos++)
                                    {
                                        publicKeyString += String.Format("{0}", Marshal.ReadByte(publicKeyOrToken, pos).ToString("x2"));
                                    }

                                    yield return(String.Format("{0}, {1}, Version={2}.{3}.{4}.{5}, Culture={6}, PublicKeyToken={7}", typeRefName, Marshal.PtrToStringUni(assemblyName), assemblyMetadata.majorVersion, assemblyMetadata.minorVersion, assemblyMetadata.buildNumber, assemblyMetadata.revisionNumber, String.IsNullOrEmpty(Marshal.PtrToStringUni(assemblyMetadata.locale)) ? "neutral" : Marshal.PtrToStringUni(assemblyMetadata.locale), String.IsNullOrEmpty(publicKeyString) ? "null" : publicKeyString));
                                }
                                finally
                                {
                                    if (assemblyName != IntPtr.Zero && assemblyNameSize > 0)
                                    {
                                        Marshal.FreeCoTaskMem(assemblyName);
                                        assemblyName = IntPtr.Zero;
                                    }

                                    if (assemblyMetadata.locale != IntPtr.Zero && assemblyMetadata.localeSize > 0)
                                    {
                                        Marshal.FreeCoTaskMem(assemblyMetadata.locale);
                                        assemblyMetadata.locale = IntPtr.Zero;
                                    }
                                }
                            }
                        }
                    }
                }while (typeRefCount > 0);
            }
            finally
            {
                metaDataImport.CloseEnum(enumHandle);
            }
            yield break;
        }
        private static string ClassDerivesFrom(IMetaDataImport mdi, uint tk)
        {
            uint tkExtends;
            string name = null;

            mdi.GetTypeDefProps(tk, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, (IntPtr)(&tkExtends));
            if (!IsTokenNil(tkExtends))
            {
                if (TypeFromToken(tkExtends) == (uint)CorTokenType.mdtTypeDef)
                {
                    name = ClassGetName(mdi, tkExtends);
                }
                else
                {
                    uint chName;

                    mdi.GetTypeRefProps(tkExtends, IntPtr.Zero, IntPtr.Zero, 0, (IntPtr)(&chName));

                    char* szName = stackalloc char[(int)chName];

                    mdi.GetTypeRefProps(tkExtends, IntPtr.Zero, (IntPtr)szName, chName, (IntPtr)(&chName));
                    name = new string(szName);
                }
            }

            return name;
        }
Exemplo n.º 10
0
        internal static IEnumerable GetTypeRefNames(string assemblyLocation)
        {
            IMetaDataDispenser iteratorVariable0 = new MetaDataDispenser() as IMetaDataDispenser;

            if (iteratorVariable0 == null)
            {
                throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataDispenser"));
            }
            Guid   riid    = new Guid("7DAC8207-D3AE-4c75-9B67-92801A497D44");
            object unknown = null;

            System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable0.OpenScope(assemblyLocation, 0, ref riid, out unknown));
            IMetaDataImport iteratorVariable3 = unknown as IMetaDataImport;

            if (iteratorVariable3 == null)
            {
                throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataImport"));
            }
            IntPtr enumHandle = new IntPtr();

            uint[] rTypeRefs = new uint[20];
            uint   typeRefs  = 0;

            do
            {
                System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.EnumTypeRefs(ref enumHandle, rTypeRefs, (uint)rTypeRefs.Length, ref typeRefs));
                for (int j = 0; j < typeRefs; j++)
                {
                    uint   iteratorVariable10;
                    uint   iteratorVariable9;
                    IntPtr zero = IntPtr.Zero;
                    System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.GetTypeRefProps(rTypeRefs[j], out iteratorVariable10, zero, 0, out iteratorVariable9));
                    if (iteratorVariable9 > 0)
                    {
                        string iteratorVariable11 = string.Empty;
                        zero = Marshal.AllocCoTaskMem((int)(2 * (iteratorVariable9 + 1)));
                        try
                        {
                            System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.GetTypeRefProps(rTypeRefs[j], out iteratorVariable10, zero, iteratorVariable9, out iteratorVariable9));
                        }
                        finally
                        {
                            iteratorVariable11 = Marshal.PtrToStringUni(zero);
                            Marshal.FreeCoTaskMem(zero);
                        }
                        IMetaDataAssemblyImport iteratorVariable12 = unknown as IMetaDataAssemblyImport;
                        if (iteratorVariable12 == null)
                        {
                            throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataAssemblyImport"));
                        }
                        if (TokenTypeFromToken(iteratorVariable10) == MetadataTokenType.AssemblyRef)
                        {
                            uint             iteratorVariable20;
                            uint             iteratorVariable19;
                            uint             iteratorVariable17;
                            uint             iteratorVariable15;
                            AssemblyMetadata iteratorVariable13;
                            IntPtr           publicKeyOrToken = IntPtr.Zero;
                            IntPtr           assemblyName     = IntPtr.Zero;
                            IntPtr           hashValueBlob    = IntPtr.Zero;
                            System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable12.GetAssemblyRefProps(iteratorVariable10, out publicKeyOrToken, out iteratorVariable15, assemblyName, 0, out iteratorVariable17, out iteratorVariable13, out hashValueBlob, out iteratorVariable19, out iteratorVariable20));
                            if (iteratorVariable17 > 0)
                            {
                                assemblyName = Marshal.AllocCoTaskMem((int)(2 * (iteratorVariable17 + 1)));
                            }
                            if (iteratorVariable13.localeSize > 0)
                            {
                                iteratorVariable13.locale = Marshal.AllocCoTaskMem((int)(2 * (iteratorVariable13.localeSize + 1)));
                            }
                            if ((iteratorVariable17 > 0) || (iteratorVariable13.localeSize > 0))
                            {
                                System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable12.GetAssemblyRefProps(iteratorVariable10, out publicKeyOrToken, out iteratorVariable15, assemblyName, iteratorVariable17, out iteratorVariable17, out iteratorVariable13, out hashValueBlob, out iteratorVariable19, out iteratorVariable20));
                            }
                            string iteratorVariable21 = string.Empty;
                            for (int k = 0; k < iteratorVariable15; k++)
                            {
                                iteratorVariable21 = iteratorVariable21 + string.Format("{0}", Marshal.ReadByte(publicKeyOrToken, k).ToString("x2"));
                            }
                            yield return(string.Format("{0}, {1}, Version={2}.{3}.{4}.{5}, Culture={6}, PublicKeyToken={7}", new object[] { iteratorVariable11, Marshal.PtrToStringUni(assemblyName), iteratorVariable13.majorVersion, iteratorVariable13.minorVersion, iteratorVariable13.buildNumber, iteratorVariable13.revisionNumber, string.IsNullOrEmpty(Marshal.PtrToStringUni(iteratorVariable13.locale)) ? "neutral" : Marshal.PtrToStringUni(iteratorVariable13.locale), string.IsNullOrEmpty(iteratorVariable21) ? "null" : iteratorVariable21 }));
                        }
                    }
                }
            }while (typeRefs > 0);
        }