一个关于AD编程的问题

vieri122 2008-04-03 08:42:48
我做的是基于LDAP协议的查询用户名的程序,但是通过LDAP协议总是连接不上,(用WINNTT已实现),请各位看看我的错误在哪里?
源代码:
void CAd2Dlg::OnCheck()
{

CoInitialize(NULL);
CString strName; //用户名
CString strProperty; //属性
HRESULT hr=S_OK; //状态字
VARIANT varGroupArray; //变量数组
VARIANT varGroupSingle; //所检索的元素数组
ULONG lFetch = 0; //检索时检索出的元素个数计数器
BSTR objName;
VARIANT objProperty,ojProperty;

IEnumVARIANT *pEnum = NULL; //枚举器对象接口指针
IADsContainer *pCont = NULL; //容器接口指针
IDispatch *pDisp = NULL;
IADs *pADs = NULL; //用户名指针
IADsGroup *pGroup = NULL;

UpdateData(TRUE);
m_List.ResetContent();//每次检索前先清空列表框的内容

//用当前凭证绑定到一个ADSI对象
//hr=ADsGetObject(L"WinNT://abc.com",
//IID_IADsContainer, (void**) &pCont); //用WINNT连接域中,已经实现

//hr=ADsGetObject(L"WinNT://tzp.abc.com,computer",
//IID_IADsContainer, (void**) &pCont); //连接本机,已经实现
hr=ADsGetObject(L"LDAP://DC=abc,DC=com",
IID_IADsContainer,(void**) &pCont); //用LDAP连接域中,尚未实现
//hr=ADsOpenObject(L:"LDAP://DC=abc,DC=com",wcyc_yp,123456789,"
if(FAILED(hr))
return;

//根据搜索过滤条件得到符合的用户组
LPWSTR pszGroup[] = {L"Users"}; //要的是Users
VariantInit(&varGroupArray); //当不确定所用变量是什么类型是最好先这样初始化
hr = ADsBuildVarArrayStr(pszGroup, 1,//sizeof(pszGroup)/sizeof(LPWSTR),
&varGroupArray); //由一个Unicode字符串数组建立一个变量数组
if(FAILED(hr))
return;

//把过滤得到的对象加入容器
hr = pCont->put_Filter( varGroupArray );
VariantClear(&varGroupArray);
if(FAILED(hr))
return;

//为容器建立一个枚举类对象
hr=ADsBuildEnumerator(pCont,&pEnum);
if(FAILED(hr))
return;

//循环输出符合条件的结果
while(hr==S_OK)
{
//使用从指定枚举器对象检索出的元素填充一个变量数组
hr=ADsEnumerateNext(pEnum,1,&varGroupSingle,&lFetch);

if(lFetch)
{
VariantInit(&varGroupSingle);
pDisp=V_DISPATCH(&varGroupSingle);
//查询其他接口的指针
hr=pDisp->QueryInterface(IID_IADs, (void**)&pADs);
if(!SUCCEEDED(hr))
return ;

VariantClear(&varGroupSingle);

::VariantInit(&objProperty);
::VariantInit(&ojProperty);
//通过ADSI得到对象的名字和属性
pADs->get_Name(&objName);
strName=objName;
pADs->Get(objName,&objProperty);
//把VRIANT类型转换成CSTRING
::VariantChangeType(&ojProperty,&objProperty,VARIANT_NOUSEROVERRIDE,VT_BSTR);
strProperty=ojProperty.bstrVal;

m_List.AddString(strName);

SysFreeString(objName);
//VariantClear(&objProperty);
//pGroup->Release();
pDisp->Release();
pADs->Release();
}//if
}//while

pCont->Release();
hr=ADsFreeEnumerator(pEnum);
CoUninitialize();
}
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
monica888 2008-04-04
  • 打赏
  • 举报
回复
去微软官网下载一个针对AD步署的工具,名字我忘了,比你这样编程好得多。
xiaojing110 2008-04-03
  • 打赏
  • 举报
回复
up!

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