![]() |
LogonUser nicht möglich bei leerem PWD
Hallo,
ich veruche die eingebenen Benutzerdaten, zur Anmeldung am System (Vista/Win7), zu überprüfen in dem ich ein LogonUser durchführe. Ist bei einem User ein Passwort hinterlegt, funktioniert das Ganze. Ohne Passwort bekomme ich leider ein False zurück auch GetLastError liefert keine aufschlussreiche Fehlermeldung. Ideen???
Delphi-Quellcode:
// FUser, FDomain, FPass sind Klassenvariablen
function TProcessOptions.CanLogon: Boolean; var sil: TSecurityImpersonationLevel; ltoken : Cardinal; begin ZeroMemory(@sil,sizeof(sil)); sil := SecurityIdentification; Result:=LogonUser(PAnsiChar(String(FUser)), PAnsiChar(String(FDomain)), PAnsiChar(String(FPass)), LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,ltoken); end; |
Re: LogonUser nicht möglich bei leerem PWD
Zitat:
das ist wahrscheinlich das Gleiche wie bei Autologon und da ist es Absicht und auch so dokumentiert. Gruss Reinhard |
Re: LogonUser nicht möglich bei leerem PWD
Schön aber wie kann ich jetzt überprüfen ob es möglich ist den Benutzer mit den Daten anzumelden???
|
Re: LogonUser nicht möglich bei leerem PWD
Der Konsolenbefehl "RunAsUser" von Windows selbst funktioniert aiuch nur, wenn der Benutzer ein Passwort hinterlegt hat, weil der zugehörige Dienst eins verlangt aus Sicherheitsgründen.
Versuch mal mit dieer Unit: ![]() |
Re: LogonUser nicht möglich bei leerem PWD
Zitat:
|
Re: LogonUser nicht möglich bei leerem PWD
Prima. Danke. Fehlt noch Windows 7.
|
Re: LogonUser nicht möglich bei leerem PWD
zu SSPIValidatePassword.pas
Delphi-Quellcode:
AddEntry wird niemals FALSE liefern, da GetMem eine Exception wirft, wenn der Speicher nicht reserviert werden kann. (also True oder Exception)
function AddEntry(dwKey: DWORD; pData: pointer): boolean;
var pTemp: PNode; begin GetMem(pTemp, sizeof(TNode)); if Assigned(pTemp) then begin ... result := True end else result := False end; dieses
Delphi-Quellcode:
könnte man auch so kürzen
FillChar(AuthIdentity, sizeof(AuthIdentity), 0);
if DomainName <> '' then begin AuthIdentity.Domain := PChar(DomainName); AuthIdentity.DomainLength := Length(DomainName) end; if UserName <> '' then begin AuthIdentity.User := PChar(UserName); AuthIdentity.UserLength := Length(UserName); end; if Password <> '' then begin AuthIdentity.Password := PChar(Password); AuthIdentity.PasswordLength := Length(Password) end; AuthIdentity.Flags := SEC_WINNT_AUTH_IDENTITY_ANSI;
Delphi-Quellcode:
AuthIdentity.Domain := Pointer(DomainName);
AuthIdentity.DomainLength := Length(DomainName) AuthIdentity.User := Pointer(UserName); AuthIdentity.UserLength := Length(UserName); AuthIdentity.Password := Pointer(Password); AuthIdentity.PasswordLength := Length(Password) AuthIdentity.Flags := SEC_WINNT_AUTH_IDENTITY_ANSI;
Delphi-Quellcode:
auch wenn es nicht falsch ist, aber warum nicht FreeMem?
function SSPLogonUser(const DomainName, UserName, Password: string): boolean;
ReallocMem(pClientBuf, 0); ReallocMem(pServerBuf, 0); |
Re: LogonUser nicht möglich bei leerem PWD
Habs korrigiert.
|
Re: LogonUser nicht möglich bei leerem PWD
Leider funktioniert auch diese Version von LogonUser unter Win7 mit leerem Passwort nicht :-( und ja die Domain und der Benutzer ist korrekt geschrieben ;-)
Hat evtl. noch jemand eine Idee??? [EDIT:] Es kommt die Exception "init context failed: -2146893044" inf der function GenServerContext.... [EDIT2:] Exception entspricht SEC_I_CONTINUE_NEEDED |
Re: LogonUser nicht möglich bei leerem PWD
Da gibts ne Policy, die man ändern muss:
Siehe auch ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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