目錄物件選擇器
目錄物件選擇器對話框可讓使用者從全域編錄、網域或計算機或工作組中選取一或多個物件。 用戶可以選取的物件類型包括使用者、聯繫人、群組和計算機物件。 如需 Active Directory 網域服務 的詳細資訊,請參閱 Active Directory 網域服務。
若要顯示物件選擇器對話框:
- 呼叫 CoCreateInstance 或 CoCreateInstanceEx 函式,以建立 IDsObjectPicker 介面的實例。
- 呼叫 IDsObjectPicker::Initialize 方法來初始化對話方塊。
- 呼叫 IDsObjectPicker::InvokeDialog 方法來顯示對話方塊。
- 呼叫對象選擇器對話框所傳回之 IDataObject 實例的 IDataObject::GetData 方法,以擷取CFSTR_DSOP_DS_SELECTION_LIST數據。 CFSTR_DSOP_DS_SELECTION_LIST剪貼簿格式提供包含DS_SELECTION_LIST結構的 HGLOBAL。 DS_SELECTION_LIST 結構包含物件選擇器對話框中所選取專案的相關數據。
如果物件需要安全性標識碼 (SID),則應該直接從對象選擇器要求此標識碼,方法是將 objectSID 屬性新增至要擷取所選物件的屬性清單。 不建議將傳回的對象名稱傳遞至 LsaLookupNames 或 LookupAccountName 函式,因為名稱查閱將會是多餘的,而且在某些情況下可能會失敗。
如果儲存任何選取對象的參考,則不應該儲存辨別名稱,因為物件可能會移動、重新命名,或可能會因為地區設定差異而變更。 針對安全性主體, 應要求 objectSID 給物件並安全地儲存。 如果稍後需要安全性主體的名稱,可以使用LookupAccountSid函式加以擷取。 對於所有其他對象, 應該要求並儲存 objectGUID 。
初始化
初始化物件選擇器對話框時,會指定一組範圍類型和篩選。 指定的範圍類型會決定位置、網域或計算機,例如,使用者可以從中選取物件。 篩選條件會決定使用者可以從指定範圍類型中選取的物件類型。 如需詳細資訊,請參閱下面的範圍和篩選一節。
根據預設,用戶可以在目錄對象選擇器對話框中選取單一物件。 若要啟用多個選取專案,請在對話框初始化時,在 DSOP_INIT_INFO 結構的 flOptions 成員中設定DSOP_FLAG_MULTISELECT旗標。
範圍和篩選
[ 查看] 下拉式清單包含使用者可以從中選取物件的範圍。 範圍是網域、計算機、工作組或全域編錄,可儲存一組可用物件,以及提供存取權。 範圍清單中的專案取決於上次呼叫 IDsObjectPicker::Initialize 方法以初始化物件選擇器對話框時所指定的範圍類型和目標計算機。
範圍類型是範圍的泛型類別,例如目標計算機所屬企業中的所有網域,或目標計算機的企業全域編錄,或目標計算機本身。 針對每個指定的範圍類型,對話方塊會使用目標計算機的內容來判斷範圍清單專案。
IDsObjectPicker::Initialize 方法會取得包含DSOP_SCOPE_INIT_INFO結構陣列之DSOP_INIT_INFO結構的指標。 DSOP_SCOPE_INIT_INFO陣列中的每個項目都會指定一或多個範圍類型,以及適用的篩選和其他屬性。 篩選條件會決定使用者可以從指定範圍類型中選取的物件類型,例如使用者、群組、聯繫人和計算機。 當使用者從清單中選取範圍時,對話框會套用該範圍類型的篩選,以顯示使用者可以從中選取的物件清單。
每個 DSOP_SCOPE_INIT_INFO 結構都包含一個 DSOP_FILTER_FLAGS 結構,指定該範圍類型的篩選。 DSOP_FILTER_FLAGS 結構區分上層和下層範圍:
- 上層範圍是全域編錄或支援ADSI LDAP提供者的網域。
- 下層範圍包括工作組和所有個別計算機。 對話框會使用ADSI WinNT提供者來存取下層範圍。
定義在 DSOP_FILTER_FLAGS 結構中使用的篩選旗標有兩組:一組用於上層範圍,另一組用於下層範圍。 DSOP_FILTER_FLAGS 結構的 Uplevel 成員是DSOP_UPLEVEL_FILTER_FLAGS結構,可指定上層範圍的篩選。 DSOP_FILTER_FLAGS 結構的 flDownlevel 成員是一組旗標,可指定下層範圍的篩選。