擷取物件的 DACL
對象的安全性描述元可能包含任意訪問控制清單 (DACL)。 DACL 包含零個或多個存取控制專案(ACE),可識別可存取物件的使用者和群組。 如果 DACL 是空的(也就是它包含零 ACE),則不會明確授與任何存取權,因此會隱含拒絕存取。 不過,如果對象的安全性描述元沒有 DACL,該物件會不受保護,且每個人都具有完整的存取權。
若要擷取物件的 DACL,您必須是對象的擁有者,或具有 物件的READ_CONTROL 存取權。
若要取得和設定目錄物件的 DACL,請使用 IADsSecurityDescriptor 介面。 使用 C++ 時,IADsSecurityDescriptor::get_DiscretionaryAcl 方法會傳回 IDispatch 指標。 在該 IDispatch 指標上呼叫 QueryInterface 以取得 IADsAccessControlList 介面,並使用該介面上的 方法來存取 DACL 中的個別 ACE。 修改 DACL 的程式描述於 設定物件的訪問許可權。
若要列舉 ACE,請使用 IADsAccessControlList::get__NewEnum 方法。 方法會傳 回 IUnknown 指標。 在該 IUnknown 指標上呼叫 QueryInterface 以取得 IEnumVARIANT 介面。 使用 IEnumVARIANT::Next 方法來列舉 ACL 中的 ACE。 每個 ACE 都會以包含 IDispatch 指標的 VARIANT 形式傳回(vt 成員為VT_DISPATCH)。 在該 IDispatch 指標上呼叫 QueryInterface,以取得 ACE 的 IADsAccessControlEntry 介面。 您可以使用 IADsAccessControlEntry 介面的方法來設定或擷取 ACE 的元件。
如需 DACL 和 ACE 的詳細資訊,請參閱平臺軟體開發工具包 (SDK) 中的下列主題。