Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Windows Passwort überprüfen (https://www.delphipraxis.net/159247-windows-passwort-ueberpruefen.html)

1234567890987654321 19. Mär 2011 17:56


Windows Passwort überprüfen
 
Hallo,
ich verwende diesen Code, um zu überprüfen ob Password=Windows Passwort:
Code:
function NetUserChangePassword(
domainname : Pwidechar; { IN OPTIONAL }
username : Pwidechar; { IN OPTIONAL }
oldpassword: Pwidechar; { IN }
newpassword: Pwidechar { IN }
): DWORD; stdcall;
external netapi32 name 'NetUserChangePassword';

implementation

function isPw(User, Password: String):boolean;
var
NewPassword: array [0..1023] of WideChar;
OldPassword: array [0..1023] of WideChar;
UserBuff  : array [0..1023] of WideChar;
UserName: PWideChar;
begin
StringToWideChar(Password, PWideChar(@NewPassword[0]), SizeOf(NewPassword));
StringToWideChar(Password, PWideChar(@OldPassword[0]), SizeOf(OldPassword));

StringToWideChar(User, PWideChar(@UserBuff[0]), SizeOf(UserBuff));
UserName := PWideChar(@UserBuff[0]);

if NetUserChangePassword(nil, UserName,
PWideChar(@OldPassword[0]), PWideChar(@NewPassword[0]))=0 then
result:=True
else
result:=False;
end;
Diesen Code habe ich von http://entwickler-forum.de/showthread.php?t=36129
Es kommt aber immer dasselbe: Result:=False;
Auch wenn das Pw und Username richig sind.

Was ist an diesem Code falsch?

mkinzler 19. Mär 2011 17:59

AW: Windows Passwort überprüfen
 
Versuch mal die Strings vorher zu trimmen.
Ungenügend Rechte?

1234567890987654321 19. Mär 2011 18:00

AW: Windows Passwort überprüfen
 
Ich bin Admin,
und was meinst du mit Strings Trimmen?

Luckie 19. Mär 2011 18:01

AW: Windows Passwort überprüfen
 
Nutz dazu die Unit SSPIValidatePassword.pas: http://www.michael-puff.de/Programmierung/Delphi/Units/

Null heißt, dass das Passwort erfolgreich geändert wurde. Und ich bin mir nicht sicher, ob das auch funktioniert, wenn es gar nicht geändert wurde. Wesentlich informativer wäre der tatsächliche Rückgabewert der Funktion.

mkinzler 19. Mär 2011 18:03

AW: Windows Passwort überprüfen
 
Zitat:

und was meinst du mit Strings Trimmen?
Eventuelle Leerzeichen entfernen ->
Delphi-Quellcode:
Trim()

1234567890987654321 19. Mär 2011 18:06

AW: Windows Passwort überprüfen
 
Sind keine drin, der Aufruf ist:
Code:
showmessage(booltostr(isPW('Tim', '123')));

1234567890987654321 21. Mär 2011 07:20

AW: Windows Passwort überprüfen
 
Push

himitsu 21. Mär 2011 08:36

AW: Windows Passwort überprüfen
 
Das ganze Stringkopieren kann man sich sparen

Delphi-Quellcode:
function isPw(const User, Password: String): Boolean;
begin
  Result := NetUserChangePassword(nil, PWideChar(WideString(User)),
    PWideChar(WideString(Password)), PWideChar(WideString(Password)) = 0;
end;
Delphi-Quellcode:
function isPw(const User, Password: String): Boolean;
var Err: LongWord;
begin
  Err := NetUserChangePassword(nil, PWideChar(WideString(User)),
    PWideChar(WideString(Password)), PWideChar(WideString(Password));
  Result := Err = 0;
  if not Result then
    ShowMessage(IntToStr(Err) + ': ' + SysErrorMessage(Err));
end;
Was sagt denn die Fehlermeldung?
Hast du es mal mit einer Angabe des Domainnamen versucht?
Schonmal die SSPIValidatePassword.pas versucht?

(ob SysErrorMessage überhaupt ein passendes Ergebnis liefert, weiß ich jetzt nicht)


Und was passiert, wenn du mal das Passwort änderst?
Delphi-Quellcode:
function isPw(const User, Password, NewPassowrd: String): Boolean;
var Err: LongWord;
begin
  Err := NetUserChangePassword(nil, PWideChar(WideString(User)),
    PWideChar(WideString(Password)), PWideChar(WideString(NewPassowrd));
  Result := Err = 0;
  if not Result then
    ShowMessage(IntToStr(Err) + ': ' + SysErrorMessage(Err));
end;

rollstuhlfahrer 21. Mär 2011 16:31

AW: Windows Passwort überprüfen
 
Warum wird denn die Passwort-Ändern-Funktion benutzt? - Windows bietet doch über MSDN-Library durchsuchenLogonUser() ausreichend Informationen, ob das PW stimmt oder nicht.

Bernhard

PS: Nicht vergessen das Handle zu schließen (auch bei 0).


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz