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/)
-   -   Delphi NetUserGetInfo findet User auf Domänenrechner nicht? (https://www.delphipraxis.net/85553-netusergetinfo-findet-user-auf-domaenenrechner-nicht.html)

Christian Seehase 1. Feb 2007 13:19


NetUserGetInfo findet User auf Domänenrechner nicht?
 
Moin Zusammen,

könnte bitte mal jemand dieses Codestück ausprobieren:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

type
  NET_API_STATUS = DWORD;

  PUSER_INFO_1 = ^USER_INFO_1;
  USER_INFO_1 = packed record
    usri1_name        : PWideChar;
    usri1_password    : PWideChar;
    usri1_password_age : DWORD;
    usri1_priv        : DWORD;
    usri1_homedir     : PWideChar;
    usri1_comment     : PWideChar;
    usri1_flags       : DWORD;
    usri1_script_path : PWideChar;
  end;

const
  NERR_Success        = 0;        // LMErr.h
  USER_PRIV_GUEST     = 0;        // LMaccess.h
  USER_PRIV_USER      = 1;        // LMaccess.h
  USER_PRIV_ADMIN     = 2;        // LMaccess.h

  function NetUserGetInfo(const servername : PWideChar;const username : PWideChar;
    const level : DWORD;const bufptr : Pointer) : NET_API_STATUS; stdcall; external 'netapi32.dll';

  function NetApiBufferFree(const buffer : Pointer) : NET_API_STATUS; stdcall; external 'netapi32.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var
  dwSize  : DWORD;
  pwBuf   : PWideChar;
  sAccount : string;
  dwResult : DWORD;
  pui     : PUSER_INFO_1;

begin
  sAccount := ''; // Hier bitte den Account eintragen
  dwSize  := (length(sAccount)+1)*2;
  pwBuf   := AllocMem(dwSize);
  try
    StringToWideChar(sAccount,pwBuf,dwSize);
    dwResult := NetUserGetInfo(nil,pwBuf,1,@pui);
    if dwResult = NERR_Success then begin
      try
        case pui.usri1_priv of
          USER_PRIV_GUEST : ShowMessage('Gast');
          USER_PRIV_USER : ShowMessage('Benutzer');
          USER_PRIV_ADMIN : ShowMessage('Administrator');
          else ShowMessage('Unbekannt');
        end;
      finally
        NetApiBufferFree(pui);
      end;
    end else begin
      ShowMessage(SysErrorMessage(dwResult)+#13#10+IntToStr(dwResult));
    end;
  finally
    FreeMem(pwBuf,dwSize);
  end;
end;

end.
Auf einem XP-Pro SP2 Rechner, der sich in einer Domäne befindet, und an dem sich ein Domänenuser mit lokalen Administrationsrechten angemeldet hat meldet mir dieses Codestück:
---------------------------
Project1
---------------------------
Der Benutzername konnte nicht gefunden werden
2221
---------------------------
OK
---------------------------

Auf einem XP-Pro SP2 Rechner, der sich in einer Arbeitsgruppe befindet, und an dem ein lokaler User mit lokalen Administrationsrechten angemeldet ist, funktioniert der Aufruf problemlos...

Der gleiche Effekt tritt auch bei NetUserGetLocalGroups auf.

Falls jemand eine Idee hat, ohne es auszuprobieren: Immer her damit ;-)

Olli 1. Feb 2007 13:24

Re: NetUserGetInfo findet User auf Domänenrechner nicht?
 
Sollte der erste Parameter nicht auf den Domainserver verweisen? Immerhin willst du ihn doch in der Domain suchen, den Benutzer. Anders als bei anderen Funktionen, welche dann automatisch auf den Domainserver zurueckgreifen, ist das m.M.n. bei dieser Funktion nicht der Fall. Ist ja noch eine aus NT4-Zeiten.

Christian Seehase 1. Feb 2007 13:32

Re: NetUserGetInfo findet User auf Domänenrechner nicht?
 
Moin Olli,

danke, in der Richtung hatte ich auch schon überlegt, bin mir aber ziemlich sicher, dass ich es schon in einer Domäne erfolgreich benutzen konnte.
Immerhin hast Du mich dadurch aber schon einmal in die richtige Richtung "geschubst": Es gibt ja auch noch die NetWkstaXXX-Funktionen...

Christian Seehase 1. Feb 2007 18:33

Re: NetUserGetInfo findet User auf Domänenrechner nicht?
 
Moin Olli,

nochmal danke.
Du hast mich auf den richtigen Weg gebracht:
Erst mit NetWkstaUserGetInfo (Level 1) die Anmeldedomäne und den Usernamen ermitteln, dann mit NetUserGetLocalGroups (username = Domäne\User) die Gruppen ermittelt.
War zwar nicht 100%ig das was ich wollte, genügt aber in diesem Fall.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz