Feedback

C# - Windows Passwort überprüfen [Übersetzung]

Veröffentlicht von am 15.05.2008
(1 Bewertungen)
Die in C# übersetzte Version von diesem Snippet von Tim Hartwig:
http://dotnet-snippets.de/dns/windows-passwort-ueberpruefen-SID655.aspx
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Aufbau

Nach dieser Schulung können Sie mittels objektorientierter Modelle in VB.NET 2017/2015/2013 wiederverwendbare Elemente eigenständig erstellen.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

[DllImport("advapi32.dll")]
private extern static int LogonUser(string lpszUsernme, string lpszDomain, string lpszPassword, LogonType dwLogonType, int dwLogonProvider, ref IntPtr phToken);

[DllImport("kernel32.dll")]
private extern static bool CloseHandle(IntPtr hObject);
public enum LogonType
{
    LOGON32_LOGON_INTERACTIVE = 2,
    LOGON32_LOGON_NETWORK = 3,
    LOGON32_LOGON_BATCH = 4,
    LOGON32_LOGON_SERVICE = 5,
    LOGON32_LOGON_UNLOCK = 7,
    LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
    LOGON32_LOGON_NEW_CREDENTIALS = 9
}


/// <summary>
/// Determines whether [is NT password valid] [the specified username].
/// </summary>
/// <param name="username">The username.</param>
/// <param name="password">The password.</param>
/// <returns>
/// 	<c>true</c> if [is NT password valid] [the specified username]; otherwise, <c>false</c>.
/// </returns>
public bool IsNTPasswordValid(string username, string password)
{
    return IsNTPasswordValid(username, password, string.Empty);
}


/// <summary>
/// Determines whether [is NT password valid] [the specified username].
/// </summary>
/// <param name="username">The username.</param>
/// <param name="password">The password.</param>
/// <param name="domain">The domain.</param>
/// <returns>
/// 	<c>true</c> if [is NT password valid] [the specified username]; otherwise, <c>false</c>.
/// </returns>
public bool IsNTPasswordValid(string username, string password, string domain)
{
    IntPtr Token = new IntPtr();
    LogonUser(username, domain, password, LogonType.LOGON32_LOGON_INTERACTIVE, 0, ref Token);
    CloseHandle(Token);
    return Token.ToInt32() != 0;
}

3 Kommentare zum Snippet

Mad2007 schrieb am 19.12.2008:
Hallo!

Wenn Du beim letzten Argument dem IntPtr ein "ref" spendierst, dann funktioniert
der Code sogar ;-)

private static int LogonUser(string lpszUsernme, string lpszDomain, string lpszPassword, LogonType dwLogonType, int dwLogonProvider, ref IntPtr phToken);

Nico schrieb am 24.12.2008:
Dann muss man dem Aufruf auch ein ref spendieren.

LogonUser(username, domain, password, LogonType.LOGON32_LOGON_INTERACTIVE, 0, ref Token);

Jan Welker schrieb am 05.01.2009:
Hallo,
danke für die Hinweise. Ich habe den Fehler korrigiert.
Jan
 

Logge dich ein, um hier zu kommentieren!