Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método AppDomain.SetThreadPrincipal (IPrincipal)

 

Publicado: noviembre de 2016

Establece el objeto principal predeterminado que se va a asociar a los subprocesos si éstos intentan enlazarse a un principal mientras se ejecutan en este dominio de aplicación.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)]
public void SetThreadPrincipal(
	IPrincipal principal
)

Parámetros

principal
Type: System.Security.Principal.IPrincipal

Objeto principal que se va a asociar a los subprocesos.

Exception Condition
ArgumentNullException

El valor de principal es null.

PolicyException

Ya se ha establecido la entidad de seguridad de subprocesos.

AppDomainUnloadedException

La operación se intenta en un dominio de aplicación descargado.

En el ejemplo siguiente se muestra el efecto de usar el SetThreadPrincipal método para cambiar la entidad de seguridad que está disponible para asociar a los subprocesos que se ejecutan en el dominio de aplicación. También se muestra el efecto en los subprocesos del uso de la SetPrincipalPolicy método para cambiar la directiva principal del dominio de aplicación.

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();
		}
	}
}

SecurityPermission

for ability to manipulate the principal object. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.ControlPrincipal. Security action: F:System.Security.Permissions.SecurityAction.Demand.

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: