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/)
-   -   Mindest Passwort länge unter NT (https://www.delphipraxis.net/54726-mindest-passwort-laenge-unter-nt.html)

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:28 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