Example #1
0
 public static unsafe AssemblyHashAlgorithm? GetAssemblyHashAlgorithm(IMetaDataAssemblyImport mdai, uint token)
 {
     if (mdai == null)
         return null;
     uint ulHashAlgId;
     int hr = mdai.GetAssemblyProps(token, IntPtr.Zero, IntPtr.Zero, new IntPtr(&ulHashAlgId), IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
     if (hr != 0)
         return null;
     return (AssemblyHashAlgorithm)ulHashAlgId;
 }
Example #2
0
 public static unsafe AssemblyAttributes? GetAssemblyAttributes(IMetaDataAssemblyImport mdai, uint token)
 {
     if (mdai == null)
         return null;
     uint dwAssemblyFlags;
     int hr = mdai.GetAssemblyProps(token, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, new IntPtr(&dwAssemblyFlags));
     if (hr != 0)
         return null;
     return (AssemblyAttributes)dwAssemblyFlags;
 }
        private const int GENMAN_ENUM_TOKEN_BUF_SIZE = 16; // 128 from genman seems too big.

        /// <summary>
        /// Construct an instance for a source file.
        /// </summary>
        /// <param name="sourceFile">The assembly.</param>
        internal AssemblyInformation(string sourceFile)
        {
            // Extra checks for PInvoke-destined data.
            ErrorUtilities.VerifyThrowArgumentNull(sourceFile, "sourceFile");
            _sourceFile = sourceFile;

            // Create the metadata dispenser and open scope on the source file.
            _metadataDispenser = (IMetaDataDispenser)new CorMetaDataDispenser();
            _assemblyImport = (IMetaDataAssemblyImport)_metadataDispenser.OpenScope(sourceFile, 0, ref s_importerGuid);
        }
Example #4
0
 private MetadataReader(string path)
 {
     _path = path;
     // Create the metadata dispenser and open scope on the source file.
     _metaDispenser = (IMetaDataDispenser)new CorMetaDataDispenser();
     object obj;
     int hr = _metaDispenser.OpenScope(path, 0, ref s_importerGuid, out obj);
     if (hr == 0)
         _assemblyImport = (IMetaDataAssemblyImport)obj;
 }
        private const int GENMAN_ENUM_TOKEN_BUF_SIZE = 16; // 128 from genman seems too big.

        /// <summary>
        /// Construct an instance for a source file.
        /// </summary>
        /// <param name="sourceFile">The assembly.</param>
        internal AssemblyInformation(string sourceFile)
        {
            // Extra checks for PInvoke-destined data.
            ErrorUtilities.VerifyThrowArgumentNull(sourceFile, "sourceFile");
            _sourceFile = sourceFile;

            // Create the metadata dispenser and open scope on the source file.
            _metadataDispenser = (IMetaDataDispenser) new CorMetaDataDispenser();
            _assemblyImport    = (IMetaDataAssemblyImport)_metadataDispenser.OpenScope(sourceFile, 0, ref s_importerGuid);
        }
 private MetadataReader(string path)
 {
     object obj2;
     this._path = path;
     this._metaDispenser = (IMetaDataDispenser) new CorMetaDataDispenser();
     if (this._metaDispenser.OpenScope(path, 0, ref _importerGuid, out obj2) == 0)
     {
         this._assemblyImport = (IMetaDataAssemblyImport) obj2;
     }
 }
Example #7
0
        public Assembly(string assemblyName, string frameworkDir, string assemblyDir)
        {
            // resolved assembly path
            string assemblyPath;
            string name = assemblyName;
            //intermediate objects
            object rawMetaDataImportScope    = null;
            object rawMetaDataAsmImportScope = null;

            // save framework and assembly directories for further use
            this.frameworkDir = frameworkDir;
            this.assemblyDir  = assemblyDir;

            // First step: try to find the actual file

            if (System.IO.Path.GetExtension(name) != ".dll")
            {
                name += ".dll";
            }

            if (System.IO.File.Exists(System.IO.Path.Combine(assemblyDir, name)))
            {
                assemblyPath = System.IO.Path.Combine(assemblyDir, name);
            }
            else if (System.IO.File.Exists(System.IO.Path.Combine(frameworkDir, name)))
            {
                assemblyPath = System.IO.Path.Combine(frameworkDir, name);
            }
            else
            {
                assemblyPath = System.IO.Path.Combine(".", name);
            }
            // ??? At this point, we should try the GAC instead ???

            // open the assembly to retrieve the two COM interfaces to access data
            try
            {
                dispenser.OpenScope
                    (assemblyPath, 0x10, ref gMetaDataImportGuid, out rawMetaDataImportScope);
                dispenser.OpenScope
                    (assemblyPath, 0x10, ref gMetaDataAsmImportGuid, out rawMetaDataAsmImportScope);
            }
            catch
            {
                throw new System.ArgumentException("Cannot open " + assemblyPath + " or not a valid assembly.");
            }

            // let's convert the intermediate objects into the expected COM interfaces
            this.importIntf    = (IMetaDataImport2)rawMetaDataImportScope;
            this.asmImportIntf = (IMetaDataAssemblyImport)rawMetaDataAsmImportScope;

            // now that we have the COM interfaces OK, we can retrieve the assembly
            // information
            this.InitInformation();
        }
        private MetadataReader(string path)
        {
            object obj2;

            this._path          = path;
            this._metaDispenser = (IMetaDataDispenser) new CorMetaDataDispenser();
            if (this._metaDispenser.OpenScope(path, 0, ref _importerGuid, out obj2) == 0)
            {
                this._assemblyImport = (IMetaDataAssemblyImport)obj2;
            }
        }
Example #9
0
        private MetadataReader(string path)
        {
            _path = path;
            // Create the metadata dispenser and open scope on the source file.
            _metaDispenser = (IMetaDataDispenser) new CorMetaDataDispenser();
            int hr = _metaDispenser.OpenScope(path, 0, ref s_importerGuid, out object obj);

            if (hr == 0)
            {
                _assemblyImport = (IMetaDataAssemblyImport)obj;
            }
        }
Example #10
0
 public static unsafe PublicKey GetAssemblyPublicKey(IMetaDataAssemblyImport mdai, uint token)
 {
     if (mdai == null)
         return null;
     IntPtr pbPublicKey;
     uint cbPublicKey;
     int hr = mdai.GetAssemblyProps(token, new IntPtr(&pbPublicKey), new IntPtr(&cbPublicKey), IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
     if (hr != 0 || pbPublicKey == IntPtr.Zero)
         return null;
     var data = new byte[cbPublicKey];
     Marshal.Copy(pbPublicKey, data, 0, data.Length);
     return new PublicKey(data);
 }
 public void Close()
 {
     if (this._assemblyImport != null)
     {
         Marshal.ReleaseComObject(this._assemblyImport);
     }
     if (this._metaDispenser != null)
     {
         Marshal.ReleaseComObject(this._metaDispenser);
     }
     this._attributes     = null;
     this._metaDispenser  = null;
     this._assemblyImport = null;
 }
Example #12
0
        public static unsafe byte[] GetAssemblyRefHash(IMetaDataAssemblyImport mdai, uint token)
        {
            if (mdai == null)
                return null;
            IntPtr pbHashValue;
            uint cbHashValue;
            int hr = mdai.GetAssemblyRefProps(token, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, new IntPtr(&pbHashValue), new IntPtr(&cbHashValue), IntPtr.Zero);
            if (hr != 0 || pbHashValue == IntPtr.Zero)
                return null;

            var data = new byte[cbHashValue];
            Marshal.Copy(pbHashValue, data, 0, data.Length);
            return data;
        }
 public void Close()
 {
     if (this._assemblyImport != null)
     {
         Marshal.ReleaseComObject(this._assemblyImport);
     }
     if (this._metaDispenser != null)
     {
         Marshal.ReleaseComObject(this._metaDispenser);
     }
     this._attributes = null;
     this._metaDispenser = null;
     this._assemblyImport = null;
 }
        /// <summary>
        /// Construct an instance for a source file.
        /// </summary>
        /// <param name="sourceFile">The assembly.</param>
        internal AssemblyInformation(string sourceFile)
        {
            // Extra checks for PInvoke-destined data.
            ErrorUtilities.VerifyThrowArgumentNull(sourceFile, "sourceFile");
            _sourceFile = sourceFile;

#if FEATURE_ASSEMBLY_LOADFROM
            if (NativeMethodsShared.IsWindows)
            {
                // Create the metadata dispenser and open scope on the source file.
                _metadataDispenser = (IMetaDataDispenser) new CorMetaDataDispenser();
                _assemblyImport    = (IMetaDataAssemblyImport)_metadataDispenser.OpenScope(sourceFile, 0, ref s_importerGuid);
            }
            else
            {
                _assembly = Assembly.ReflectionOnlyLoadFrom(sourceFile);
            }
#endif
        }
Example #15
0
		public unsafe static uint? GetManifestResourceImplementationToken(IMetaDataAssemblyImport mdai, uint token) {
			if (mdai == null)
				return null;
			uint tkImplementation;
			int hr = mdai.GetManifestResourceProps(token, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&tkImplementation), IntPtr.Zero, IntPtr.Zero);
			return hr == 0 ? tkImplementation : (uint?)null;
		}
Example #16
0
		public unsafe static bool GetManifestResourceProps(IMetaDataAssemblyImport mdai, uint token, out uint offset, out uint implementation, out ManifestResourceAttributes attrs) {
			offset = 0;
			implementation = 0;
			attrs = 0;
			if (mdai == null)
				return false;

			uint tkImplementation, dwOffset, dwResourceFlags;
			int hr = mdai.GetManifestResourceProps(token, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&tkImplementation), new IntPtr(&dwOffset), new IntPtr(&dwResourceFlags));
			if (hr != 0)
				return false;

			implementation = tkImplementation;
			offset = dwOffset;
			attrs = (ManifestResourceAttributes)dwResourceFlags;
			return true;
		}
Example #17
0
		public unsafe static string GetManifestResourceName(IMetaDataAssemblyImport mdai, uint token) {
			if (mdai == null)
				return null;
			char[] nameBuf = null;
			uint chName;
			int hr = mdai.GetManifestResourceProps(token, IntPtr.Zero, 0, new IntPtr(&chName), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			if (hr >= 0 && chName != 0) {
				nameBuf = new char[chName];
				fixed (char* p = &nameBuf[0])
					hr = mdai.GetManifestResourceProps(token, new IntPtr(p), (uint)nameBuf.Length, new IntPtr(&chName), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			}
			if (hr < 0)
				return null;

			return chName <= 1 ? string.Empty : new string(nameBuf, 0, (int)chName - 1);
		}
Example #18
0
		public unsafe static uint[] GetManifestResourceRids(IMetaDataAssemblyImport mdai) {
			var mdi = mdai as IMetaDataImport;
			if (mdi == null)
				return new uint[0];
			IntPtr iter = IntPtr.Zero;
			try {
				uint cTokens;
				int hr = mdai.EnumManifestResources(ref iter, IntPtr.Zero, 0, out cTokens);
				if (hr < 0)
					return new uint[0];

				uint ulCount = 0;
				hr = mdi.CountEnum(iter, ref ulCount);
				if (hr < 0 || ulCount == 0)
					return new uint[0];

				hr = mdi.ResetEnum(iter, 0);
				if (hr < 0)
					return new uint[0];

				uint[] tokens = new uint[ulCount];
				fixed (uint* p = &tokens[0])
					hr = mdai.EnumManifestResources(ref iter, new IntPtr(p), (uint)tokens.Length, out cTokens);
				if (hr < 0)
					return new uint[0];
				return tokens;
			}
			finally {
				if (iter != IntPtr.Zero)
					mdai.CloseEnum(iter);
			}
		}
Example #19
0
		public unsafe static bool GetExportedTypeProps(IMetaDataAssemblyImport mdai, uint token, out uint implementation, out uint typeDefId, out TypeAttributes attrs) {
			implementation = 0;
			typeDefId = 0;
			attrs = 0;
			if (mdai == null)
				return false;

			uint tkImplementation, tkTypeDef, dwExportedTypeFlags;
			int hr = mdai.GetExportedTypeProps(token, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&tkImplementation), new IntPtr(&tkTypeDef), new IntPtr(&dwExportedTypeFlags));
			if (hr != 0)
				return false;

			implementation = tkImplementation;
			typeDefId = tkTypeDef;
			attrs = (TypeAttributes)dwExportedTypeFlags;
			return true;
		}
Example #20
0
		public unsafe static byte[] GetFileHash(IMetaDataAssemblyImport mdai, uint token) {
			if (mdai == null)
				return null;
			IntPtr pbHashValue;
			uint cbHashValue;
			int hr = mdai.GetFileProps(token, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&pbHashValue), new IntPtr(&cbHashValue), IntPtr.Zero);
			if (hr != 0)
				return null;

			var sig = new byte[cbHashValue];
			Marshal.Copy(pbHashValue, sig, 0, sig.Length);
			return sig;
		}
 internal AssemblyInformation(string sourceFile)
 {
     Microsoft.Build.Shared.ErrorUtilities.VerifyThrowArgumentNull(sourceFile, "sourceFile");
     this.metadataDispenser = (IMetaDataDispenser) new CorMetaDataDispenser();
     this.assemblyImport    = (IMetaDataAssemblyImport)this.metadataDispenser.OpenScope(sourceFile, 0, ref importerGuid);
 }
Example #22
0
		public unsafe static Version GetAssemblyVersionAndLocale(IMetaDataAssemblyImport mdai, uint token, out string locale) {
			locale = null;
			if (mdai == null)
				return null;
			ASSEMBLYMETADATA data;
			char[] nameBuf = null;
			int hr = mdai.GetAssemblyProps(token, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&data), IntPtr.Zero);
			if (hr >= 0 && data.cbLocale != 0) {
				nameBuf = new char[data.cbLocale];
				fixed (char* p = &nameBuf[0]) {
					data.szLocale = new IntPtr(p);
					hr = mdai.GetAssemblyProps(token, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&data), IntPtr.Zero);
				}
			}
			if (hr != 0)
				return null;

			locale = data.cbLocale <= 1 ? string.Empty : new string(nameBuf, 0, (int)data.cbLocale - 1);
			return new Version(data.usMajorVersion, data.usMinorVersion, data.usBuildNumber, data.usRevisionNumber);
		}
Example #23
0
		public unsafe static PublicKeyBase GetAssemblyRefPublicKeyOrToken(IMetaDataAssemblyImport mdai, uint token, out AssemblyAttributes attrs) {
			attrs = 0;
			if (mdai == null)
				return null;
			IntPtr pbPublicKeyOrToken;
			uint cbPublicKeyOrToken, dwAssemblyFlags;
			int hr = mdai.GetAssemblyRefProps(token, new IntPtr(&pbPublicKeyOrToken), new IntPtr(&cbPublicKeyOrToken), IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, new IntPtr(&dwAssemblyFlags));
			if (hr != 0)
				return null;
			attrs = (AssemblyAttributes)dwAssemblyFlags;
			if (pbPublicKeyOrToken == IntPtr.Zero)
				return null;
			var data = new byte[cbPublicKeyOrToken];
			Marshal.Copy(pbPublicKeyOrToken, data, 0, data.Length);
			if ((dwAssemblyFlags & (uint)AssemblyAttributes.PublicKey) != 0)
				return new PublicKey(data);
			return new PublicKeyToken(data);
		}
        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;
        }
Example #25
0
 public AssemblyMetaDataImport(string sourceFile)
 {
     this._assemblyImport = (IMetaDataAssemblyImport)this._metaDispenser.OpenScope(sourceFile, 0, ref _importerGuid);
 }
Example #26
0
 public void Close()
 {
     if (_assemblyImport != null)
         Marshal.ReleaseComObject(_assemblyImport);
     if (_metaDispenser != null)
         Marshal.ReleaseComObject(_metaDispenser);
     _attributes = null;
     _metaDispenser = null;
     _assemblyImport = null;
 }
Example #27
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);
        }
 public AssemblyMetaDataImport(string sourceFile)
 {
     this._assemblyImport = (IMetaDataAssemblyImport) this._metaDispenser.OpenScope(sourceFile, 0, ref _importerGuid);
 }
Example #29
0
		public unsafe static FileAttributes? GetFileAttributes(IMetaDataAssemblyImport mdai, uint token) {
			if (mdai == null)
				return null;
			uint dwFileFlags;
			int hr = mdai.GetFileProps(token, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, new IntPtr(&dwFileFlags));
			return hr != 0 ? null : (FileAttributes?)dwFileFlags;
		}
Example #30
0
 public AssemblyMetaDataImport(string sourceFile)
 {
     this._metaDispenser  = (IMetaDataDispenser) new CorMetaDataDispenser();
     this._assemblyImport = (IMetaDataAssemblyImport)this._metaDispenser.OpenScope(sourceFile, 0U, ref AssemblyMetaDataImport._importerGuid);
 }