用vc提供的adsi接口函数,我是这么写的:(其中变量的声明省略)
//Initialize COM
CoInitialize(NULL);hr = ADsGetObject(L"LDAP://rootDSE",IID_IADs,(void**)&piRootDSE);
if (SUCCEEDED(hr))
{
  hr = piRootDSE->Get(L"defaultNamingContext",&varDefaultNamingContext);
  piRootDSE->Release();
  if (FAILED(hr))
  {
    return E_FAIL;
  }}
debugprint(L"I've been 0");
//Create Group
hr = ADsGetObject( _bstr_t("CN=Users,") + _bstr_t(varDefaultNamingContext),
IID_IADsContainer,
(void**)&piContainer );
if (SUCCEEDED(hr))
{
  debugprint(L"I've been 1");
  piContainer->Create(L"group",
  L"testgroup",&piDispatch);
  if (SUCCEEDED(hr))
  {
    debugprint(L"I've been 2");
    hr = piDispatch->QueryInterface(IID_IADsGroup,(void**)piIADs);
    if (SUCCEEDED(hr))
    {
      debugprint(L"I've been 3");
      piIADs->Put(L"cn",_variant_t(_bstr_t("testgroup")));
      piIADs->Release();
    }
    piDispatch->Release();
  }
  piContainer->Release();
}
//Uninitialize COM
CoUnitialize(NULL);
其中debugpinrt函数是我自己用来打印调试信息的,结果发现每次调试信息都只有I've been 0
即ADsGetObject()函数就没有成功,于是我又把ADsGetObject()换成ADsOpenObject(),当然参数也相应做了一些变化,但仍然没有通过,这是什么原因呢(应该不是权限的问题,我已经给相应的程序最大的权限了,而且在之行这部分代码之前,我用类似的方法枚举了Domain下Users容器下的所有组成员,是可行的),现在百思不得其解,而且这是个下周2之前必须完成的任务中的一部分,各位牛人们,给个建议?

解决方案 »

  1.   

    现在这个问题基本解决了,但还有一个问题,如何在添加用户的同时,将其添加到某个组中,好像用户结构有一个memberOf属性,按照msdn的说法,是DN类型的,但我不知如何改变这个值,哪位大侠能提示一下?
      

  2.   

    改变用户的隶属组的问题解决了,方法是用IADsGroup::Add()函数将这个用户添加到其隶属组中,而不用IADsUser::PutEx()函数麻烦的改变用户的memberOf属性,结帖!