Auf Englisch lesen

Freigeben über


AllowPartiallyTrustedCallersAttribute Klasse

Definition

Ermöglicht das Aufrufen einer Assembly durch teilweise vertrauenswürdigen Code. Ohne diese Deklaration können nur voll vertrauenswürdige Aufrufer die Assembly verwenden. Diese Klasse kann nicht geerbt werden.

C#
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
public sealed class AllowPartiallyTrustedCallersAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AllowPartiallyTrustedCallersAttribute : Attribute
Vererbung
AllowPartiallyTrustedCallersAttribute
Attribute

Beispiele

Das folgende Beispiel zeigt, wie sie die AllowPartiallyTrustedCallersAttribute Klasse verwenden.

C#
// The following HTML code can be used to call the user control in this sample.
//
//		<OBJECT id="usercontrol" classid="usercontrol.dll#UserControl.UserControl1" width="800"
//		height="300" style="font-size:12;">

// To run this test control you must create a strong name key, snkey.snk, and 
// a code group that gives full trust to assemblies signed with snkey.snk.

// The user control displays an OpenFileDialog box, then displays a text box containing the name of 
// the file selected and a list box that displays the contents of the file.  The selected file must 
// contain text in order for the control to display the data properly.

// Caution  This sample demonstrates the use of the Assert method.  Calling Assert removes the 
// requirement that all code in the call chain must be granted permission to access the specified 
// resource, it can open up security vulnerabilities if used incorrectly or inappropriately. Therefore, 
// it should be used with great caution.  Assert should always be followed with a RevertAssert 
// command to restore the security settings.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO;
using System.Security;
using System.Security.Permissions;
using System.Reflection;
using System.Runtime.CompilerServices;

// This strong name key is used to create a code group that gives permissions to this assembly.
[assembly: AssemblyKeyFile("snKey.snk")]
[assembly: AssemblyVersion("1.0.0.0")]

// The AllowPartiallyTrustedCallersAttribute requires the assembly to be signed with a strong name key.
// This attribute is necessary since the control is called by either an intranet or Internet
// Web page that should be running under restricted permissions.
[assembly:AllowPartiallyTrustedCallers]
namespace UserControl
{
    // The userControl1 displays an OpenFileDialog box, then displays a text box containing the name of 
    // the file selected and a list box that displays the contents of the file.  The selected file must 
    // contain text in order for the control to display the data properly.
    public class UserControl1 : System.Windows.Forms.UserControl
    {
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.ListBox listBox1;
        // Required designer variable.
        private System.ComponentModel.Container components = null;

              // Demand the zone requirement for the calling application.
              [ZoneIdentityPermission(SecurityAction.Demand, Zone = SecurityZone.Intranet)]
        public UserControl1()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            // The OpenFileDialog box should not require any special permissions.
            OpenFileDialog fileDialog = new OpenFileDialog();
            if(fileDialog.ShowDialog() == DialogResult.OK)
            {
                // Reading the name of the selected file from the OpenFileDialog box
                // and reading the file requires FileIOPermission.  The user control should 
                // have this permission granted through its code group; the Web page that calls the 
                // control should not have this permission.  The Assert command prevents a stack walk 
                // that would fail because the caller does not have the required FileIOPermission.  
                // The use of Assert can open up security vulnerabilities if used incorrectly or 
                // inappropriately. Therefore, it should be used with great caution.
                // The Assert command should be followed by a RevertAssert as soon as the file operation 
                // is completed.
                new FileIOPermission(PermissionState.Unrestricted).Assert();
                textBox1.Text = fileDialog.FileName;
                // Display the contents of the file in the text box.
                FileStream fsIn = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, 
                    FileShare.Read);
                StreamReader sr = new StreamReader(fsIn);
            
                // Process every line in the file
                for (String Line = sr.ReadLine(); Line != null; Line = sr.ReadLine()) 
                {
                    listBox1.Items.Add(Line);
                }
                // It is very important to call RevertAssert to restore the stack walk for
                // file operations.
                FileIOPermission.RevertAssert();
            }
        }

        // Clean up any resources being used.
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if( components != null )
                    components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(208, 112);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(320, 20);
            this.textBox1.TabIndex = 0;
            this.textBox1.Text = "textBox1";
            this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
            // 
            // listBox1
            // 
            this.listBox1.Location = new System.Drawing.Point(200, 184);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(336, 108);
            this.listBox1.TabIndex = 1;
            // 
            // UserControl1
            // 
            this.Controls.Add(this.listBox1);
            this.Controls.Add(this.textBox1);
            this.Name = "UserControl1";
            this.Size = new System.Drawing.Size(592, 400);
            this.Load += new System.EventHandler(this.UserControl1_Load);
            this.ResumeLayout(false);
        }
        #endregion

        private void UserControl1_Load(object sender, System.EventArgs e)
        {
        }

        private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
        }
    }
}

