Интерфейс IADsContainer (iads.h)

Интерфейс IADsContainer позволяет объекту контейнера ADSI создавать, удалять и администрировать содержащиеся объекты ADSI. Объекты-контейнеры представляют иерархические деревья каталогов, например в файловой системе, и для упорядочения иерархии каталогов.

Интерфейс IADsContainer можно использовать для перечисления содержащихся объектов или управления их жизненным циклом. Примером может быть рекурсивная навигация по дереву каталогов. Запросив интерфейс IADsContainer к объекту ADSI, можно определить, есть ли у объекта какие-либо дочерние элементы. Если интерфейс не поддерживается, объект является конечным. В противном случае это контейнер. Этот процесс можно продолжить для вновь найденных объектов контейнера. Чтобы создать, скопировать или удалить объект, отправьте запрос объекту контейнера для выполнения задачи.

Наследование

Интерфейс IADsContainer наследуется от интерфейса IDispatch . IADsContainer также имеет следующие типы элементов:

Методы

Интерфейс IADsContainer содержит следующие методы.

 
IADsContainer::CopyHere

Метод IADsContainer::CopyHere создает копию указанного объекта каталога в этом контейнере.
IADsContainer::Create

Настраивает запрос на создание объекта каталога указанного класса схемы и заданного имени в контейнере.
IADsContainer::D elete

Удаляет указанный объект каталога из этого контейнера.
IADsContainer::get__NewEnum

Извлекает объект перечислителя для контейнера.
IADsContainer::GetObject

Извлекает интерфейс для объекта каталога в контейнере.
IADsContainer::MoveHere

Перемещает указанный объект в контейнер, реализующий этот интерфейс.

Комментарии

Чтобы определить, является ли объект контейнером, используйте свойство IADsClass.Container объекта .

При привязке к объекту контейнера с помощью его GUID (или SID) можно выполнять только определенные операции с объектом контейнера. Эти операции включают в себя изучение атрибутов объекта и перечисление непосредственных дочерних элементов объекта. Эти операции показаны в следующем примере кода.

Dim con As IADsContainer
Dim obj As IADs
Set con = GetObject("LDAP://svr01/<GUID=xxxx>")
con.Filter = Array("user")
For Each item In con
    debug.print item.Name " &  " of " & item.Class
Next

Все остальные операции, то есть GetObject, Create, Delete, CopyHere и MoveHere , не поддерживаются в представлении GUID контейнера. Например, последняя строка следующего примера кода приведет к ошибке.

Dim con As IADsContainer
Dim obj As IADs
Set con = GetObject("LDAP://svr01/<GUID=xxxx>")
Set obj = con.GetObject("user", "CN=Jeff Smith")

Привязка с использованием GUID (или SID) предназначена для низких затрат и, следовательно, быстрых привязок, которые часто используются для интроспекции объектов.

Чтобы вызвать эти методы контейнера, привязанного к его GUID (или SID), повторно привязать к объекту, используя его различающееся имя.

Dim conGUID, conDN As IADsContainer
Dim obj As IADs
Set conGUID = GetObject("LDAP://svr/<GUID=xxxx>")
Set conDN=GetObject("LDAP://svr/" & conGUID.Get("distinguishedName"))
Set obj = conDN.GetObject("user", "CN=Jeff Smith")

Дополнительные сведения о представлении GUID объекта см. в разделе IADs.GUID.

Примеры

В следующем примере кода определяется, является ли объект ADSI контейнером.

Dim obj As IADs
Dim cls As IADsClass
On Error GoTo Cleanup

Set obj = GetObject("WinNT://myComputer,computer")
Set cls = GetObject(obj.Schema)
If (cls.Container = TRUE) Then
    MsgBox "The object is a container."
Else
    MsgBox "The object is a leaf."
End If

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set obj = Nothing
    Set cls = Nothing

В следующем примере кода определяется, является ли объект ADSI контейнером.

IADs *pADs = NULL;
IADsClass *pCls = NULL;
HRESULT hr = S_OK;
BSTR bstr;

hr = ADsGetObject(L"WinNT://myComputer,computer", IID_IADs, (void**)&pADs);
if(FAILED(hr)){return;}

pADs->get_Schema(&bstr);
hr = ADsGetObject(bstr, IID_IADsClass, (void**)&pCls);
pADs->Release();
SysFreeString(bstr);

if(FAILED(hr)){return;}

VARIANT_BOOL isContainer;
pCls->get_Container(&isContainer);

if(isContainer) 
    printf("Object is a container.\n");
else
    printf("Object is not a container.\n");

pCls->Release();

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header iads.h

См. также раздел

Создание и удаление объектов

IADs::get_GUID

IADsClass::get_Container

Пространства IADsNamespaces

IDispatch