Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Mindest Passwort länge unter NT (https://www.delphipraxis.net/54726-mindest-passwort-laenge-unter-nt.html)

Luckie 10. Okt 2005 16:21


Mindest Passwort länge unter NT
 
Unter Windows NT ff. kann man über die Gruppenrichtlinen einstellen, wie lang ein Passwort mindestens sein muss. Wie kann man diese mindest Passwortlänge ermitteln? Gibt es dazu eine API oder einen Eintrag in der Registry?

Tubos 10. Okt 2005 16:27

Re: Mindest Paswwport länge unter NT
 
Hast du denn Google benutzt?

Da findet man z.B. folgendes:
Zitat:

Registry Settings
User Key: [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Curre ntVersion\Policies\
Network]
System Key: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Policies\
Network]
Value Name: MinPwdLen
Data Type: REG_BINARY (Binary Value)
Bei Google suchenwindows minimum password length <-- 2. Ergebnis.

Ein bisschen Eigeninitiative bitte ;)

mfg. Tubos

Luckie 10. Okt 2005 16:30

Re: Mindest Paswwport länge unter NT
 
Hmpf, wenn man natürlich die falschen Suchbegriffe benutzt kann es ja nichts werden. :roll:

Hm, ich habe das jetzt eingestellt und es funktioniert auch, nur findet sich unter HKLM dieser Eintrag in der Registry nicht. :gruebel:

Luckie 10. Okt 2005 17:29

Re: Mindest Paswwport länge unter NT
 
Ich habe jetzt etwas rumprobiert und habe das gefunden: MSDN-Library durchsuchenNetUserModalsGet und die Struktur dazu:
Delphi-Quellcode:
  TUSER_MODALS_INFO_0 = record
    usrmod0_min_passwd_len: DWORD;
    usrmod0_max_passwd_age: DWORD;
    usrmod0_min_passwd_age: DWORD;
    usrmod0_force_logoff: DWORD;
    usrmod0_password_hist_len: DWORD;
  end;
  PUser_Modals_Info_0 = ^TUser_Modals_Info_0;
Implementation:
Delphi-Quellcode:
function NetUserModalsGet(Servername: LPCWSTR; Level: DWORD; bufptr: Pointer): NET_API_STATUS; stdcall;

//...
 
procedure TForm1.Button1Click(Sender: TObject);
var
  UserModalsInfo : TUSER_MODALS_INFO_0;
  dwRet: DWORD;
begin
  ZeroMemory(@UserModalsInfo, sizeof(TUser_Modals_Info_0));
  dwRet := NetUserModalsGet('hal9000', 0, @UserModalsInfo);
  if dwRet = NERR_Success then
    ShowMessage(IntToStr(UserModalsInfo.usrmod0_min_passwd_len))
  else
    ShowMessage(SysErrorMessage(dwRet));
end;
Aber irgendwie stimmt da was nicht. Er gibt mir 1277160 aus. Die mindest Passwortlänge ist aber vier bei mir. Oder verstehe ich da was falsch:
Zitat:

usrmod0_min_passwd_len
Specifies the minimum allowable password length. Valid values for this element are zero through PWLEN.
und das ist gar nicht das, was ich denke, dass es ist?

Luckie 11. Okt 2005 23:07

Re: Mindest Paswwport länge unter NT
 
*push*

muRR 12. Okt 2005 01:01

Re: Mindest Paswwport länge unter NT
 
Bist du sicher, dass es eine solche Funktion für einen Single-Anwender-Platz gibt? Ich habe mir bei Google grad die Finger wundgesucht, bin aber auch nur auf obiges Ergebnis gestoßen, das sich anscheinend auf ein Netzwerk bezieht. Ansonsten hab ich nur jede Menge Tutorials über Net.exe gefunden. Wird sicher auch nicht weiterhelfen. Werde mich gleich nochmal in der MSDN rumschlagen..

Edit: Tja, leider nicht weiter fündig geworden. Nur etliche Artikel, wie man die Group Policies ändern kann. Jetzt will ich's aber auch wissen :mrgreen:

