Помогите плиззззз ! Мне надо получить имена всех пользователей локальной системы (Win7) и их SID. Использую для этого NetUserEnum уровня USER_INFO_23 - НЕПОЛУЧАЕТСЯ. Если использую уровни ниже (0-11) то все идет, но мне надо и все SID пользователей знать. Вот моя функция. Где ошибка???
| Код | procedure GetLocalUserList(uList, uSid: 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_23 = record usri23_name, usri23_full_name, usri23_comment: PWideChar; usri23_flags: Dword; usri23_user_sid: PSID; end; PUSER_INFO_23 = ^TUSER_INFO_23;
var dwERead, dwETotal, dwRes, res, len: DWORD; inf: PUSER_INFO_23; info: Pointer; p: PChar; i: Integer; StringSid: LPSTR;
begin if (uList=nil) or (uSid=nil) then Exit; ulist.Clear; uSid.Clear;
info:=nil; dwRes:=0; len:=NetUserEnum(nil, 23, FILTER_NORMAL_ACCOUNT, @info, 0, @dwERead, @dwETotal, @dwRes); info:=nil; dwRes:=0; res:=NetUserEnum(nil, 23, FILTER_NORMAL_ACCOUNT, @info, len, @dwERead, @dwETotal, @dwRes); if (res<>NERR_SUCCESS) or (info=nil) then Exit; inf:=info; for i:=0 to dwERead-1 do begin uList.Add(WideCharToString(inf^.usri23_name)); ConvertSidToStringSid(inf^.usri23_user_sid, StringSid); uSid.Add(StringSid); inc(inf) end; NetApiBufferFree(info); end;
|
|