AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi NetUserGetInfo findet User auf Domänenrechner nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

NetUserGetInfo findet User auf Domänenrechner nicht?

Ein Thema von Christian Seehase · begonnen am 1. Feb 2007 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#1

NetUserGetInfo findet User auf Domänenrechner nicht?

  Alt 1. Feb 2007, 13:19
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: NetUserGetInfo findet User auf Domänenrechner nicht?

  Alt 1. Feb 2007, 13:24
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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: NetUserGetInfo findet User auf Domänenrechner nicht?

  Alt 1. Feb 2007, 13:32
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...
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: NetUserGetInfo findet User auf Domänenrechner nicht?

  Alt 1. Feb 2007, 18:33
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:06 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