Example #1
0
        public override AssemblyName[] GetReferencedAssemblies()
        {
            Token token;
            int   num;
            IMetadataAssemblyImport rawImport     = (IMetadataAssemblyImport)this.m_manifestModule.RawImport;
            List <AssemblyName>     assemblyNames = new List <AssemblyName>();
            HCORENUM hCORENUM = new HCORENUM();

            try
            {
                while (true)
                {
                    int num1 = rawImport.EnumAssemblyRefs(ref hCORENUM, out token, 1, out num);
                    Marshal.ThrowExceptionForHR(num1);
                    if (num == 0)
                    {
                        break;
                    }
                    assemblyNames.Add(AssemblyNameHelper.GetAssemblyNameFromRef(token, this.m_manifestModule, rawImport));
                }
            }
            finally
            {
                hCORENUM.Close(rawImport);
            }
            return(assemblyNames.ToArray());
        }
Example #2
0
 public void Close(IMetadataAssemblyImport import)
 {
     if (this.hEnum != IntPtr.Zero)
     {
         import.CloseEnum(this.hEnum);
         this.hEnum = IntPtr.Zero;
     }
 }
Example #3
0
        public static AssemblyName GetAssemblyName(MetadataOnlyModule module)
        {
            PortableExecutableKinds portableExecutableKind;
            ImageFileMachine        imageFileMachine;
            Token assemblyToken = MetadataOnlyAssembly.GetAssemblyToken(module);
            IMetadataAssemblyImport rawImport = (IMetadataAssemblyImport)module.RawImport;

            AssemblyNameHelper.AssemblyNameFromDefitionBuilder assemblyNameFromDefitionBuilder = new AssemblyNameHelper.AssemblyNameFromDefitionBuilder(assemblyToken, module.RawMetadata, rawImport);
            AssemblyName codeBaseFromManifestModule = assemblyNameFromDefitionBuilder.CalculateName();

            codeBaseFromManifestModule.CodeBase = MetadataOnlyAssembly.GetCodeBaseFromManifestModule(module);
            module.GetPEKind(out portableExecutableKind, out imageFileMachine);
            codeBaseFromManifestModule.ProcessorArchitecture = AssemblyNameHelper.CalculateProcArchIndex(portableExecutableKind, imageFileMachine);
            return(codeBaseFromManifestModule);
        }
Example #4
0
        public override Stream GetManifestResourceStream(string name)
        {
            int  num;
            int  num1;
            int  num2;
            uint num3;
            CorManifestResourceFlags corManifestResourceFlag;
            int                     num4;
            UnusedIntPtr            unusedIntPtr;
            uint                    num5;
            CorFileFlags            corFileFlag;
            IMetadataAssemblyImport rawImport = (IMetadataAssemblyImport)this.m_manifestModule.RawImport;

            rawImport.FindManifestResourceByName(name, out num);
            if ((new Token(num)).IsNil)
            {
                return(null);
            }
            StringBuilder stringBuilder = new StringBuilder(name.Length + 1);

            rawImport.GetManifestResourceProps(num, stringBuilder, stringBuilder.Capacity, out num1, out num2, out num3, out corManifestResourceFlag);
            Token token = new Token(num2);

            if (token.TokenType != System.Reflection.Adds.TokenType.File)
            {
                if (token.TokenType != System.Reflection.Adds.TokenType.AssemblyRef)
                {
                    throw new ArgumentException(MetadataStringTable.InvalidMetadata);
                }
                throw new NotImplementedException();
            }
            if (token.IsNil)
            {
                byte[] numArray = this.m_manifestModule.RawMetadata.ReadResource((long)num3);
                return(new MemoryStream(numArray));
            }
            rawImport.GetFileProps(token.Value, null, 0, out num4, out unusedIntPtr, out num5, out corFileFlag);
            StringBuilder stringBuilder1 = new StringBuilder(num4);

            rawImport.GetFileProps(token.Value, stringBuilder1, num4, out num4, out unusedIntPtr, out num5, out corFileFlag);
            string directoryName = Path.GetDirectoryName(this.Location);
            string str           = Path.Combine(directoryName, stringBuilder1.ToString());

            return(new FileStream(str, FileMode.Open));
        }
Example #5
0
        private static List <string> GetFileNamesFromFilesTable(MetadataOnlyModule manifestModule, bool getResources)
        {
            int                     num;
            int                     num1;
            int                     num2;
            UnusedIntPtr            unusedIntPtr;
            uint                    num3;
            CorFileFlags            corFileFlag;
            HCORENUM                hCORENUM      = new HCORENUM();
            StringBuilder           stringBuilder = new StringBuilder();
            List <string>           strs          = new List <string>();
            IMetadataAssemblyImport rawImport     = (IMetadataAssemblyImport)manifestModule.RawImport;

            try
            {
                while (true)
                {
                    rawImport.EnumFiles(ref hCORENUM, out num, 1, out num1);
                    if (num1 == 0)
                    {
                        break;
                    }
                    rawImport.GetFileProps(num, null, 0, out num2, out unusedIntPtr, out num3, out corFileFlag);
                    if (getResources || corFileFlag != CorFileFlags.ContainsNoMetaData)
                    {
                        if (num2 > stringBuilder.Capacity)
                        {
                            stringBuilder.Capacity = num2;
                        }
                        rawImport.GetFileProps(num, stringBuilder, num2, out num2, out unusedIntPtr, out num3, out corFileFlag);
                        strs.Add(stringBuilder.ToString());
                    }
                }
            }
            finally
            {
                hCORENUM.Close(rawImport);
            }
            return(strs);
        }
Example #6
0
        public override string[] GetManifestResourceNames()
        {
            int  num;
            int  num1;
            int  num2;
            int  num3;
            uint num4;
            CorManifestResourceFlags corManifestResourceFlag;
            HCORENUM                hCORENUM      = new HCORENUM();
            StringBuilder           stringBuilder = new StringBuilder();
            List <string>           strs          = new List <string>();
            IMetadataAssemblyImport rawImport     = (IMetadataAssemblyImport)this.m_manifestModule.RawImport;

            try
            {
                while (true)
                {
                    rawImport.EnumManifestResources(ref hCORENUM, out num, 1, out num1);
                    if (num1 == 0)
                    {
                        break;
                    }
                    rawImport.GetManifestResourceProps(num, null, 0, out num2, out num3, out num4, out corManifestResourceFlag);
                    if (num2 > stringBuilder.Capacity)
                    {
                        stringBuilder.Capacity = num2;
                    }
                    rawImport.GetManifestResourceProps(num, stringBuilder, num2, out num2, out num3, out num4, out corManifestResourceFlag);
                    strs.Add(stringBuilder.ToString());
                }
            }
            finally
            {
                hCORENUM.Close(rawImport);
            }
            return(strs.ToArray());
        }
        internal static IEnumerable <UnresolvedTypeName> GetRawTypeForwardedToAttributes(MetadataOnlyModule manifestModule)
        {
            int                     num;
            uint                    num1;
            int                     num2;
            int                     num3;
            int                     num4;
            CorTypeAttr             corTypeAttr;
            HCORENUM                hCORENUM  = new HCORENUM();
            IMetadataAssemblyImport rawImport = (IMetadataAssemblyImport)manifestModule.RawImport;

            try
            {
                while (true)
                {
                    rawImport.EnumExportedTypes(ref hCORENUM, out num, 1, out num1);
                    if (num1 == 0)
                    {
                        break;
                    }
                    rawImport.GetExportedTypeProps(num, null, 0, out num2, out num3, out num4, out corTypeAttr);
                    Token token = new Token(num3);
                    if (token.TokenType == System.Reflection.Adds.TokenType.AssemblyRef)
                    {
                        StringBuilder stringBuilder = new StringBuilder(num2);
                        rawImport.GetExportedTypeProps(num, stringBuilder, stringBuilder.Capacity, out num2, out num3, out num4, out corTypeAttr);
                        AssemblyName assemblyNameFromRef = AssemblyNameHelper.GetAssemblyNameFromRef(token, manifestModule, rawImport);
                        yield return(new UnresolvedTypeName(stringBuilder.ToString(), assemblyNameFromRef));
                    }
                }
            }
            finally
            {
                hCORENUM.Close(rawImport);
            }
        }
Example #8
0
 protected AssemblyNameBuilder(MetadataFile storage, IMetadataAssemblyImport assemblyImport)
 {
     this.m_storage        = storage;
     this.m_assemblyImport = assemblyImport;
 }
Example #9
0
 public static AssemblyName GetAssemblyNameFromRef(Token assemblyRefToken, MetadataOnlyModule module, IMetadataAssemblyImport assemblyImport)
 {
     return((new AssemblyNameHelper.AssemblyNameFromRefBuilder(assemblyRefToken, module.RawMetadata, assemblyImport)).CalculateName());
 }
Example #10
0
 public AssemblyNameFromRefBuilder(Token assemblyRefToken, MetadataFile storage, IMetadataAssemblyImport assemblyImport) : base(storage, assemblyImport)
 {
     if (assemblyRefToken.TokenType != System.Reflection.Adds.TokenType.AssemblyRef)
     {
         throw new ArgumentException(MetadataStringTable.AssemblyRefTokenExpected);
     }
     this.assemblyRefToken = assemblyRefToken;
 }
Example #11
0
 public AssemblyNameFromDefitionBuilder(Token assemblyToken, MetadataFile storage, IMetadataAssemblyImport assemblyImport) : base(storage, assemblyImport)
 {
     this.assemblyToken = assemblyToken;
 }