WindowsImpersonationContext
using System; using System.IO; using System.Security.Principal; using System.Security.Permissions; using System.Runtime.InteropServices; [assembly: SecurityPermission(SecurityAction.RequestMinimum, UnmanagedCode = true, ControlPrincipal = true)] class MainClass { const int LOGON32_PROVIDER_DEFAULT = 0; const int LOGON32_LOGON_INTERACTIVE = 2; [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] static extern bool LogonUser(string userName, string domain, string password, int logonType, int logonProvider, ref IntPtr accessToken); public static void Main(string[] args) { IntPtr accessToken = IntPtr.Zero; bool success = LogonUser( args[0], // username to log on. ".", // use the local account database. args[1], // user's password. LOGON32_LOGON_INTERACTIVE, // create an interactive login. LOGON32_PROVIDER_DEFAULT, // use the default logon provider. ref accessToken // receives access token handle. ); if (!success) { Console.WriteLine("LogonUser returned error {0}", Marshal.GetLastWin32Error()); } else { WindowsIdentity identity = new WindowsIdentity(accessToken); Console.WriteLine(WindowsIdentity.GetCurrent().Name); WindowsImpersonationContext impContext = identity.Impersonate(); Console.WriteLine(WindowsIdentity.GetCurrent().Name); impContext.Undo(); Console.WriteLine(WindowsIdentity.GetCurrent().Name); } } }
1. | Use Properties of WindowsPrincipal | ||
2. | WindowsPrincipal.IsInRole | ||
3. | Get Current Windows Identity | ||
4. | WindowsBuiltInRole.Administrator | ||
5. | WindowsPrincipal Enables You to Check for Role Membership |