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); }
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); }
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); } }
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))); }
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); }
/// <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; }