建立或修改 ACL
Windows 支援一組函式,以在現有的 ACL 中建立 存取控制清單(ACL)或修改 存取控制專案。
SetEntriesInAcl 函式會建立新的 ACL。 SetEntriesInAcl 可以為 ACL 指定一組全新的 ACE,也可以將一或多個新的 ACE 與現有 ACL 的 ACL 合併。 SetEntriesInAcl 函式會使用 EXPLICIT_ACCESS 結構的陣列來指定新 ACE 的資訊。 每個 EXPLICIT_ACCESS 結構都包含描述單一 ACE 的資訊。 這項資訊包括存取權限、ACE 類型、控制 ACE 繼承的旗標,以及識別 trustee 的 TRUSTEE 結構。
將新的 ACE 新增至現有的 ACL
- 使用 GetSecurityInfo 或 GetNamedSecurityInfo 函式,從物件的 安全性描述元取得現有的 DACL 或 SACL。
- 針對每個新的 ACE,呼叫 BuildExplicitAccessWithName 函式,以填入描述 ACE 的資訊 EXPLICIT_ACCESS 結構。
- 呼叫 SetEntriesInAcl,並指定新 ACE 的現有 ACL 和 EXPLICIT_ACCESS 結構的陣列。 SetEntriesInAcl 函式會配置並初始化 ACL 及其 ACE。
- 呼叫 SetSecurityInfo 或 SetNamedSecurityInfo 函式,將新的 ACL 附加至對象的安全性描述元。
如果呼叫端指定現有的 ACL,SetEntriesInAcl 將新的 ACE 資訊與 ACL 中的現有 ACE 合併。 例如,假設現有的 ACL 授與指定信任項的存取權,而 EXPLICIT_ACCESS 結構會拒絕存取相同的信任項。 在此情況下,SetEntriesInAcl 為受託人新增拒絕存取的 ACE,並刪除或修改受託人現有的允許存取 ACE。
如需將新 ACE 合併至現有 ACL 的範例程式代碼,請參閱 在 C++中修改 物件的 ACL。