Gruß

Luckie 12. Okt 2005 01:41

Re: Mindest Paswwport länge unter NT
 
Nun ja, warum soll man es das nicht auch bei einem Arbeitsplatzrechner geben? Nicht jeder Rechner einer Firma, wo es auf Sicherheit ankommt, muss ja an einem Netzwerk hängen.

Aber danke für deine Mühe.

freakfly 12. Okt 2005 09:09

Re: Mindest Passwort länge unter NT
 
Also soweit mir bekannt ist sind die Passwort Richtlinien für Benutzerkonten auch bei Einzelplatzrechnern gültig!
Zumindest trifft dies auf die Gültigkeitsdauer des Passworts zu. Das ist ja von der Konfiguration im gleichen Bereich möglich, deshalb wäre es eigentlich unlogisch beide Dinge getrennt zu behandeln, aber bei MS weiß man das nie...

Olli 12. Okt 2005 10:10

Re: Mindest Paswwport länge unter NT
 
Zitat:

Zitat von Tubos
Hast du denn Google benutzt?
[...]
Ein bisschen Eigeninitiative bitte ;)

... und heute erklärt uns Tubos was passiert, wenn die Policy nicht gesetzt ist *g* :mrgreen: :zwinker:

Der "moderne" Weg ist über MSDN-Library durchsuchenIADsUser (gibt es noch über einen anderen Provider als WinNT:// - nämlich LDAP:// ) mit der Property "PasswordMinimumLength".

Den alten Weg habt ihr ja weiter oben schon gefunden. Andere kenne ich nicht.

Luckie 12. Okt 2005 11:28

Re: Mindest Passwort länge unter NT
 
Welche alte Methode meinst du? Die mit der API scheint nicht zu funktionieren und in der Registry habe ich es an der angegebenen Stelle auch nicht gefunden.

Olli 12. Okt 2005 11:54

Re: Mindest Passwort länge unter NT
 
Zitat:

Zitat von Luckie
Welche alte Methode meinst du? Die mit der API scheint nicht zu funktionieren und in der Registry habe ich es an der angegebenen Stelle auch nicht gefunden.

Ist aber die richtige API - ich gucke mal eben über deinen Code. Wird der XP Usermanager mal wieder aufgerüstet? ... tss tss ... und dann bin ich immernoch nur ein "Tester" :mrgreen:

Luckie 12. Okt 2005 12:09

Re: Mindest Passwort länge unter NT
 
Zitat:

Zitat von Olli
Wird der XP Usermanager mal wieder aufgerüstet?

Jupp und dann gibt es wieder eine neue Version, mit hoffentlich Motzis Schutz. ;)

Olli 12. Okt 2005 12:19

Re: Mindest Passwort länge unter NT
 
Zitat:

Zitat von Luckie
... mit hoffentlich Motzis Schutz. ;)

Habe ihm meine Bedenken zu seiner Methode bereits dargelegt und einen Tip gegeben. Mal sehen was dabei rauskommt. Er hatte mich nämlich über ICQ angesprochen.

Olli 12. Okt 2005 12:50

Re: Mindest Passwort länge unter NT
 
Auweia, Micha, gleich mehrere Anfängerfehler.

1. Doku nicht gelesen
2. Prototyp falsch übersetzt (ich habe der Einfachheit halber DWORD genommen, das ist aber irrelevant)

Also Read The Friendly Manual ... :zwinker:
Delphi-Quellcode:
function NetUserModalsGet(Servername: LPCWSTR; Level: DWORD; var bufptr: Pointer): DWORD; stdcall; external 'Netapi32.dll';

function NetApiBufferFree(buf: Pointer): DWORD; stdcall; external 'Netapi32.dll';

var
  UserModalsInfo: PUSER_MODALS_INFO_0;
  dwRet: DWORD;
const
  NERR_Success = 0;
