LogonUser

Aus API-Wiki
Version vom 7. Oktober 2016, 21:23 Uhr von Jochen Wierum (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

Die API-Funktion LogOnUser versucht eine Anmeldung mit dem angegebenen Benutzernamen und Passwort durchzuführen. Ist die Anmeldung erfolgreich, so erhält man ein Token Handle welches dann verwendet werden kann um z.B. Prozesse unter dem angemeldeten Benutzerkonto auszuführen.

Declare Function LogonUser Lib "advapi32.dll" _
                 Alias "LogonUserA" ( _
                 ByVal sUsername As String, _
                 ByVal sDomain As String, _
                 ByVal sPassword As String, _
                 ByVal dwLogonType As Long, _
                 ByVal dwLogonProvider As Long, _
                 ByRef hToken As Long) As Long


Parameter

sUsername

in: Name des Benutzerkontos.

sDomain

in: Domäne in der das Konto existiert. Soll der lokale Computer verwendet werden, so kann "." übergeben werden.

sPassword

in: Passwort des Kontos.

dwLogonType

in: Art des Logons. Meist wird LOGON32_LOGON_BATCH=4 oder LOGON32_LOGON_INTERACTIVE=2 verwendet.

dwLogonProvider

in: Provider der für den Logon verwendet werden soll. Meist LOGON32_PROVIDER_DEFAULT=0

hToken

out: Token zur weiteren Verwendung. Nach Abschluss muss der Token mittels CloseHandle freigegeben werden.

Rückgabe(n)

Die Funktion gibt einen Wert des Types Long ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück.


Beispiel

Die in diesem Beispiel gezeigte Funktion, setzt bei Erfolg die weitere Programmausführung unter einem anderen Benutzerkonto fort. Um wieder zum Ursprünglichen Benutzerkontext zurückzukehren muss RevertToSelf aufgerufen werden.

Option Explicit

Private Declare Function LogonUser Lib "advapi32.dll" Alias "LogonUserA" (ByVal sUsername As String, _
        ByVal sDomain As String, ByVal sPassword As String, ByVal dwLogonType As Long, _
        ByVal dwLogonProvider As Long, hToken As Long) As Long

Private Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" ( _
        ByVal hToken As Long) As Long


Private Declare Function RevertToSelf Lib "advapi32.dll" () As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Private Const LOGON32_LOGON_INTERACTIVE As Long = 2
Private Const LOGON32_PROVIDER_DEFAULT As Long = 0


Public Function Logon(ByVal UserName As String, ByVal Password As String, ByVal Domain As String) As Boolean
    Dim hToken As Long
    
    RevertToSelf
    
    If LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, _
      LOGON32_PROVIDER_DEFAULT, hToken) = 0 Then
        Exit Function
    End If
                                                          
    Logon = ImpersonateLoggedOnUser(hToken)
    CloseHandle hToken
End Function

Hinweise

Um diese Funktion erforlgreich ausführen zu können, muss das Privileg SE_TCB_NAME (Als Teil des Betriebssystems handeln) in dem Prozesstoken aktiviert sein.

Betriebsystem

Die Funktion ist unter folgenden Betriebssystemen funktionsfähig:

  • Windows 2000
  • Windows XP
  • Windows Vista


Verwandte Funktionen

ImpersonateLoggedOnUser - Prozess unter anderem Konto weiterführen
RevertToSelf - zum ursprünglichen Konto zurückkehren


Quelle(n)