Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD (https://www.delphipraxis.net/117508-benutzer-kennwort-erforderlich-uf_passwd_notreqd.html)

marabu 25. Jul 2008 06:42

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
 
Moin,

ich habe deinen Code etwas "umgeschrieben":

Delphi-Quellcode:
const
  UF_PASSWD_NOTREQD = 32;
  UNLEN = 20; // 256 for groupnames
  NERR_SUCCESS = 0;

TYPE
  USER_INFO_1 = record
    usri1_name: LPWSTR;
    usri1_password: LPWSTR;
    usri1_password_age: DWORD;
    usri1_priv: DWORD;
    usri1_home_dir: LPWSTR;
    usri1_comment: LPWSTR;
    usri1_flags: DWORD;
    usri1_script_path: LPWSTR;
  end;
  TUserInfo1 = USER_INFO_1;
  PUserInfo1 = ^TUserInfo1;

function PasswordNotRequired: Boolean;
var
  ui: PUserInfo1;
  p: Pointer absolute ui;
  un: WideString;
  n: Cardinal;
begin
  p := nil;
  n := Succ(UNLEN);
  SetLength(un, UNLEN);
  Result := GetUserNameW(@un[1], n)
    and (NetUserGetInfo(nil, @un[1], 1, p) = NERR_SUCCESS)
    and ((ui.usri1_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD);
  if Assigned(p) then
    NetApiBufferFree(p);
end;
Grüße vom marabu

F.W. 25. Jul 2008 12:54

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
 
Leider funktioniert der Code auch nicht :-(

Ich kann es mir zwar nicht vorstellen, aber kann es vlt. daran liegen, dass ich WinXP Home habe?

RWarnecke 25. Jul 2008 20:38

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
 
Moin, moin,

der Code von marabu funktioniert bei mir unter Windows VISTA x64 hervorragend, aber unter Window XP Prof. XP3 funktioniert er auch nicht. :gruebel:

Edit:
Ich habe jetzt noch ein bisschen rumprobiert und die USER_INFO_1008 gefunden. Die beinhaltet lediglich nur den Wert, den Du benötigst. Dazu habe ich jetzt den Code oben von marabu angepasst und es funktioniert unter Windows XP Prof. SP2.

Delphi-Quellcode:
const
  UF_PASSWD_NOTREQD = 32;
  UNLEN = 20; // 256 for groupnames
  NERR_SUCCESS = 0;

TYPE
  USER_INFO_1008 = record
    usri1008_flags: DWORD;
  end;
  TUserInfo1008 = USER_INFO_1008;
  PUserInfo1008 = ^TUserInfo1008;

  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 PasswordNotRequired: Boolean;
var
  ui: PUserInfo1008;
  p: Pointer absolute ui;
  un: WideString;
  n: Cardinal;
begin
  p := nil;
  n := Succ(UNLEN);
  SetLength(un, UNLEN);
  Result := GetUserNameW(@un[1], n)
    and (NetUserGetInfo(nil, @un[1], 1, p) = NERR_SUCCESS)
    and ((ui.usri1008_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD);
  if Assigned(p) then
    NetApiBufferFree(p);
end;
Probiere es einfach mal aus.

F.W. 26. Jul 2008 00:57

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
 
Hurra! Es funktioniert! Ich danke euch allen und speziell natürlich RWarnecke :-)

Danke! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.
Seite 2 von 2     12   

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