Ich möchte in meiner Anwendung einen Login-Dialog schreiben, bei dem geprüft wird, ob der eingegebene Benutzer mit Kennwort in Windows existiert. Gibt es dazu eine Funktion in der Dotnet-Klassenbibliothek? Kann ich winlogon.exe verwenden?
Announcement
Collapse
No announcement yet.
Windows-Kennwort prüfen
Collapse
X
-
Hallo,
für den P/Invoke-Aufruf der Win32-API-Funktion <b>LogonUser</b> habe ich nur ein VB.NET-Beispiel am Lager:
<pre>
Imports System.Security.Principal
Imports System.Runtime.InteropServices
<br>
...
<br>
<DllImport("advapi32.dll")> _
Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, _
ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As Integer) As Boolean
End Function
<br>
<DllImport("Kernel32.dll")> _
Public Shared Function GetLastError() As Integer
End Function
<br>
Private sNewUserName As String = "Administrator"
Private sNewUserPasswd As String = "yxz"
Private sNewUserDomain As String = "P4XP"
<br>
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Default-Zustand anzeigen: Rechnername\ASPNET
Me.Label1.Text = System.Security.Principal.WindowsIdentity.GetCurre nt().Name
' LogonUser = anderers Benutzerkonto aktivieren
Dim iLUToken As Integer
Dim bLoggedOn As Boolean = LogonUser(sNewUserName, sNewUserDomain, sNewUserPasswd, 3, 0, iLUToken)
Dim iLastError As Integer = GetLastError()
If ((iLastError <> 0) AndAlso (iLastError <> 126)) Then
Me.Label2.Text = iLastError.ToString()
Else
Me.Label2.Text = "Logon User war erfolgreich: " + bLoggedOn.ToString()
End If
' Impersonate
Dim aWIToken As IntPtr = New IntPtr(iLUToken)
Dim aNewWI As WindowsIdentity = New WindowsIdentity(aWIToken)
Dim aNewWIC As WindowsImpersonationContext = aNewWI.Impersonate()
' Erfolg anzeigen: Rechnername\Administator
Me.Label3.Text = System.Security.Principal.WindowsIdentity.GetCurre nt().Name
' Impersonate rückgängig machen
aNewWIC.Undo()
' Erfolg anzeigen: Rechnername\ASPNET
Me.Label4.Text = System.Security.Principal.WindowsIdentity.GetCurre nt().Name
End Sub
</pre>
Comment