Интерфейс 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 |