Как узнать имя домена Windows NT/2000?

Материал из DRKB


function GetNTDomainName: string;
var
  hReg: TRegistry;
begin
  hReg := TRegistry.Create;
  hReg.RootKey := HKEY_LOCAL_MACHINE;
  hReg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', False);
  Result := hReg.ReadString('DefaultDomainName');
  hReg.CloseKey;
  hReg.Destroy;
end;


Source: Взято из http://forum.sources.ru
ID: 03296



function NetServerGetInfo (serverName : PWideChar; level : Integer;
  var bufptr : Pointer) : Cardinal; stdcall; external 'NETAPI32.DLL';
function NetApiBufferFree (buffer : Pointer) : Cardinal; stdcall; external 'NETAPI32.DLL';

type
  SERVER_INFO_503 = record
    sv503_sessopens : Integer;
    sv503_sessvcs : Integer;
    sv503_opensearch : Integer;
    sv503_sizreqbuf : Integer;
    sv503_initworkitems : Integer;
    sv503_maxworkitems : Integer;
    sv503_rawworkitems : Integer;
    sv503_irpstacksize : Integer;
    sv503_maxrawbuflen : Integer;
    sv503_sessusers : Integer;
    sv503_sessconns : Integer;
    sv503_maxpagedmemoryusage : Integer;
    sv503_maxnonpagedmemoryusage : Integer;
    sv503_enablesoftcompat :BOOL;
    sv503_enableforcedlogoff :BOOL;
    sv503_timesource :BOOL;
    sv503_acceptdownlevelapis :BOOL;
    sv503_lmannounce :BOOL;
    sv503_domain : PWideChar;
    sv503_maxcopyreadlen : Integer;
    sv503_maxcopywritelen : Integer;
    sv503_minkeepsearch : Integer;
    sv503_maxkeepsearch : Integer;
    sv503_minkeepcomplsearch : Integer;
    sv503_maxkeepcomplsearch : Integer;
    sv503_threadcountadd : Integer;
    sv503_numblockthreads : Integer;
    sv503_scavtimeout : Integer;
    sv503_minrcvqueue : Integer;
    sv503_minfreeworkitems : Integer;
    sv503_xactmemsize : Integer;
    sv503_threadpriority : Integer;
    sv503_maxmpxct : Integer;
    sv503_oplockbreakwait : Integer;
    sv503_oplockbreakresponsewait : Integer;
    sv503_enableoplocks : BOOL;
    sv503_enableoplockforceclose : BOOL;
    sv503_enablefcbopens : BOOL;
    sv503_enableraw : BOOL;
    sv503_enablesharednetdrives : BOOL;
    sv503_minfreeconnections : Integer;
    sv503_maxfreeconnections : Integer;
  end;
  PSERVER_INFO_503 = ^SERVER_INFO_503;


function Get_Computer_Name: string;
var
  dwlen: DWORD;
begin
  dwlen := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, dwlen);
  GetComputerName(PChar(Result), dwlen);
  Result := StrPas(PChar(Result));
end;

function GetDomainName: string;
var
  err: Integer;
  buf: Pointer;
  wServerName: WideString;
begin
  Result := '';
  wServerName := Get_Computer_Name;
  err := NetServerGetInfo(PWideChar(wServerName), 503, buf);
  if err = 0 then
  try
    Result := PSERVER_INFO_503(buf)^.sv503_domain;
  finally
    NetAPIBufferFree(buf);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := GetDomainName;
end;


Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03297