Mega Code Archive

 
Categories / C# / Windows
 

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