LogonUserEx (advapi32)
Last changed: Andreas Andreou-213.207.151.22

.
Summary
The LogonUserEx function attempts to log a user on to the local computer. The local computer is the computer from which LogonUserEx was called. You cannot use LogonUserEx to log on to a remote computer. You specify the user with a user name and domain, and authenticate the user with a plaintext password. If the function succeeds, you receive a handle to a token that represents the logged-on user. You can then use this token handle to impersonate the specified user or, in most cases, to create a process that runs in the context of the specified user.

C# Signature:

[DllImport("advapi32.dll", SetLastError=true)]

public static extern bool LogonUserEx(

  string lpszUsername,
  string lpszDomain,
  string lpszPassword,
  int dwLogonType,
  int dwLogonProvider,
  out IntPtr phToken,
  IntPtr ppLogonSid, // nullable
  IntPtr ppProfileBuffer, // nullable
  IntPtr pdwProfileLength, // nullable
  IntPtr pQuotaLimits // nullable

);

VB Signature:

<DllImport("advapi32.dll", SetLastError:=True)> _

Private Shared Function LogonUserEx( _

  ByVal lpszUsername As String, _
  ByVal lpszDomain As String, _
  ByVal lpszPassword As String, _
  ByVal dwLogonType As Integer, _
  ByVal dwLogonProvider As Integer, _
  <Out()> ByRef phToken As IntPtr, _
  ByVal ppLogonSid As IntPtr, _
  ByVal ppProfileBuffer As IntPtr, _
  ByVal pdwProfileLength As IntPtr, _
  ByVal pQuotaLimits As IntPtr _

) As Integer

End Function

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

This is new in Server2003 and XP.

Tips & Tricks:

Please add some!

Sample Code:

Private Enum Logon32Type

  Interactive = 2
  Network = 3
  Batch = 4
  Service = 5
  Unlock = 7
  NetworkClearText = 8
  NewCredentials = 9

End Enum

Private Enum Logon32Provider

  [Default] = 0
  WinNT40 = 2
  WinNT50 = 3

End Enum

Public Shared Function LogonUser(ByVal userName As String, ByVal domain As String, ByVal password As String) As IntPtr

  Dim token As IntPtr = IntPtr.Zero
  If LogonUserEx(userName, domain, password, Logon32Type.Batch, Logon32Provider.Default, token, Nothing, Nothing, Nothing, Nothing) = 0 Then
    Throw New ComponentModel.Win32Exception(Marshal.GetLastWin32Error())
  End If
  Return token

End Function

Documentation
LogonUserEx on MSDN