Ejemplo n.º 1
0
 public SecurityDeclaration(SecurityAction action, PermissionSetSignature permissionSet)
     : base(null, new MetadataToken(MetadataTokenType.DeclSecurity), new MetadataRow <ushort, uint, uint>())
 {
     Action         = action;
     _parent        = new LazyValue <IHasSecurityAttribute>();
     _permissionSet = new LazyValue <PermissionSetSignature>(permissionSet);
 }
Ejemplo n.º 2
0
        public SecurityDeclaration(SecurityAction action, PermissionSetSignature permissionSet)
            : base(new MetadataToken(MetadataTokenType.DeclSecurity))
        {
            Action         = action;
            _parent        = new LazyValue <IHasSecurityAttribute>();
            _permissionSet = new LazyValue <PermissionSetSignature>(permissionSet);

            CustomAttributes = new CustomAttributeCollection(this);
        }
Ejemplo n.º 3
0
        public void CreateSimpleSecurityDeclaration()
        {
            const string typeNamespace = "System.WitchCraft";
            const string typeName      = "MagicalWand";

            // set up temp assembly.
            var assembly         = Utilities.CreateTempNetAssembly();
            var tableStream      = assembly.NetDirectory.MetadataHeader.GetStream <TableStream>();
            var typeTable        = tableStream.GetTable <TypeDefinition>();
            var declarationTable = tableStream.GetTable <SecurityDeclaration>();
            var importer         = new ReferenceImporter(tableStream);

            // create temp type.
            var type = new TypeDefinition(typeNamespace, typeName);

            type.MetadataRow.Column5 = 1; // FieldList
            type.MetadataRow.Column6 = 2; // MethodList.
            typeTable.Add(type);

            // create attribute.
            var securityAttribute = new SecurityAttributeSignature()
            {
                TypeName = typeof(TypeDescriptorPermissionAttribute).AssemblyQualifiedName,
            };

            // create permission set.
            var permissionSet = new PermissionSetSignature();

            permissionSet.Attributes.Add(securityAttribute);

            // create declaration.
            var declaration = new SecurityDeclaration(SecurityAction.Assert, permissionSet);

            type.SecurityDeclarations.Add(declaration);
            declarationTable.Add(declaration);

            assembly    = Utilities.RebuildNetAssembly(assembly);
            tableStream = assembly.NetDirectory.MetadataHeader.GetStream <TableStream>();
            typeTable   = tableStream.GetTable <TypeDefinition>();
            type        = typeTable.First(x => x.IsTypeOf(typeNamespace, typeName));

            Assert.IsTrue(type.SecurityDeclarations.Count > 0);
            var newDeclaration = type.SecurityDeclarations[0];

            Assert.AreEqual(declaration.Action, newDeclaration.Action);
            Assert.AreEqual(declaration.PermissionSet.Attributes.Count, newDeclaration.PermissionSet.Attributes.Count);

            for (int i = 0; i < declaration.PermissionSet.Attributes.Count; i++)
            {
                var attribute    = declaration.PermissionSet.Attributes[i];
                var newAttribute = newDeclaration.PermissionSet.Attributes[i];

                Assert.AreEqual(attribute.TypeName, newAttribute.TypeName);
            }
        }
Ejemplo n.º 4
0
        internal SecurityDeclaration(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint> row)
            : base(header, token, row)
        {
            Action = (SecurityAction)row.Column1;

            var tableStream = header.GetStream <TableStream>();

            _parent = new LazyValue <IHasSecurityAttribute>(() =>
            {
                var parentToken = tableStream.GetIndexEncoder(CodedIndex.HasDeclSecurity).DecodeIndex(row.Column2);
                return(parentToken.Rid != 0 ? (IHasSecurityAttribute)tableStream.ResolveMember(parentToken) : null);
            });

            _permissionSet = new LazyValue <PermissionSetSignature>(() =>
                                                                    PermissionSetSignature.FromReader(header, header.GetStream <BlobStream>().CreateBlobReader(row.Column3)));
        }
Ejemplo n.º 5
0
        internal SecurityDeclaration(MetadataImage image, MetadataRow <SecurityAction, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            var tableStream = image.Header.GetStream <TableStream>();

            Action = row.Column1;

            _parent = new LazyValue <IHasSecurityAttribute>(() =>
            {
                var parentToken = tableStream.GetIndexEncoder(CodedIndex.HasDeclSecurity).DecodeIndex(row.Column2);
                return(parentToken.Rid != 0 ? (IHasSecurityAttribute)_image.ResolveMember(parentToken) : null);
            });

            _permissionSet = new LazyValue <PermissionSetSignature>(() =>
                                                                    PermissionSetSignature.FromReader(image,
                                                                                                      tableStream.MetadataHeader.GetStream <BlobStream>().CreateBlobReader(row.Column3)));

            CustomAttributes = new CustomAttributeCollection(this);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Creates a new instance of the <see cref="SecurityDeclaration"/> class.
 /// </summary>
 /// <param name="action"></param>
 /// <param name="permissionSet"></param>
 public SecurityDeclaration(SecurityAction action, PermissionSetSignature permissionSet)
     : this(new MetadataToken(TableIndex.DeclSecurity, 0))
 {
     Action        = action;
     PermissionSet = permissionSet;
 }