LogonUser (advapi32)
Last changed: JM-163.116.163.139

.
Summary
allows you to programmatically log on a user.

C# Signature:

[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(
    string lpszUsername,
    string lpszDomain,
    string lpszPassword,
    int dwLogonType,
    int 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:

None.

Notes:

See MSDN docs for description of various logon types etc.

Tips & Tricks:

Please add some tips or tricks!

Sample Code:

const int LOGON32_LOGON_INTERACTIVE       = 2;
const int LOGON32_LOGON_NETWORK       = 3;
const int LOGON32_LOGON_BATCH         = 4;
const int LOGON32_LOGON_SERVICE       = 5;
const int LOGON32_LOGON_UNLOCK        = 7;
const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
const int LOGON32_LOGON_NEW_CREDENTIALS   = 9;

const int LOGON32_PROVIDER_DEFAULT    = 0;
IntPtr hToken;
IntPtr hTokenDuplicate;

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

if (hToken != IntPtr.Zero) CloseHandle(hToken);
if (hTokenDuplicate != IntPtr.Zero) CloseHandle(hTokenDuplicate);

Alternative Managed API:

TODO

Documentation
LogonUser on MSDN