ディレクトリオブジェクトピッカー

ダイアログボックスを使用すると、ユーザーはグローバルカタログ、ドメインまたはコンピューター、またはワークグループから1つ以上のオブジェクトを選択できます。 ユーザーが選択できるオブジェクトの種類には、ユーザー、連絡先、グループ、およびコンピューターオブジェクトが含まれます。 Active Directory Domain Servicesの詳細については、 「Active Directory Domain Services」 を参照してください。

オブジェクトピッカーダイアログボックスを表示するには、次の操作を行います。

  1. CoCreateInstanceまたはCoCreateInstanceEx関数を呼び出して、IDsObjectPickerインターフェイスのインスタンスを作成します。
  2. IDsObjectPicker :: Initializeメソッドを呼び出して、ダイアログボックスを初期化します。
  3. IDsObjectPicker :: InvokeDialogメソッドを呼び出して、ダイアログボックスを表示します。
  4. オブジェクトピッカーダイアログボックスによって返される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を要求して保存する必要があります。

初期化

[オブジェクトの選択] ダイアログボックスが初期化されると、スコープの種類とフィルターのセットが指定されます。 指定したスコープの種類によって、ユーザーがオブジェクトを選択できる場所、ドメイン、コンピューターなどが決まります。 フィルターは、ユーザーが特定のスコープの種類から選択できるオブジェクトの種類を決定します。 詳細については、以下の 「スコープとフィルター」 セクションを参照してください。

既定では、ユーザーは [ディレクトリオブジェクトの選択] ダイアログボックスで1つのオブジェクトを選択できます。 複数の選択を有効にするには、ダイアログボックスの初期化時に、DSOP_INIT_INFO構造体のflOptionsメンバーにDSOP_FLAG_MULTISELECTフラグを設定します。

スコープとフィルター

[検索先] ドロップダウンリストには、ユーザーがオブジェクトを選択できるスコープが含まれています。 スコープは、使用可能なオブジェクトのセットに関するデータを格納し、アクセスを提供するドメイン、コンピューター、ワークグループ、またはグローバルカタログです。 スコープの一覧のエントリは、IDsObjectPicker :: Initializeメソッドが最後に呼び出されて [オブジェクトの選択] ダイアログボックスを初期化したときに指定されたスコープの種類とターゲットコンピューターによって異なります。

スコープの種類は、ターゲットコンピューターが属するエンタープライズ内のすべてのドメイン、ターゲットコンピューターのエンタープライズのグローバルカタログ、またはターゲットコンピューター自体など、スコープの汎用カテゴリです。 指定されたスコープの種類ごとに、ダイアログボックスはターゲットコンピューターのコンテキストを使用してスコープの一覧のエントリを決定します。

IDsObjectPicker :: Initializeメソッドは、DSOP_SCOPE_INIT_INFO構造体の配列を含むDSOP_INIT_INFO構造体へのポインターを受け取ります。 DSOP_SCOPE_INIT_INFO配列の各エントリは、1つまたは複数のスコープの種類と、適用可能なフィルターおよびその他の属性を指定します。 フィルターは、ユーザー、グループ、連絡先、コンピューターなど、特定のスコープの種類からユーザーが選択できるオブジェクトの種類を決定します。 ユーザーが一覧からスコープを選択すると、ダイアログボックスにそのスコープの種類のフィルターが適用され、ユーザーが選択できるオブジェクトの一覧が表示されます。

DSOP_SCOPE_INIT_INFO構造体には、そのスコープの種類のフィルターを指定するDSOP_FILTER_FLAGS構造体が含まれています。 DSOP_FILTER_FLAGS構造体は、上位レベルと下位レベルのスコープを区別します。

  • 上位レベルのスコープは、ADSI LDAPプロバイダーをサポートするグローバルカタログまたはドメインです。
  • 下位レベルのスコープには、ワークグループとすべての個々のコンピューターが含まれます。 このダイアログボックスでは、ADSI WinNTプロバイダーを使用して下位レベルのスコープにアクセスします。

DSOP_FILTER_FLAGS構造体で使用するために定義されているフィルターフラグには、上位レベルのスコープ用と下位レベルのスコープ用の2つのセットがあります。 DSOP_FILTER_FLAGS構造体のuplevelメンバーは、上位レベルのスコープのフィルターを指定するDSOP_UPLEVEL_FILTER_FLAGS構造体です。 DSOP_FILTER_FLAGS構造体のfldownlevelメンバーは、下位レベルのスコープのフィルターを指定するフラグのセットです。