使用 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 表示形式不支持所有其他操作,即 GetObject、 Create、 Delete、 CopyHere 和 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 |