begin
  UserModalsInfo := nil;
  dwRet := NetUserModalsGet(nil, 0, Pointer(UserModalsInfo));
  if ((dwRet = NERR_Success) and Assigned(UserModalsInfo)) then
    ...
  else
    ...;

  if Assigned(UserModalsInfo) then
    NetApiBufferFree(UserModalsInfo);
end.
Statt Pointer kannste natürlich auch wie immer PByte nehmen - so steht's ja im Header eigentlich. Ist aber schnuppe.

Nachtrag
Kleiner Tip noch: der "DWORD"-Wert den du zurückbekamst war ein Pointer auf dem Heap (hat man am Hex(!)-Zahlenwert schon gesehen).

Luckie 12. Okt 2005 12:59

Re: Mindest Passwort länge unter NT
 
Die Doku habe ich gelesen. Was habe ich denn falsch gesmcht?

Olli 12. Okt 2005 13:07

Re: Mindest Passwort länge unter NT
 
Zitat:

Zitat von Luckie
Die Doku habe ich gelesen.

Ich hoffe das ist als Witz gemeint. Schau mal was im PSDK bei der Beschreibung von MSDN-Library durchsuchenNetUserModalsGet steht.

Zitat:

bufptr
[out] Pointer to the buffer that receives the data. The format of this data depends on the value of the level parameter. This buffer is allocated by the system and must be freed using the MSDN-Library durchsuchenNetApiBufferFree function. For more information, see Network Management Function Buffers and Network Management Function Buffer Lengths.
Dann wäre da noch folgendes Beispiel, wo dir spätestens dein Fehler hätte bewußt werden müssen:
Code:
#ifndef UNICODE
#define UNICODE
#endif

#include <stdio.h>
#include <windows.h>
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
   DWORD dwLevel = 0;
   [color=red]USER_MODALS_INFO_0 *pBuf = NULL;[/color]
   NET_API_STATUS nStatus;
   LPTSTR pszServerName = NULL;

   if (argc > 2)
   {
      fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
      exit(1);
   }
   // The server is not the default local computer.
   //
   if (argc == 2)
      pszServerName = argv[1];
   //
   // Call the NetUserModalsGet function; specify level 0.
   //
   nStatus = NetUserModalsGet(pszServerName,
                              dwLevel,
                              [color=red](LPBYTE *)&pBuf);[/color]
   //
   // If the call succeeds, print the global information.
   //
   [color=red]if (nStatus == NERR_Success)
   {
      if (pBuf != NULL)[/color]
      {
         printf("\tMinimum password length: %d\n", pBuf->usrmod0_min_passwd_len);
         printf("\tMaximum password age (d): %d\n", pBuf->usrmod0_max_passwd_age/86400);
         printf("\tMinimum password age (d): %d\n", pBuf->usrmod0_min_passwd_age/86400);
         printf("\tForced log off time (s): %d\n", pBuf->usrmod0_force_logoff);
         printf("\tPassword history length: %d\n", pBuf->usrmod0_password_hist_len);
      }
   }
   // Otherwise, print the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Free the allocated memory.
   //
   [color=red]if (pBuf != NULL)
      NetApiBufferFree(pBuf);[/color]

   return 0;
}
Zitat:

Zitat von Luckie
Was habe ich denn falsch gesmcht?

Habe ich oben als Punkt 1 und 2 geschrieben. Deinen und meinen Prototypen zu vergleichen sollte nicht zuviel verlangt sein, oder? :zwinker: ... aber ich will mal nicht so sein:
Code:
[b]function[/b] NetUserModalsGet(Servername: LPCWSTR; Level: DWORD; [color=red][u]var[/u][/color] bufptr: Pointer): DWORD; [b]stdcall[/b]; [b]external[/b] 'Netapi32.dll';

Luckie 12. Okt 2005 13:30

Re: Mindest Passwort länge unter NT
 
Danke. Ich dachte, ich hätte den Pointer deklariert, so wie ich es gemacht habe. Gut, das mit dem var stimmt, das habe ich übersehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 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