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