AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Thema durchsuchen
Ansicht
Themen-Optionen

Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

Ein Thema von F.W. · begonnen am 19. Jul 2008 · letzter Beitrag vom 26. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 12:42
Ich schreibe gerade an einem kleinen Programm, welches den normalen Herunterfahren- und Abmeldendialog ersetzen soll. (also nicht im System ersetzen, man startet einfach das Programm an Stelle von Computer Ausschalten im Startmenü)

Für alles weitere: ich benutze WinXP Home
Da soll auch Bildschirm sperren mit rein. Nun soll der Button dafür aber nur dann angezeigt werden, wenn der Benutzer auch ein Passwort hat, ansonsten ist es ja sinnlos.
Also habe ich mit der NetUserGetInfo funktion angefangen, bin nun aber am Ende meines Einfallsreichtums
Mein Hauptproblem ist jetzt: Ich weiß einfach nicht, woher ich den Wert von UF_PASSWD_NOTREQD bekomme!

Mal so noch zum drüber sehen meine Funktion:
Delphi-Quellcode:
  USER_INFO_1 = packed 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.dllname 'NetUserGetInfo';

  function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall;
           external 'netapi32.dllname 'NetApiBufferFree';

 { ... }

function TMainForm.IsPasswordRequired: Boolean;
const
 UF_PASSWD_NOTREQD = 32;
var
 Info: USER_INFO_1;
 P: Pointer;
 UserName: PWideChar;
 nSize: Cardinal;
begin
 nSize := 0;
 GetUserNameW(NIL, nSize);
 GetMem(UserName, nSize*2+1);
 GetUserNameW(UserName, nSize);

 NetUserGetInfo(NIL, UserName, 1, P);
 Info := USER_INFO_1(P^);
 Result := not ((Info.usri1_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD);

 NetApiBufferFree(P);
 FreeMem(UserName);
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 13:07
Hallo,

solche Konstanten findest du im Windows SDK - einfach per GREP über das Verzeichnis INCLUDE drüber und da hast du dann in der Datei LMaccess.h:

Code:
//
//  Bit masks for field usriX_flags of USER_INFO_X (X = 0/1).
//

#define UF_SCRIPT                         0x0001
#define UF_ACCOUNTDISABLE                 0x0002
#define UF_HOMEDIR_REQUIRED               0x0008
#define UF_LOCKOUT                        0x0010
#define UF_PASSWD_NOTREQD                 0x0020
#define UF_PASSWD_CANT_CHANGE             0x0040
#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x0080
Oder du verwendest die JEDI Units JwaLM bzw. JwaLMaccess.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#3

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 19:23
Zitat:
solche Konstanten findest du im Windows SDK
In der Windows SDK Hilfe oder in einer Datei?
Wenn in der Hilfe - wo?
Wenn als Datei - wie heißt sie/wo ist sie?

Irgendwas klappt da bei mir noch nicht, aber allein um auszuwerten, was die Funktion zurückgibt fehlen mir schonwieder die nächsten Konstanten, daher würde ich gern genau wissen, ob ich diese Deklarationen schon auf meinem Computer habe und nur nicht finde.
Ich hab Delphi 7 Personal
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 20:57
Hallo,

zum Windows SDK gehören u.a. alle C++ Header Files für die dokumentierten APIs. Den aktuellen SDK kannst du dir bei Microsoft ziehen. Falls du nicht breit genug angebunden bist, dann gibt es eventuell die Möglichkeit sich den SDK gegen eine Aufwandspauschale auf DVD schicken zu lassen. Ob das so ist musst du selbst prüfen. Alleine das INCLUDE-Verzeichnis belegt als ZIP-Archiv etwa 10MB. Die relevante Header-Datei hatte ich angegeben. Eventuell ist es für dich günstiger, wenn du dir die JEDI Windows API besorgst. Auch die relevanten Units dort hatte ich angegeben.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#5

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 21:11
Gut, bei MS ist das zeug 1,3 GB groß, dann glaub ich nicht, dass das bei meiner Delphi-Installation mit auf meine Platte gekommen ist.

Was ist denn da noch drin, dass das so groß ist
Ich hab zwar ne DSL Flat, aber dafür ist mir die Verbindung doch wieder zu langsam, dass ich ne ganze DVD ziehe und nachher brauch ich nur n paar Zeilen.
Gibts das auch stückchenweise? Also eben wie du sagtest alle Header-Dateien in einem kleinen Archiv?

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 21:14
Guckst du bei MSDN-Library ob du was findest.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 21:34
Du könntest auch einfach dem Link "Web-Setup" im Abschnitt "Instructions" auf der von mir verlinkten MS-Seite folgen. Mit diesem Setup holst du dir den 500KB großen Setup-Manager und wählst nur die Sachen aus, die du wirklich (Header Files) brauchst. Wenn du Glück hast, hält sich das in Grenzen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 19. Jul 2008, 21:40
Jupp, tut es. Ich habe mir so nur das reine Windows SDK und die Header installiert, ging ruckzuck mit DSL3000.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#9

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 23. Jul 2008, 12:42
Sooo, ich habs jetzt endlich geschafft!

Ich hatte das WebSetup zwar benutzt, aber bei meiner ersten Installation wurde nichts installiert (obwohl ich die mir wichtigen Dinge ausgewählt hatte), weil ich da das Visual C++ Express noch nicht drauf hatte (oder ein ähnliches Produkt).

Jetzt hats jedenfalls funktioniert! Danke nochmal an alle!
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#10

Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD

  Alt 24. Jul 2008, 15:05
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.dllname 'NetUserGetInfo';

  function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall;
           external 'netapi32.dllname '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 ^^ )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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