|
#include <stdio.h>
#include <comdef.h>
#include <activeds.h>
// CComBSTR
#include <atlbase.h>
#pragma comment( lib, "adsiid.lib" )
#pragma comment( lib, "activeds.lib" )
// *********************************************
// 実行
// *********************************************
int main()
{
_bstr_t bstrServer("WinNT://");
bstrServer.operator += ("server");
_bstr_t bstrUser("user");
_bstr_t bstrPassword("password");
HRESULT hr;
CoInitialize( NULL );
// コンテナオブジェクトの取得
IADsContainer *pContainer;
hr = ADsOpenObject(
(wchar_t *)bstrServer,
(wchar_t *)bstrUser,
(wchar_t *)bstrPassword,
0x1,
IID_IADsContainer,
(LPVOID*)&pContainer
);
if( FAILED( hr ) ) {
return 0;
}
// コンテナオブジェクトにユーザ用のフィルタを設定
VARIANT varFilter;
LPWSTR pszTarget = L"user";
hr = ADsBuildVarArrayStr(
&pszTarget,
1,
&varFilter
);
if( FAILED( hr ) ) {
pContainer->Release();
return 0;
}
hr = pContainer->put_Filter( varFilter );
if( FAILED( hr ) ) {
pContainer->Release();
VariantClear( &varFilter );
return 0;
}
// 列挙オブジェクトの取得
IEnumVARIANT *pIEnumVARIANT;
hr = ADsBuildEnumerator(
pContainer,
&pIEnumVARIANT
);
if( FAILED( hr ) ) {
pContainer->Release();
VariantClear( &varFilter );
return 0;
}
VARIANT varEnum;
ULONG pcElementsFetched;
IADsUser *pADs;
CComBSTR bstrTarget;
// コンテナ内のオブジェクト一覧
while( 1 ) {
hr = ADsEnumerateNext(
pIEnumVARIANT,
1,
&varEnum,
&pcElementsFetched
);
if( FAILED( hr ) ) {
break;;
}
if ( pcElementsFetched == 0 ) {
break;
}
hr = ((&varEnum)->pdispVal)->QueryInterface(
IID_IADs,
(LPVOID*)&pADs
);
if( FAILED( hr ) ) {
break;
}
pADs->get_Name( &bstrTarget );
printf( "%S : ", bstrTarget.m_str );
bstrTarget.Empty();
pADs->get_ADsPath( &bstrTarget );
printf( "%S \n", bstrTarget.m_str );
bstrTarget.Empty();
pADs->Release();
VariantClear( &varEnum );
}
// 列挙オブジェクトの解放
ADsFreeEnumerator( pIEnumVARIANT );
// コンテナオブジェクトの解放
pContainer->Release();
// フィルター
VariantClear( &varFilter );
CoUninitialize();
return 0;
}
| |