public DeclSecurityEntry(PEFile module, DeclarativeSecurityAttributeHandle handle) { this.metadataOffset = module.Reader.PEHeaders.MetadataStartOffset; this.module = module; this.metadata = module.Metadata; this.handle = handle; this.declSecAttr = metadata.GetDeclarativeSecurityAttribute(handle); }
public void AddSecurityAttributes(DeclarativeSecurityAttribute secDecl) { var securityActionType = module.Compilation.FindType(new TopLevelTypeName("System.Security.Permissions", "SecurityAction")); var securityAction = new CustomAttributeTypedArgument <IType>(securityActionType, (int)secDecl.Action); var metadata = module.metadata; var reader = metadata.GetBlobReader(secDecl.PermissionSet); if (reader.ReadByte() == '.') { // binary attribute int attributeCount = reader.ReadCompressedInteger(); for (int i = 0; i < attributeCount; i++) { Add(ReadBinarySecurityAttribute(ref reader, securityAction)); } } else { // for backward compatibility with .NET 1.0: XML-encoded attribute reader.Reset(); Add(ReadXmlSecurityAttribute(ref reader, securityAction)); } }
public static string ToString(this MetadataReader reader, DeclarativeSecurityAttribute x) => $"{{DeclSecAttr[{RowId(x):X}]: {reader.ToString( x.PermissionSet)}}}";