AppDomain.SetPrincipalPolicy(PrincipalPolicy) AppDomain.SetPrincipalPolicy(PrincipalPolicy) AppDomain.SetPrincipalPolicy(PrincipalPolicy) AppDomain.SetPrincipalPolicy(PrincipalPolicy) Method

Definición

Especifica la forma en que los objetos principales y de identidad deben asociarse a un subproceso si éste intenta enlazarse a un principal mientas se ejecuta en este dominio de aplicación.Specifies how principal and identity objects should be attached to a thread if the thread attempts to bind to a principal while executing in this application domain.

public:
 void SetPrincipalPolicy(System::Security::Principal::PrincipalPolicy policy);
public void SetPrincipalPolicy (System.Security.Principal.PrincipalPolicy policy);
member this.SetPrincipalPolicy : System.Security.Principal.PrincipalPolicy -> unit
Public Sub SetPrincipalPolicy (policy As PrincipalPolicy)

Parámetros

policy
PrincipalPolicy PrincipalPolicy PrincipalPolicy PrincipalPolicy

Uno de los valores de PrincipalPolicy que especifica el tipo del objeto principal que se va a asociar a los subprocesos.One of the PrincipalPolicy values that specifies the type of the principal object to attach to threads.

Excepciones

La operación se intenta en un dominio de aplicación descargado.The operation is attempted on an unloaded application domain.

Ejemplos

En el ejemplo siguiente se muestra el efecto en los subprocesos de utilizando el SetPrincipalPolicy método para cambiar la directiva principal del dominio de aplicación.The following example shows the effect on threads of using the SetPrincipalPolicy method to change the principal policy of the application domain. También se muestra el efecto de usar el SetThreadPrincipal método para cambiar la entidad de seguridad que está disponible para asociarse a los subprocesos del dominio de aplicación.It also shows the effect of using the SetThreadPrincipal method to change the principal that is available for attaching to threads in the application domain.

using namespace System;
using namespace System::Security::Principal;
using namespace System::Threading;
ref class ADPrincipal
{
public:
   static void PrintPrincipalInformation()
   {
      IPrincipal^ curPrincipal = Thread::CurrentPrincipal;
      if ( curPrincipal != nullptr )
      {
         Console::WriteLine( "Type: {0}", curPrincipal->GetType()->Name );
         Console::WriteLine( "Name: {0}", curPrincipal->Identity->Name );
         Console::WriteLine( "Authenticated: {0}", curPrincipal->Identity->IsAuthenticated );
         Console::WriteLine();
      }
   }

};

int main()
{
   
   // Create a new thread with a generic principal.
   Thread^ t = gcnew Thread( gcnew ThreadStart( ADPrincipal::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 = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();
   
   // Create a principal to use for new threads.
   IIdentity^ identity = gcnew GenericIdentity( "NewUser" );
   IPrincipal^ principal = gcnew GenericPrincipal( identity,nullptr );
   currentDomain->SetThreadPrincipal( principal );
   
   // Create a new thread with the principal created above.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();
   
   // Wait for user input before terminating.
   Console::ReadLine();
}

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();
		}
	}
}
Imports System
Imports System.Security.Principal
Imports System.Threading

Class ADPrincipal
    Overloads Shared Sub Main(ByVal args() As String)
        ' Create a new thread with a generic principal.
        Dim t As New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Set the principal policy to WindowsPrincipal.
        Dim currentDomain As AppDomain = AppDomain.CurrentDomain
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)

        ' The new thread will have a Windows principal representing the
        ' current user.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Create a principal to use for new threads.
        Dim identity = New GenericIdentity("NewUser")
        Dim principal = New GenericPrincipal(identity, Nothing)
        currentDomain.SetThreadPrincipal(principal)

        ' Create a new thread with the principal created above.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Wait for user input before terminating.
        Console.ReadLine()
    End Sub 'Main


    Shared Sub PrintPrincipalInformation()
        Dim curPrincipal As IPrincipal = Thread.CurrentPrincipal
        If Not (curPrincipal Is Nothing) Then
            Console.WriteLine("Type: " & CType(curPrincipal, Object).GetType().Name)
            Console.WriteLine("Name: " & curPrincipal.Identity.Name)
            Console.WriteLine("Authenticated: " & curPrincipal.Identity.IsAuthenticated)
            Console.WriteLine()

        End If
    End Sub 'PrintPrincipalInformation
End Class 'ADPrincipal 

Comentarios

El establecimiento de este valor solo será efectivo si se establece antes de utilizar Thread.CurrentPrincipal la propiedad.Setting this value will only be effective if you set it before using the Thread.CurrentPrincipal property. Por Thread.CurrentPrincipal ejemplo, si establece en una entidad de seguridad determinada (por ejemplo, una entidad de seguridad genérica) y, a continuación, usa el SetPrincipalPolicy método para establecer PrincipalPolicy en WindowsPrincipal, la entidad de seguridad actual seguirá siendo la entidad de seguridad genérica.For example, if you set Thread.CurrentPrincipal to a given principal (for example, a generic principal) and then use the SetPrincipalPolicy method to set the PrincipalPolicy to WindowsPrincipal, the current principal will remain the generic principal.

Seguridad

SecurityPermission
permite manipular el objeto principal.for ability to manipulate the principal object. Enumeración asociada: ControlPrincipal.Associated enumeration: ControlPrincipal. Acción de seguridad Demand:.Security action: Demand.

Se aplica a