Logon user on Windows - CSharp System

CSharp examples for System:Windows

Description

Logon user on Windows

Demo Code


using System;//  w  ww  .jav  a2s. c o  m
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("Identity before impersonation = {0}", WindowsIdentity.GetCurrent().Name);

                WindowsImpersonationContext impContext = identity.Impersonate();

                Console.WriteLine("Identity during impersonation = {0}", WindowsIdentity.GetCurrent().Name);

                impContext.Undo();

                Console.WriteLine("Identity after impersonation  = {0}", WindowsIdentity.GetCurrent().Name);

            }
        }
    }

Related Tutorials