為新的目錄物件建立安全性描述元

您可以使用 ADSI 來建立安全性描述元,並將其設定為新物件的 nTSecurityDescriptor 屬性,或使用它來取代現有物件的 nTSecurityDescriptor 屬性。

若要為物件建立安全性描述元:

  1. 使用 CoCreateInstance 建立新安全性描述元的 ADSI COM 物件,並取得該物件的 IADsSecurityDescriptor 介面指標。 請注意,類別標識碼CLSID_SecurityDescriptor
  2. 使用 IADsSecurityDescriptor::p ut_Owner 方法來設定對象的擁有者。 信任者是使用者、群組或其他安全性主體。 應用程式應該使用來自要套用 ACE 之信任者之使用者或群組物件中適當屬性的值。
  3. 使用 IADsSecurityDescriptor::p ut_Control 方法來控制物件是否繼承來自其父容器的 DACL 和 SCL。
  4. 使用 CoCreateInstance 為新的安全性描述元建立 DACL 的 ADSI COM 物件,並取得該物件的 IADsAccessControlList 介面指標。 請注意,類別標識碼CLSID_AccessControlList
  5. 若要讓每個 ACE 新增至 DACL,請使用 CoCreateInstance 為新的 ACE 建立 ADSI COM 物件,並取得該物件的 IADsAccessControlEntry 介面指標。 請注意,類別標識碼CLSID_AccessControlEntry。
  6. 若要讓每個 ACE 新增至 DACL,請使用 ACE 的 IADsAccessControlEntry 物件的屬性方法來設定 ACE 的屬性。 如需在 ACE 上設定之屬性的詳細資訊,請參閱 在對象上設定訪問許可權。
  7. 若要讓每個 ACE 新增至 DACL,請在 IADsAccessControlEntry 物件上使用 QueryInterface 方法來取得 IDispatch 指標。 IADsAccessControlList::AddAce 方法需要 ACE 的 IDispatch 介面指標。
  8. 若要讓每個 ACE 新增至 DACL,請使用 IADsAccessControlList::AddAce 將新的 ACE 新增至 DACL。 請注意,ACL 內的 ACE 順序可能會影響物件的存取權評估。 對對象的正確存取可能需要您建立新的 ACL、以正確的順序將 ACL 中的 ACL 新增至新的 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 方法,將 IADsSecurityDescriptor 物件轉換為 VARIANT,以取得 IDispatch 介面。 然後將 VARIANT 的 vt 成員設定VT_DISPATCH,並將 VARIANTpdispVal 成員設定等於 IDispatch指標。
  13. 取得物件的 IADs 介面指標。
  14. 使用 IADs::P ut 方法搭配 “nTSecurityDescriptor” 和上面建立的 VARIANT,將新的安全性描述元寫入屬性快取。
  15. 使用 IADs::SetInfo 方法來更新目錄中物件上的 屬性。