Es klappt einfach nicht!
Der folgende Code enthält nie das UF_PASSWD_NOTREQD-Flag, egal ob ich ein Kennwort besitze oder nicht?!
Delphi-Quellcode:
USER_INFO_1 = record
usri1_name: LPWSTR;
usri1_password: LPWSTR;
usri1_password_age: DWORD;
usri1_priv: DWORD;
usri1_homde_dir: LPWSTR;
usri1_comment: LPWSTR;
usri1_flags: DWORD;
usri1_script_path: LPWSTR;
end;
function NetUserGetInfo(servername: LPCWSTR; username: LPCWSTR; level: DWORD; var bufptr: Pointer): DWORD;
stdcall; external 'netapi32.dll' name 'NetUserGetInfo';
function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall;
external 'netapi32.dll' name 'NetApiBufferFree';
{ ... }
function TMainForm.PasswordNotRequired: Boolean;
const
UF_PASSWD_NOTREQD = 32;
var
Info: USER_INFO_1;
P: Pointer;
UserName: PWideChar;
nSize: Cardinal;
R: DWORD;
begin
Result := True;
nSize := 0;
GetUserNameW(NIL, nSize);
GetMem(UserName, nSize*2+1);
GetUserNameW(UserName, nSize);
if NetUserGetInfo(NIL, UserName, 1, P) = 0 then begin
Info := USER_INFO_1(P^);
Result := ((Info.usri1_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD);
end;
NetApiBufferFree(P);
FreeMem(UserName);
end;
Liegts an meinem Code?
Ich bin auch gern bereit eine andere Methode zu benutzen,
um rauszubekommen, ob der user ein Passwort hat oder nicht! (Nur die JEDIs wollte ich nicht erst wieder drauf machen, die sind soo viel ^^ )