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)