![]() |
benutzername und passwort überprüfen
wie kann man das passwort zu einem benutzernamen überprüfen? sprich ich habe den benutzernamen und ein passwort und will rausfinden, ob das Passwort stimmt
wie geht das? (ohne logonUser, das geht bei mir wegen der rechte nicht...) |
Re: benutzername und passwort überprüfen
Wo speicherst du denn das Passwort, oder wie?
|
Re: benutzername und passwort überprüfen
das Passwort wird in einem edit eingegeben, ebenso wie der Benutzername
|
Re: benutzername und passwort überprüfen
Hi Illu,
wo und wie speicherst du die Datei ab? |
Re: benutzername und passwort überprüfen
ok, verständnisschwierigkeiten:
ich brauch das für ein netzwerk ich hab so einen kleinen "explorer" gefunden, den möcht ich dann unter einem anderen User starten, um auf dessen Dateien zugreifen zu können. Dazu muss ich aber den Benutzernamen und das Passwort einlesen und überprüfen! |
Re: benutzername und passwort überprüfen
Hallo,
versuchs mal so:
Delphi-Quellcode:
// Beispielaufruf var Res: THandle; bValid: Boolean; begin Res := Logon('Knut', '.', 'geheim', LOGON32_LOGON_INTERACTIVE); bValid := (Res <> INVALID_HANDLE_VALUE); if bValid then begin CloseHandle(Res); // Handle unbedingt wieder schließen!! ShowMessage('Logon erfolgreich'); else ShowMessage('Logon fehlgeschlagen'); end; // notwendige Methoden, Konstanten, Typen uses Windows; type TLogonRec = record U, D, P : PChar; Flag : Cardinal; Token : THandle; end; PrivFun = function(var UserData) : bool; const SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege'; procedure PrivilegedExec(const Prv: string; Fun: PrivFun; var UserData); var Acc : THandle; NT : TTokenPrivileges; OT : ^TTokenPrivileges; i : Cardinal; begin if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Acc) then begin // working on NT NT.PrivilegeCount := 1; NT.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, PChar(Pointer(Prv)), NT.Privileges[0].Luid); OT := nil; AdjustTokenPrivileges(Acc, false, NT, 0, OT^, i); try if not Fun(UserData) then RaiseLastOSError; finally AdjustTokenPrivileges(Acc, true, NT, 0, OT^, i); end; end else begin // working on W95/98 if not Fun(UserData) then RaiseLastOSError; end; end; function _Logon2(var Data) : Bool; begin with TLogonRec(Data) do Result := LogonUser(U, D, P, Flag, LOGON32_PROVIDER_DEFAULT, Token); end; function Logon(const User, Domain, Passw: string; Flag: Integer): THandle; var LR : TLogonRec; begin LR.U := PChar(User); LR.D := PChar(Domain); LR.P := PChar(Passw); LR.Flag := Flag; LR.Token := 0; PrivilegedExec(SE_CHANGE_NOTIFY_NAME, _Logon2, LR); Result := LR.Token; end; |
Re: benutzername und passwort überprüfen
sieht gut aus, aber ich bekomme immer 'logon erfolgreich', auch wenn ich das falsche Passwort eingebe!
|
Re: benutzername und passwort überprüfen
Hallo,
Domain und Passwort waren vertauscht:
Delphi-Quellcode:
Eventuell muss dem ausführenden Benutzer noch ein Recht gewährt werden:
Res := Logon(UserNm.Text, '.', PassWd.Text, LOGON32_LOGON_INTERACTIVE);
- secpol.msc ausführen - Lokale Sicherheitsrichtlinien / Zuweisen von Benutzerrechten - Erstellen eines Token-Objekts & Einsetzen als Teil des Betriebsystems für den "Passwort-Prüfer" aktivieren - danach neu anmelden |
Re: benutzername und passwort überprüfen
Zitat:
Zitat:
|
Re: benutzername und passwort überprüfen
wenn das Passwort stimmt, passts,
doch wenn es nicht stimmt exception "...Anmeldung fehlgeschagen: unbekannter Benutzername oder falsches Kennwort..." und zwar hier:
Delphi-Quellcode:
trotz des try-blocks bekomm ich die exception! Warum?
//Prozedur: PrivilegedExec
try if not Fun(UserData) then RaiseLastOSError; //<-- Hier finally AdjustTokenPrivileges(Acc, true, NT, 0, OT^, i); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz