次の方法で共有


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

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

オブジェクト ピッカー ダイアログ ボックスを表示するには:

  1. CoCreateInstance または CoCreateInstanceEx関数呼び出して、IDsObjectPicker インターフェイスのインスタンスを作成します。
  2. IDsObjectPicker::Initialize メソッドを呼び出して、ダイアログ ボックスを初期化します。
  3. IDsObjectPicker::InvokeDialog メソッドを呼び出して、ダイアログ ボックスを表示します。
  4. CFSTR_DSOP_DS_SELECTION_LIST データを取得するには、オブジェクト ピッカー ダイアログ ボックスから返された IDataObject インスタンスの IDataObject::GetData メソッドを呼び出します。 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 つあります。1 つはアップレベル スコープ用、1 つは下位レベルのスコープ用です。 DSOP_FILTER_FLAGS 構造体の Uplevel メンバーは、上位レベルのスコープのフィルターを指定する DSOP_UPLEVEL_FILTER_FLAGS 構造体です。 DSOP_FILTER_FLAGS 構造体の flDownlevel メンバーは、下位レベルのスコープのフィルターを指定するフラグのセットです。