Baca dalam bahasa Inggris

Bagikan melalui


HostProtectionAttribute Kelas

Definisi

Perhatian

Code Access Security is not supported or honored by the runtime.

Memungkinkan penggunaan tindakan keamanan deklaratif untuk menentukan persyaratan perlindungan host. Kelas ini tidak dapat diwariskan.

C#
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Constructor | System.AttributeTargets.Delegate | System.AttributeTargets.Method | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)]
[System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class HostProtectionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
C#
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Constructor | System.AttributeTargets.Delegate | System.AttributeTargets.Method | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class HostProtectionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
C#
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Constructor | System.AttributeTargets.Delegate | System.AttributeTargets.Method | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)]
public sealed class HostProtectionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
Warisan
Atribut

Contoh

Contoh kode berikut mengilustrasikan penggunaan HostProtectionAttribute atribut dengan berbagai HostProtectionResource nilai.

C#
using System;
using System.IO;
using System.Threading;
using System.Security;
using System.Security.Policy;
using System.Security.Principal;
using System.Security.Permissions;
using System.Diagnostics;
using System.ComponentModel;
using System.Windows.Forms;

// If this application is run on a server that implements host protection, the 
// HostProtectionAttribute attribute is applied. If the application is run on   
// a server that is not host-protected, the attribute evaporates; it is not  
// detected and therefore not applied. Host protection can be configured with  
// members of the HostProtectionResource enumeration to customize the  
// protection offered.
// The primary intent of this sample is to show situations in which the 
// HostProtectionAttribute attribute might be meaningfully used. The  
// environment required to demonstrate a particular behavior is
// too complex to invoke within the scope of this sample.

class HostProtectionExample
{
    public static int Success = 100;
    
    // Use the enumeration flags to indicate that this method exposes 
    // shared state and self-affecting process management.
    // Either of the following attribute statements can be used to set the
    // resource flags.
    [HostProtectionAttribute(SharedState = true, 
        SelfAffectingProcessMgmt = true)]
    [HostProtectionAttribute(Resources = HostProtectionResource.SharedState |
         HostProtectionResource.SelfAffectingProcessMgmt)]
    private static void Exit(string Message, int Code)
    {
        // Exit the sample when an exception is thrown.
        Console.WriteLine("\nFAILED: " + Message + " " + Code.ToString());
        Environment.ExitCode = Code;
        Environment.Exit(Code);
    }

    // Use the enumeration flags to indicate that this method exposes shared 
    // state, self-affecting process management, and self-affecting threading.
    [HostProtectionAttribute(SharedState=true, SelfAffectingProcessMgmt=true,
         SelfAffectingThreading=true, UI=true)]
    // This method allows the user to quit the sample.
    private static void ExecuteBreak()
    {
        Console.WriteLine("Executing Debugger.Break.");
        Debugger.Break();
        Debugger.Log(1,"info","test message");
    }
    
    // Use the enumeration flags to indicate that this method exposes shared 
    // state, self-affecting threading, and the security infrastructure.
    [HostProtectionAttribute(SharedState=true, SelfAffectingThreading=true,
         SecurityInfrastructure=true)]
    // ApplyIdentity sets the current identity.
    private static int ApplyIdentity()
    {
        string[] roles = {"User"};
        try
        {
            AppDomain mAD = AppDomain.CurrentDomain;
            GenericPrincipal mGenPr = 
                new GenericPrincipal(WindowsIdentity.GetCurrent(), roles);
            mAD.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
            mAD.SetThreadPrincipal(mGenPr);
            return Success;
        }
        catch (Exception e)
        {
            Exit(e.ToString(), 5);
        }
        return 0;
    }

    // The following method is started on a separate thread.
    public static void WatchFileEvents()
    {
        try
        {
            Console.WriteLine("In the child thread.");
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = "C:\\Temp";
            
            // Watch for changes in LastAccess and LastWrite times, and
            // name changes to files or directories.
            watcher.NotifyFilter = NotifyFilters.LastAccess 
                | NotifyFilters.LastWrite
                | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            
            // Watch only text files.
            watcher.Filter = "*.txt";

            // Add event handlers.
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            
            // Begin watching.
            watcher.EnableRaisingEvents = true;

            // Wait for the user to quit the program.
            Console.WriteLine("Event handlers have been enabled.");
            while(Console.Read()!='q');
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    // Use the enumeration flags to indicate that this method exposes 
    // synchronization and external threading.
    [HostProtectionAttribute(Synchronization=true, ExternalThreading=true)]
    private static void StartThread()
    {
        Thread t = new Thread(new ThreadStart(WatchFileEvents));
        
        // Start the new thread. On a uniprocessor, the thread is not given
        // any processor time until the main thread yields the processor.
        t.Start();
        
        // Give the new thread a chance to execute.
        Thread.Sleep(1000);
    }

    // Call methods that show the use of the HostProtectionResource enumeration.
    [HostProtectionAttribute(Resources=HostProtectionResource.All)]
    static int Main(string [] args)
    {
        try
        {
            // Show use of the HostProtectionResource.SharedState,
            // HostProtectionResource.SelfAffectingThreading, and
            // HostProtectionResource.Security enumeration values.
            ApplyIdentity();
            Directory.CreateDirectory("C:\\Temp");
            
            // Show use of the HostProtectionResource.Synchronization and
            // HostProtectionResource.ExternalThreading enumeration values.
            StartThread();
            Console.WriteLine("In the main thread.");
            Console.WriteLine("Deleting and creating 'MyTestFile.txt'.");
            if (File.Exists("C:\\Temp\\MyTestFile.txt"))
            {
                File.Delete("C:\\Temp\\MyTestFile.txt");
            }

            StreamWriter sr = File.CreateText("C:\\Temp\\MyTestFile.txt");
            sr.WriteLine ("This is my file.");
            sr.Close();
            Thread.Sleep(1000);
            
            // Show use of the HostProtectionResource.SharedState,
            // HostProtectionResource.SelfProcessMgmt,
            // HostProtectionResource.SelfAffectingThreading, and
            // HostProtectionResource.UI enumeration values.
            ExecuteBreak();
            
            // Show the use of the 
            // HostProtectionResource.ExternalProcessManagement 
            // enumeration value.
            MyControl myControl = new MyControl ();
            Console.WriteLine ("Enter 'q' to quit the sample.");
            return 100;
        }
        catch (Exception e)
        {
            Exit(e.ToString(), 0);
            return 0;
        }
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify whether a file is changed, created, or deleted.
        Console.WriteLine("In the OnChanged event handler.");
        Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
    }
}

// The following class is an example of code that exposes 
// external process management.
// Add the LicenseProviderAttribute to the control.
[LicenseProvider (typeof(LicFileLicenseProvider))]
public class MyControl : System.Windows.Forms.Control
{
    // Create a new, null license.
    private License license = null;

    [HostProtection (ExternalProcessMgmt = true)]
    public MyControl ()
    {
        // Determine if a valid license can be granted.
        bool isValid = LicenseManager.IsValid (typeof(MyControl));
        Console.WriteLine ("The result of the IsValid method call is " + 
            isValid.ToString ());
    }

    protected override void Dispose (bool disposing)
    {
        if (disposing)
        {
            if (license != null)
            {
                license.Dispose ();
                license = null;
            }
        }
    }
}

Keterangan

Perhatian

Keamanan Akses Kode (CAS) tidak digunakan lagi di semua versi .NET Framework dan .NET. Versi terbaru .NET tidak mematuhi anotasi CAS dan menghasilkan kesalahan jika API terkait CAS digunakan. Pengembang harus mencari cara alternatif untuk menyelesaikan tugas keamanan.

Atribut ini hanya memengaruhi aplikasi tidak terkelola yang menghosting runtime bahasa umum dan menerapkan perlindungan host, seperti SQL Server. Jika kode dijalankan di aplikasi klien atau di server yang tidak dilindungi host, atribut "evaporates"; itu tidak terdeteksi dan karena itu tidak diterapkan. Saat diterapkan, tindakan keamanan menghasilkan pembuatan permintaan tautan berdasarkan sumber daya host yang diekspos oleh kelas atau metode.

Penting

Tujuan dari atribut ini adalah untuk menegakkan panduan model pemrograman khusus host, bukan perilaku keamanan. Meskipun permintaan tautan digunakan untuk memeriksa kesesuaian dengan persyaratan model pemrograman, HostProtectionAttribute bukanlah izin keamanan.

Jika host tidak memiliki persyaratan model pemrograman, permintaan tautan tidak terjadi.

Atribut ini mengidentifikasi hal berikut:

  • Metode atau kelas yang tidak sesuai dengan model pemrograman host, tetapi tidak berbahaya.

  • Metode atau kelas yang tidak sesuai dengan model pemrograman host dan dapat menyebabkan ketidakstabilan kode pengguna yang dikelola server.

  • Metode atau kelas yang tidak sesuai dengan model pemrograman host dan dapat menyebabkan destabilisasi proses server itu sendiri.

Catatan

Jika Anda membuat pustaka kelas yang akan dipanggil oleh aplikasi yang dapat dijalankan di lingkungan yang dilindungi host, Anda harus menerapkan atribut ini ke anggota yang mengekspos kategori sumber daya HostProtectionResource. Anggota pustaka kelas .NET Framework dengan atribut ini hanya menyebabkan pemanggil langsung diperiksa. Anggota pustaka Anda juga harus memeriksa pemanggil langsungnya dengan cara yang sama.

Catatan

Jangan gunakan Ngen.exe (Native Image Generator) untuk membuat gambar asli rakitan yang dilindungi oleh HostProtectionAttribute. Dalam lingkungan kepercayaan penuh, gambar selalu dimuat, tanpa memperhatikan HostProtectionAttribute, dan di lingkungan kepercayaan parsial gambar tidak dimuat.

Konstruktor

HostProtectionAttribute()
Kedaluwarsa.

Menginisialisasi instans HostProtectionAttribute baru kelas dengan nilai default.

HostProtectionAttribute(SecurityAction)
Kedaluwarsa.

Menginisialisasi instans HostProtectionAttribute baru kelas dengan nilai yang ditentukan SecurityAction .

Properti

Action
Kedaluwarsa.

Mendapatkan atau mengatur tindakan keamanan.

(Diperoleh dari SecurityAttribute)
ExternalProcessMgmt
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah manajemen proses eksternal terekspos.

ExternalThreading
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah utas eksternal terekspos.

MayLeakOnAbort
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah sumber daya mungkin membocorkan memori jika operasi dihentikan.

Resources
Kedaluwarsa.

Mendapatkan atau mengatur bendera yang menentukan kategori fungsionalitas yang berpotensi berbahaya bagi host.

SecurityInfrastructure
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah infrastruktur keamanan terekspos.

SelfAffectingProcessMgmt
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah manajemen proses yang memengaruhi diri terekspos.

SelfAffectingThreading
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah utas yang memengaruhi diri terekspos.

SharedState
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah status bersama terekspos.

Synchronization
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah sinkronisasi terekspos.

TypeId
Kedaluwarsa.

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)
UI
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah antarmuka pengguna terekspos.

Unrestricted
Kedaluwarsa.

Mendapatkan atau menetapkan nilai yang menunjukkan apakah izin penuh (tidak terbatas) ke sumber daya yang dilindungi oleh atribut dideklarasikan.

(Diperoleh dari SecurityAttribute)

Metode

CreatePermission()
Kedaluwarsa.

Membuat dan mengembalikan izin perlindungan host baru.

Equals(Object)
Kedaluwarsa.

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()
Kedaluwarsa.

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()
Kedaluwarsa.

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()
Kedaluwarsa.

Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)
Kedaluwarsa.

Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()
Kedaluwarsa.

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()
Kedaluwarsa.

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

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

Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)
Kedaluwarsa.

Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfoCount(UInt32)
Kedaluwarsa.

Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1).

(Diperoleh dari Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)
Kedaluwarsa.

Menyediakan akses ke properti dan metode yang diekspos oleh objek.

(Diperoleh dari Attribute)

Berlaku untuk

Produk Versi (Kedaluwarsa)
.NET (8 (package-provided), 9 (package-provided))
.NET Framework 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 (package-provided), 4.7, 4.7.1 (package-provided), 4.7.1, 4.7.2 (package-provided), 4.7.2, 4.8 (package-provided), 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1 (5, 6, 7, 8, 9)

Lihat juga