Announcement

Collapse
No announcement yet.

Windows-Kennwort prüfen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Windows-Kennwort prüfen

    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?

  • #2
    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&gt

    Comment

    Working...
    X