检索对象的 DACL

对象的安全描述符可能会包含任意访问控制列表 (DACL)。 DACL 包含零或多个访问控制项 (ACE),用于标识可以访问对象的用户和组。 如果 DACL 为空(即包含零个 ACE),则不会显式授予访问权限,因此会隐式拒绝访问。 但是,如果对象的安全描述符没有 DACL,则该对象不受保护并且每个人都具有完全访问权限。

要检索对象的 DACL,你必须是对象的所有者或对对象具有 READ_CONTROL 访问权限。

要获取和设置 Directory 对象的 DACL,请使用 IADsSecurityDescriptor 接口。 通过使用 C++,IADsSecurityDescriptor::get_DiscretionaryAcl 方法会返回一个 IDispatch 指针。 在 IDispatch 指针上调用 QueryInterface 以获得 IADsAccessControlList 接口,并使用该接口上的方法来访问 ACL 中的单个 ACE。 设置对象访问权限中介绍了修改 DACL 的步骤。

要枚举 ACE,请使用 IADsAccessControlList::get__NewEnum 方法。 该方法返回一个 IUnknown 指针。 在该 IUnknown 指针上调用 QueryInterface 以获取 IEnumVARIANT 接口。 使用 IEnumVARIANT::Next 方法来枚举 ACL 中的 ACE。 每个 ACE 都以 VARIANT 的形式返回,其中包含一个 IDispatch 指针(vt 成员为 VT_DISPATCH)。 在该 IDispatch 指针上调用 QueryInterface 来获取 ACE 的 IADsAccessControlEntry 接口。 可以使用 IADsAccessControlEntry 接口的方法来设置或检索 ACE 的组件。

有关 DACL 和 ACE 的详细信息,请参阅平台软件开发工具包 (SDK) 中的以下主题。