Share via


建立或修改 ACL

Windows 支援一組函式, (ACL ) 或修改 ACL (ACL) 的 存取控制專案

SetEntriesInAcl函式會建立新的 ACL。 SetEntriesInAcl 可以指定 ACL 的全新 ACE 集合,也可以合併一或多個新的 ACL 與現有 ACL 的 ACL。 SetEntriesInAcl函式會使用EXPLICIT_ACCESS結構的陣列來指定新 ACE 的資訊。 每個 EXPLICIT_ACCESS 結構都包含描述單一 ACE 的資訊。 此資訊包括存取權限、ACE 的類型、控制 ACE 繼承的旗標,以及識別信任項的 TRUSTEE 結構。

將新的 ACE 新增至現有的 ACL

  1. 使用 GetSecurityInfoGetNamedSecurityInfo 函式,從物件 的安全性描述元取得現有的 DACL 或 SACL。
  2. 針對每個新的 ACE,呼叫 BuildExplicitAccessWithName 函式,以使用描述 ACE 的資訊填入 EXPLICIT_ACCESS 結構。
  3. 呼叫 SetEntriesInAcl,為新的 ACL 指定現有的 ACL 和 EXPLICIT_ACCESS 結構的陣列。 SetEntriesInAcl函式會配置並初始化 ACL 及其 ACL。
  4. 呼叫 SetSecurityInfoSetNamedSecurityInfo 函式,將新的 ACL 附加至物件的安全性描述元。

如果呼叫端指定現有的 ACL, SetEntriesInAcl 會將新的 ACE 資訊與 ACL 中的現有 ACE 合併。 例如,例如,現有的 ACL 會將存取權授與指定的信任項, 而EXPLICIT_ACCESS 結構會拒絕對相同信任者的存取。 在此情況下, SetEntriesInAcl 會為信任者新增拒絕存取的 ACE,並刪除或修改信任者的現有存取允許的 ACE。

如需將新 ACE 合併至現有 ACL 的範例程式碼,請參閱 在 C++ 中修改物件的 ACL