IADsContainer 接口 (iads.h)

IADsContainer 接口使 ADSI 容器对象能够创建、删除和管理包含的 ADSI 对象。 容器对象表示分层目录树,例如在文件系统中,以及组织目录层次结构。

可以使用 IADsContainer 接口枚举包含的对象或管理其生命周期。 例如,以递归方式导航目录树。 通过在 ADSI 对象上查询 IADsContainer 接口,可以确定该对象是否具有任何子级。 如果不支持接口,则对象为叶。 否则,它是容器。 可以针对新发现的容器对象继续此过程。 若要创建、复制或删除对象,请将请求发送到容器对象以执行任务。

继承

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

容器的 GUID 表示形式不支持所有其他操作,即 GetObjectCreateDeleteCopyHere 和 MoveHere 例如,以下代码示例的最后一行将导致错误。

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
标头 iads.h

另请参阅

创建和删除对象

IADs::get_GUID

IADsClass::get_Container

IADsNamespaces

IDispatch