LogonUser (advapi32)
Last changed: JM-163.116.163.139

.
Summary
allows you to programmatically log on a user.

C# Signature:

[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, LOGON_TYPE dwLogonType, LOGON_PROVIDER dwLogonProvider, out IntPtr phToken);

VB .NET Signature:

Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As String, _
   ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, _
   ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer

User-Defined Types:

LOGON_PROVIDER

LOGON_TYPE

Notes:

As always, only do SetLastError=true if you actually intend to call GetLastError.

Tips & Tricks:

Please add some!

Sample Code:

IntPtr hToken;
IntPtr hTokenDuplicate;

if (LogonUser(username, domain, password, LOGON_TYPE.LOGON32_LOGON_INTERACTIVE, LOGON_PROVIDER.LOGON32_PROVIDER_DEFAULT, out hToken))
{
     if (DuplicateToken(hToken, 2, out hTokenDuplicate))
     {
     windowsIdentity = new WindowsIdentity(hTokenDuplicate);
     impersonationContext = windowsIdentity.Impersonate();
     }
}

if (hToken != 0) CloseHandle(hToken);
if (hTokenDuplicate != 0) CloseHandle(hTokenDuplicate);

Alternative Managed API:

TODO

Documentation
LogonUser on MSDN