为新目录对象创建安全描述符

可以使用 ADSI 创建安全描述符并将其设置为新对象的 nTSecurityDescriptor 属性,或使用它替换现有对象的 nTSecurityDescriptor 属性。

若要为对象创建安全描述符,

  1. 使用 CoCreateInstance 为新的安全描述符创建 ADSI COM 对象,并获取 指向该对象的 IADsSecurityDescriptor 接口指针。 请注意,类 ID CLSID_SecurityDescriptor
  2. 使用 IADsSecurityDescriptor::p ut_Owner 方法设置对象的所有者。 受托人是用户、组或其他安全主体。 应用程序应使用应用 ACE 的受托方用户或组对象的相应属性中的值。
  3. 使用 IADsSecurityDescriptor::p ut_Control 方法控制对象是否从其父容器继承 DACL 和 SCL。
  4. 使用 CoCreateInstance 为新的安全描述符创建 DACL 的 ADSI COM 对象,并获取 指向该对象的 IADsAccessControlList 接口指针。 请注意,类 ID CLSID_AccessControlList
  5. 对于要添加到 DACL 的每个 ACE,请使用 CoCreateInstance 为新 ACE 创建 ADSI COM 对象,并获取指向该对象的 IADsAccessControlEntry 接口指针。 请注意,类 ID CLSID_AccessControlEntry。
  6. 对于要添加到 DACL 的每个 ACE,请使用 ACE 的 IADsAccessControlEntry 对象的属性方法设置 ACE 的属性。 有关在 ACE 上设置的属性的详细信息,请参阅 在对象上设置访问权限。
  7. 对于要添加到 DACL 的每个 ACE,请使用 IADsAccessControlEntry 对象的 QueryInterface 方法获取 IDispatch 指针。 IADsAccessControlList::AddAce 方法需要指向 ACE 的 IDispatch 接口指针。
  8. 对于要添加到 DACL 的每个 ACE,请使用 IADsAccessControlList::AddAce 将新的 ACE 添加到 DACL。 请注意,ACL 中 ACE 的顺序可能会影响对对象的访问的评估。 对对象的正确访问可能要求创建新的 ACL,将 ACL 中的 ACE 按照正确的顺序添加到新的 ACL,然后将安全描述符中的现有 ACL 替换为新的 ACL。 有关详细信息,请参阅 DACL 中的 ACE 顺序。
  9. 按照步骤 4-8 为新的安全描述符创建 SACL。
  10. 使用 IADsSecurityDescriptor::p ut_DiscretionaryAcl 方法设置 DACL。 有关 DACL 的详细信息,请参阅 Null DACL 和空 DACL
  11. 使用 IADsSecurityDescriptor::p ut_SystemAcl 方法设置 SACL。
  12. 通过使用 IADsSecurityDescriptor 对象的 QueryInterface 方法获取 IDispatch 接口,将 IADsSecurityDescriptor 对象转换为 VARIANT。 然后将 VARIANTvt 成员设置为 VT_DISPATCH,并将 VARIANTpdispVal 成员设置为等于 IDispatch 指针。
  13. 获取指向 对象的 IADs 接口指针。
  14. IADs::P ut 方法与“nTSecurityDescriptor”和 上面创建的 VARIANT 配合使用,将新的安全描述符写入属性缓存。
  15. 使用 IADs::SetInfo 方法更新目录中对象的属性。