Re: Авторизация средствами NT

From
Sergey Tonkikh ()
To
Grigory Tsukanov
Date
2002-12-19T10:26:25Z
Area
SU.WINDOWS.NT.PROG
From: Sergey Tonkikh <zigzag@abi.vrn.ru>

Привет!

Grigory Tsukanov wrote:
>  ST> Как получить NT-евый список юзеров, уже разобрался,
> и как их получить? (с разделением на локальных, доменных и терминальных)

С разделением по типу мне пока не надо. А вот это работает:

unit Func;
interface

uses Sysutils, Classes, Stdctrls, Comctrls, Graphics, Windows;

////////////////////////////////////////////////////////////////////////////////
{$EXTERNALSYM NetUserEnum}
function NetUserEnum( servername    : LPWSTR;

level,
filter        : DWORD;
bufptr        : Pointer;
prefmaxlen    : DWORD;
entriesread,
totalentries,
resume_handle : LPDWORD    ) : DWORD; stdcall;
external 'NetApi32.dll' Name 'NetUserEnum';

function NetApiBufferFree( Buffer : Pointer{LPVOID} ) : DWORD; stdcall;

external 'NetApi32.dll' Name 'NetApiBufferFree';
////////////////////////////////////////////////////////////////////////////////

procedure GetLocalUserList(ulist: TStringList);

implementation

//------------------------------------------------------------------------------
// возвращает список пользователей локального хоста
//------------------------------------------------------------------------------
procedure GetLocalUserList(ulist: TStringList);
const

NERR_SUCCESS                     =  0;
FILTER_TEMP_DUPLICATE_ACCOUNT    =  $0001;
FILTER_NORMAL_ACCOUNT            =  $0002;
FILTER_PROXY_ACCOUNT             =  $0004;
FILTER_INTERDOMAIN_TRUST_ACCOUNT =  $0008;
FILTER_WORKSTATION_TRUST_ACCOUNT =  $0010;
FILTER_SERVER_TRUST_ACCOUNT      =  $0020;

type

TUSER_INFO_10 = record
usri10_name,
usri10_comment,
usri10_usr_comment,
usri10_full_name     : PWideChar;
end;
PUSER_INFO_10 = ^TUSER_INFO_10;

var

dwERead, dwETotal, dwRes, res : DWORD;
inf  : PUSER_INFO_10;
info : Pointer;
p    : PChar;
i    : Integer;
begin

if ulist=nil then
Exit;
ulist.Clear;


info  := nil;
dwRes := 0;
res := NetUserEnum( nil,
10,
FILTER_NORMAL_ACCOUNT,
@info,
65536,
@dwERead,
@dwETotal,
@dwRes);
if (res<>NERR_SUCCESS) or (info=nil) then
Exit;
p := PChar(info);
for i:=0 to dwERead-1 do begin
inf := PUSER_INFO_10 ( p + i*SizeOf(TUSER_INFO_10) );
ulist.Add( WideCharToString( PWideChar((inf^).usri10_name) ) );
end;


NetApiBufferFree(info);
end;

end. 

--
Best regards
Sergey Tonkikh, zigzag@abi.vrn.ru
--- ifmail v.2.15dev5
 * Origin: Информсвязь-Черноземье (2:5020/400)