共用方式為


讀取物件 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 傳回。 請注意,vt 成員VT_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. 使用 ObjectType信任項字串完成時,請使用 SysFreeString 來釋放這些字串的記憶體。
  12. 當介面完成時,呼叫 Release 以遞減或釋放所有介面參考。