Teilen ü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.

public ref class AllowPartiallyTrustedCallersAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
public sealed class AllowPartiallyTrustedCallersAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AllowPartiallyTrustedCallersAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)>]
type AllowPartiallyTrustedCallersAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type AllowPartiallyTrustedCallersAttribute = class
    inherit Attribute
Public NotInheritable Class AllowPartiallyTrustedCallersAttribute
Inherits Attribute
Vererbung
AllowPartiallyTrustedCallersAttribute
Attribute

Beispiele

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

// 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.Windows.Forms.dll>
#using <System.Data.dll>
#using <System.Drawing.dll>
#using <System.dll>

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

// This strong name key is used to create a code group that gives permissions to this assembly.
// 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.
// 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.

[assembly:AssemblyKeyFile("snKey.snk")];
[assembly:AssemblyVersion("1.0.0.0")];
[assembly:AllowPartiallyTrustedCallers];
public ref class UserControl1: public System::Windows::Forms::UserControl
{
private:
   System::Windows::Forms::TextBox^ textBox1;
   System::Windows::Forms::ListBox^ listBox1;

   // Required designer variable.
   System::ComponentModel::Container^ components;

public:
// Demand the zone requirement for the calling application.
[ZoneIdentityPermission(SecurityAction::Demand, Zone = SecurityZone::Intranet)]
   UserControl1()
   {
      
      // This call is required by the Windows.Forms Form Designer.
      InitializeComponent();
      
      // The OpenFileDialog box should not require any special permissions.
      OpenFileDialog^ fileDialog = gcnew 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.
         (gcnew FileIOPermission( PermissionState::Unrestricted ))->Assert();
         textBox1->Text = fileDialog->FileName;

         // Display the contents of the file in the text box.
         FileStream^ fsIn = gcnew FileStream( textBox1->Text,FileMode::Open,FileAccess::Read,FileShare::Read );
         StreamReader^ sr = gcnew StreamReader( fsIn );
         
         // Process every line in the file
         for ( String ^ Line = sr->ReadLine(); Line != nullptr; Line = sr->ReadLine() )
         {
            listBox1->Items->Add( Line );

         }

         // file operations.
         FileIOPermission::RevertAssert();
      }
   }

private:

   /// <summary>
   /// Required method for Designer support - do not modify 
   /// the contents of this method with the code editor.
   /// </summary>
   void InitializeComponent()
   {
      this->textBox1 = gcnew System::Windows::Forms::TextBox;
      this->listBox1 = gcnew System::Windows::Forms::ListBox;
      this->SuspendLayout();
      
      // 
      // textBox1
      // 
      this->textBox1->Location = System::Drawing::Point( 208, 112 );
      this->textBox1->Name = "textBox1";
      this->textBox1->Size = System::Drawing::Size( 320, 20 );
      this->textBox1->TabIndex = 0;
      this->textBox1->Text = "textBox1";
      this->textBox1->TextChanged += gcnew System::EventHandler( this,&UserControl1::textBox1_TextChanged );
      
      // 
      // listBox1
      // 
      this->listBox1->Location = System::Drawing::Point( 200, 184 );
      this->listBox1->Name = "listBox1";
      this->listBox1->Size = 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 = System::Drawing::Size( 592, 400 );
      this->Load += gcnew System::EventHandler( this,&UserControl1::UserControl1_Load );
      this->ResumeLayout( false );
   }

   void UserControl1_Load( Object^ /*sender*/, System::EventArgs^ /*e*/ ){}

   void textBox1_TextChanged( Object^ /*sender*/, System::EventArgs^ /*e*/ ){}

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

Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Data
Imports System.Windows.Forms
Imports System.IO
Imports System.Security
Imports System.Security.Permissions
Imports System.Reflection
Imports 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()> 

' 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.

'Demand the zone requirement for the calling application.
<ZoneIdentityPermissionAttribute(SecurityAction.Demand, Zone:=SecurityZone.Intranet)> _
Public Class UserControl1
    Inherits System.Windows.Forms.UserControl
    Private WithEvents textBox1 As System.Windows.Forms.TextBox
    Private listBox1 As System.Windows.Forms.ListBox
    ' Required designer variable.
    Private components As System.ComponentModel.Container = Nothing


    Public Sub New()
        ' This call is required by the Windows.Forms Form Designer.
        InitializeComponent()

        ' The OpenFileDialog box should not require any special permissions.
        Dim fileDialog As New OpenFileDialog
        If fileDialog.ShowDialog() = DialogResult.OK Then
            ' 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.
            Dim fileIOPermission As New FileIOPermission(PermissionState.Unrestricted)
            fileIOPermission.Assert()
            textBox1.Text = fileDialog.FileName
            ' Display the contents of the file in the text box.
            Dim fsIn As New FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, FileShare.Read)
            Dim sr As New StreamReader(fsIn)

            ' Process every line in the file
            Dim Line As String
            Line = sr.ReadLine()
            While Not (Line Is Nothing)
                listBox1.Items.Add(Line)
                Line = sr.ReadLine()
            End While
            ' It is very important to call RevertAssert to restore the stack walk for
            ' file operations.
            fileIOPermission.RevertAssert()
        End If
    End Sub


    ' Clean up any resources being used.
    Protected Overloads Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub


    ' Required method for Designer support - do not modify 
    ' the contents of this method with the code editor.
    Private Sub InitializeComponent()
        Me.textBox1 = New System.Windows.Forms.TextBox
        Me.listBox1 = New System.Windows.Forms.ListBox
        Me.SuspendLayout()
        ' 
        ' textBox1
        ' 
        Me.textBox1.Location = New System.Drawing.Point(208, 112)
        Me.textBox1.Name = "textBox1"
        Me.textBox1.Size = New System.Drawing.Size(320, 20)
        Me.textBox1.TabIndex = 0
        Me.textBox1.Text = "textBox1"
        ' 
        ' listBox1
        ' 
        Me.listBox1.Location = New System.Drawing.Point(200, 184)
        Me.listBox1.Name = "listBox1"
        Me.listBox1.Size = New System.Drawing.Size(336, 108)
        Me.listBox1.TabIndex = 1
        ' 
        ' UserControl1
        ' 
        Me.Controls.Add(listBox1)
        Me.Controls.Add(textBox1)
        Me.Name = "UserControl1"
        Me.Size = New System.Drawing.Size(592, 400)
        Me.ResumeLayout(False)
    End Sub

    Private Sub UserControl1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub textBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles textBox1.TextChanged
    End Sub
End Class

Hinweise

Wichtig

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

Anmerkung

.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>.

Vorsicht

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

AllowPartiallyTrustedCallersAttribute()

Initialisiert eine neue Instanz der AllowPartiallyTrustedCallersAttribute Klasse.

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: