Questa documentazione è stata archiviata e non viene gestita.

Metodo AppDomain.SetPrincipalPolicy

Aggiornamento: novembre 2007

Consente di specificare come collegare oggetti Principal e Identity a un thread se si tenta di associare il thread ad un Principal durante l'esecuzione nel dominio applicazione.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)]
public void SetPrincipalPolicy(
	PrincipalPolicy policy
)
/** @attribute SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal) */
public final void SetPrincipalPolicy(
	PrincipalPolicy policy
)
public final function SetPrincipalPolicy(
	policy : PrincipalPolicy
)

Parametri

policy
Tipo: System.Security.Principal.PrincipalPolicy
Uno dei valori dell'enumerazione PrincipalPolicy che specifica il tipo dell'oggetto Principal da associare ai thread.

Implementa

_AppDomain.SetPrincipalPolicy(PrincipalPolicy)

EccezioneCondizione
AppDomainUnloadedException

Si è tentato di effettuare l'operazione su un dominio dell'applicazione non caricato.

L'impostazione di questo valore avrà effetto solo se configurato prima di utilizzare la proprietà Thread.CurrentPrincipal. Ad esempio, se si imposta la proprietà Thread.CurrentPrincipal su un determinato oggetto Principal (ad esempio, un oggetto Principal generico) e quindi si utilizza il metodo SetPrincipalPolicy per impostare l'enumerazione PrincipalPolicy su WindowsPrincipal, l'oggetto Principal corrente rimarrà l'oggetto Principal generico.

Nell'esempio seguente viene illustrato l'effetto sui thread dell'utilizzo del metodo SetPrincipalPolicy per modificare i criteri principali del dominio dell'applicazione. Viene inoltre illustrato l'effetto dell'utilizzo del metodo SetThreadPrincipal per modificare l'entità di protezione disponibile per la connessione ai thread nel dominio dell'applicazione.

using System;
using System.Security.Principal;
using System.Threading;

class ADPrincipal
{
	static void Main(string[] args)
	{
		// Create a new thread with a generic principal.
		Thread t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();

		// Set the principal policy to WindowsPrincipal.
		AppDomain currentDomain = AppDomain.CurrentDomain;
		currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
			
		// The new thread will have a Windows principal representing the
		// current user.
		t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();

		// Create a principal to use for new threads.
		IIdentity identity = new GenericIdentity("NewUser");
		IPrincipal principal = new GenericPrincipal(identity, null);
		currentDomain.SetThreadPrincipal(principal);
			
		// Create a new thread with the principal created above.
		t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();
		
		// Wait for user input before terminating.
		Console.ReadLine();
	}

	static void PrintPrincipalInformation()
	{
		IPrincipal curPrincipal = Thread.CurrentPrincipal;
		if(curPrincipal != null)
		{
			Console.WriteLine("Type: " + curPrincipal.GetType().Name);
			Console.WriteLine("Name: " + curPrincipal.Identity.Name);
			Console.WriteLine("Authenticated: " +
				curPrincipal.Identity.IsAuthenticated);
			Console.WriteLine();
		}
	}
}


import System.*;
import System.Security.Principal.*;
import System.Threading.*;

class ADPrincipal
{
    public static void main(String[] args)
    {
        // Create a new thread with a generic principal.
        System.Threading.Thread t = new System.Threading.Thread(
            new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Set the principal policy to WindowsPrincipal.
        AppDomain currentDomain = AppDomain.get_CurrentDomain();
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

        // The new thread will have a Windows principal representing the
        // current user.
        t = new System.Threading.Thread(
            new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Create a principal to use for new threads.
        IIdentity identity = new GenericIdentity("NewUser");
        IPrincipal principal = new GenericPrincipal(identity, null);
        currentDomain.SetThreadPrincipal(principal);

        // Create a new thread with the principal created above.
        t = new System.Threading.Thread(
            new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Wait for user input before terminating.
        Console.ReadLine();
    } //main

    static void PrintPrincipalInformation()
    {
        IPrincipal curPrincipal = 
            System.Threading.Thread.get_CurrentPrincipal();

        if (curPrincipal != null) {
            Console.WriteLine("Type: " + curPrincipal.GetType().get_Name());
            Console.WriteLine("Name: " 
                + curPrincipal.get_Identity().get_Name());
            Console.WriteLine("Authenticated: " 
                + (System.Boolean)curPrincipal.get_Identity().
                get_IsAuthenticated());
            Console.WriteLine();
        }
    } //PrintPrincipalInformation


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0
Mostra: