共用方式為


讀取物件 ACL 中的存取控制權集合

使用 ADSI 時,您會讀取控件訪問許可權 ACE,就像在 ACL 中讀取任何其他 ACE 一樣。 請注意,您也可以使用 Win32 安全性 API 讀取目錄物件上的 ACL。 不過,控制存取權限會使用 IADsAccessControlEntry 介面的屬性,其專屬於授與和拒絕控制存取權限:

  • AccessMask 必須包含 ADS_RIGHT_DS_CONTROL_ACCESS
  • 旗標 值為 ADS_FLAG_OBJECT_TYPE_PRESENT
  • ObjectType 是控件訪問許可權 rightsGUID 屬性的字串形式。 GUID 的字串格式與 StringFromGUID2 COM 連結庫函式相同。
  • AceTypeADS_ACETYPE_ACCESS_ALLOWED_OBJECT 授予給受託人控制訪問許可權,或 ADS_ACETYPE_ACCESS_DENIED_OBJECT 拒絕受託人控制訪問許可權。
  • 信任人 是安全性主體;這是 ACE 套用至的使用者、群組、計算機等等。

使用下列程式讀取 ADSI 物件的 ACE。 下列程式適用於 C 和 C++ 應用程式。

讀取 ADSI 物件的 ACE

  1. 取得物件的 IADs 介面指標。
  2. 使用 IADs::Get 方法來取得對象的安全性描述元。 包含安全性描述元的屬性名稱是 「nTSecurityDescriptor」。。 屬性會以包含 IDispatch 指標的 VARIANT 傳回。 請注意,vt 成員 VT_DISPATCH。 在該 IDispatch 上呼叫 QueryInterface 指標,以取得 IADsSecurityDescriptor 介面,以使用該介面上的 方法來存取安全性描述元 ACL。
  3. 使用 IADsSecurityDescriptor::get_DiscretionaryAcl 方法來取得 ACL。 方法會傳回 IDispatch 指標。 在該 IDispatch 上呼叫 QueryInterface 指標,以取得 IADsAccessControlList 介面,以使用該介面上的方法存取 ACL 中的個別 ACE。
  4. 使用 IADsAccessControlList::get__NewEnum 方法來列舉 ACE。 方法會傳回一個 IUnknown 指標。 在該 IUnknown 指標上呼叫 QueryInterface,以取得 IEnumVARIANT 介面。
  5. 使用 IEnumVARIANT::Next 方法來列舉 ACL 中的 ACE。 屬性會以包含 IDispatch 指標的 VARIANT 傳回。 請注意,成員 vtVT_DISPATCH。 在該 IDispatch 指標上呼叫 QueryInterface,以取得 IADsAccessControlEntry 介面以讀取 ACE。
  6. 呼叫 IADsAccessControlEntry::get_AccessMask 方法來取得 AccessMask,並確認 ADS_RIGHT_DS_CONTROL_ACCESS 旗標的 AccessMask 值。 如果具有此旗標,ACE 會包含控制訪問權限。
  7. 呼叫 IADsAccessControlEntry::get_Flags 方法來取得物件類型的旗標。
  8. 檢查 旗標ADS_FLAG_OBJECT_TYPE_PRESENT 旗標的值。 如果 Flags 設定為 ADS_FLAG_OBJECT_TYPE_PRESENT,請呼叫 IADsAccessControlEntry::get_ObjectType 方法來取得字元串,其中包含 ACE 套用之控件訪問許可權的 rightsGUID。
  9. 呼叫 IADsAccessControlEntry::get_AceType 方法來取得 ACE 類型。 此類型會是 ADS_ACETYPE_ACCESS_ALLOWED_OBJECT,以授與信任者控件訪問許可權,或 ADS_ACETYPE_ACCESS_DENIED_OBJECT 拒絕控件訪問許可權。
  10. 呼叫 IADsAccessControlEntry::get_Trustee 方法來取得安全性主體;即套用 ACE 的使用者、群組、計算機等等。
  11. 完成 ObjectTypeTrustee 字串時,請使用 SysFreeString 釋放這些字串的記憶體。
  12. 當完成介面作業後,呼叫 Release 以遞減或釋放所有介面參考。