Hinweise

Wichtig

Teilweise vertrauenswürdiger Code wird nicht mehr unterstützt. Dieses Attribut hat keine Auswirkung in .NET Core.

Hinweis

.NET Framework 4 führt neue Sicherheitsregeln ein, die sich auf das Verhalten des attributs AllowPartiallyTrustedCallersAttribute auswirken (siehe Security-Transparent Code, Ebene 2). In .NET Framework 4 ist der gesamte Code standardmäßig sicherheitstransparent, d. h. teilweise vertrauenswürdig. Sie können jedoch einzelne Typen und Member kommentieren, um ihnen andere Transparenzattribute zuzuweisen. Informationen zu diesen und anderen Sicherheitsänderungen finden Sie unter Sicherheitsänderungen.

.NET Framework Version 2.0 () Assemblys müssen stark benannt sein, um das AllowPartiallyTrustedCallersAttribute-Attribut (APTCA) effektiv zu verwenden. .NET Framework 4 ()-Assemblys müssen nicht stark benannt werden, damit das APTCA-Attribut effektiv ist, und sie können transparenten, sicherheitskritischen und sicherheitssicher kritischen Code enthalten. Weitere Informationen zum Anwenden von Attributen auf Assemblyebene finden Sie unter Anwenden von Attributen.

Wenn eine Assembly mit starkem Namen dieses Attributs auf Assemblyebene nicht explizit anwendet, kann es nur von anderen Assemblys aufgerufen werden, die voll vertrauenswürdig sind. Diese Einschränkung wird erzwungen, indem eine LinkDemand für FullTrust für jede öffentliche oder geschützte Methode für jede öffentlich zugängliche Klasse in der Assembly platziert wird. Assemblys, die von teilweise vertrauenswürdigem Code aufgerufen werden sollen, können ihre Absicht mithilfe von AllowPartiallyTrustedCallersAttributedeklarieren. Ein Beispiel für die Deklaration in C# ist [assembly:AllowPartiallyTrustedCallers]; Ein Beispiel in Visual Basic ist <assembly:AllowPartiallyTrustedCallers>.

Achtung

Das Vorhandensein dieses Attributs auf Assemblyebene verhindert das Standardverhalten, FullTrustLinkDemand Sicherheitsüberprüfungen zu platzieren, und die Assembly kann von einer anderen (teilweise oder vollständig vertrauenswürdigen) Assembly aufgerufen werden.

Wenn das APTCA-Attribut vorhanden ist, funktionieren alle anderen Sicherheitsüberprüfungen wie beabsichtigt, einschließlich aller deklarativen Sicherheitsattribute auf Klassenebene oder Methodenebene, die vorhanden sind. Dieses Attribut blockiert nur die implizite, vollständig vertrauenswürdige Aufrufernachfrage.

Dies ist kein deklaratives Sicherheitsattribute, sondern ein reguläres Attribut (es wird von System.Attributeabgeleitet, nicht von System.Security.Permissions.SecurityAttribute).

Weitere Informationen finden Sie unter Verwenden von Bibliotheken aus teilweise vertrauenswürdigen Code-.

Konstruktoren

Eigenschaften

PartialTrustVisibilityLevel

Dient zum Abrufen oder Festlegen der standardmäßigen teilweisen Vertrauensstellung für Code, der mit dem Attribut AllowPartiallyTrustedCallersAttribute (APTCA) gekennzeichnet ist.

TypeId

Wenn sie in einer abgeleiteten Klasse implementiert wird, wird ein eindeutiger Bezeichner für diese Attribute.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, gibt an, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet einen Satz von Namen einem entsprechenden Satz von Verteiler-IDs zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit denen die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Typinformationsschnittstellen ab, die ein Objekt bereitstellt (entweder 0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Bietet Zugriff auf Eigenschaften und Methoden, die von einem Objekt verfügbar gemacht werden.

(Geerbt von Attribute)

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0