// (c) 2006 Richard Grimes // www.grimes.demon.co.uk using System; using System.Threading; using System.Security.Principal; using System.Security.Permissions; class App { static void Main() { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); Thread.CurrentPrincipal = new MyPrincipal("Richard", "NTLM", true); try { Console.WriteLine("called OnlyAdministrators"); OnlyAdministrators(); } catch (Exception) { Console.WriteLine("failed"); } } [PrincipalPermission(SecurityAction.Demand, Role=@"BUILTIN\Administrators")] static void OnlyAdministrators() { Console.WriteLine("OnlyAdministrators called"); } } class MyPrincipal : IPrincipal, IIdentity { string name; string auth; bool isAuth; public MyPrincipal(string name, string auth, bool isAuth) { this.name = name; this.auth = auth; this.isAuth = isAuth; } public IIdentity Identity { get { return this; } } public bool IsInRole(string role) { return true; } public string AuthenticationType { get { return auth; } } public bool IsAuthenticated { get { return isAuth; } } public string Name { get { return name; } } }