重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

現在、WinNTプロバイダを使用してコンテナオブジェクトを取得し、コンテナオブジェクトにユーザ用のフィルタを設定して、ユーザ情報全件の取得はできています。しかし、ユーザ件数が多い為、指定したユーザ分のみ取得したいのですが、どうすれば、条件を絞って取得できるのか教えて頂けないでしょうか?よろしくお願いします。

環境:WindowsXP、VC++6.0

ソースは以下のようにしています。

CoInitialize(NULL);

// コンテナオブジェクトの取得
IADsContainer *pContainer;
ADsGetObject(L"WinNT://DOMAIN/SERVER",IID_IADsContainer,(void**)&pContainer);

// コンテナオブジェクトにユーザ用のフィルタを設定
VARIANT varFilter;
LPWSTR pszTarget = L"user";

ADsBuildVarArrayStr(&pszTarget, 1, &varFilter);
pContainer->put_Filter( varFilter );

// 列挙オブジェクトの取得
IEnumVARIANT *pIEnumVARIANT;
hr = ADsBuildEnumerator(pContainer, &pLEnumVARIANT);

VARIANT varEnum;
ULONG pcElementsFetched;
IADsUser *pADs;
CComBSTR bstrTarget;

// コンテナ内のオブジェクト一覧
while(1){
ADsEnumerateNext(pIEnumVARIANT, 1, &varEnum, &pcElementsFetched);
if( pcElementsFetched == 0 ){
break;
}

((&varEnum)->pdispVal)->QueryInterface(IID_IADs, (LPVOID*)&pADs);

pADs->get_FullName( &bstrTarget );
printf("%S\n", bstrTarget.m_str);
bstrTarget.Enpty();

pADs->Release();
VariantClear( &varEnum );
}

// 列挙オブジェクトの解放
ADsFreeEnumerator( pIEnumVARIANT );
// コンテナオブジェクトの解放
pContainer->Release();
// ファイルタ
VariantClear( &varFilter );

CoUninitialize();

A 回答 (1件)

a) ユーザ情報をCListとかに保持してリストに該当するものだけ処理する。



b) WinNT://DOMAIN/SERVER/<ユーザ名>,Users と直接指定してユーザ分だけADsGetObjectする。

――みたいにするとか。
LDAPプロバイダなら、もうすこし複雑な検索条件を指定できるので、そちらを使うとか。
    • good
    • 0
この回答へのお礼

どうもありがとうございました!
参考にしてやってみます。

お礼日時:2006/07/19 08:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!