Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

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

NetUserGetInfo findet User auf Domänenrechner nicht?

  Alt 1. Feb 2007, 14: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