![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Осваиваю ADSI и не получается из группы её членов получить.
EgorovAlex © (2005-09-20 10:11:00)Для пользователей всё работает (проверка на вхождение пользователя в группу):
function UsrInGrp(User, Group: WideString): Boolean;
var
objName: WideString;
Members: IADsMembers;
Usr: IADsUser;
e: IEnumVARIANT;
Grp: IADsGroup;
hRes,hr: HRESULT;
lNumElements : ULong;
varArr : OleVariant;
begin
Result := False;
objName := 'WinNT://' + WideString(CompNameStr) + '/' + User;
hRes := ADsGetObject(PWideChar(objName), IID_IADsUser, Pointer(Usr));
if (hRes = S_OK) then
begin
Members := Usr.Groups;
e := Members._NewEnum as IEnumVARIANT;
repeat
hr := ADsEnumerateNext(e, 1, varArr, lNumElements);
if (lNumElements=0) then
break;
IDispatch(varArr).QueryInterface(IADsGroup, Grp);
if (Grp.Name = Group) then
begin
Result := True;
Break;
end;
until not Succeeded(Hr);
end;
end;
А для групп вроде всё то-же самое, но не работает:
function GrpInGrp(Group1, Group2: WideString): Boolean;
var
objName: WideString;
Grp1, Grp2: IADsGroup;
Members: IADsMembers;
e : IEnumVARIANT;
hRes,hr: HRESULT;
lNumElements : ULong;
varArr : OleVariant;
begin
Result := False;
objName := 'WinNT://' + WideString(CompNameStr) + '/' + Group2;
hRes := ADsGetObject(PWideChar(objName), IID_IADsGroup, Pointer(Grp2));
if (hRes = S_OK) then
begin
Members := Grp2.Members;
e := Members._NewEnum as IEnumVARIANT;
repeat
hr := ADsEnumerateNext(e, 1, varArr ,lNumElements);
if (lNumElements=0) then
break;
IDispatch(varArr).QueryInterface(IADsGroup, Grp1);
if (Grp1.Name = Group2) then
Result := True;
until not Succeeded(Hr);
end;
end;
EgorovAlex (2005-09-20 14:40:00) [1]Тогда задам вопрос по другому: как для глобальной группы домена можно узнать список глобальных групп в неё входящих?