如何用ADSI提供的LDAP provider修改活动目录里用户的名称?
这里的用户名称指的是用户这个object的Distinguished Name.比如:"CN=testUser,CN=Users,DC=TestDomain.DC=com"或者是"TestDomain.com/cn=testUser,cn=Users"就是如何修改TestDomain.com里Users下的testUser?
关于testUser的其他属性大部分我都修改成功了。现在最关键的是如何修改testUser这个名字。谢谢赐教!

解决方案 »

  1.   

    以下为示范代码,请参考(目前没环境,未作测试,祝好运!)
    IADs *pAds;
    VARIANT var;
    HRESULT hr;
    LPWSTR path=L"LDAP://CN=testUser,CN=Users,DC=TestDomain,DC=com";
    hr = ADsGetObject( path, IID_IADs, (void**) pADs);
     
    //1、 update values in cache
    V_BSTR(&var) = SysAllocString(L"New Name");
    V_VT(&var) = VT_BSTR;
    hr = pADs->Put(L"sn", var );
    VariantClear(&var);//2、 Commit changes to the directory store.
    hr = pADs->SetInfo();另外,使用NetUserSetInfo函数也可以
      

  2.   

    请将
    hr = pADs->Put(L"sn", var );
    替换成
    hr = pADs->Put(L"Name", var );
      

  3.   

    hr = pADs->Put(L"Name", var );
    不允许这样操作的。因为这样是修改了RDN。目录服务器不接受这个请求。name,cn,等几个属性不能这样修改的。
      

  4.   

    不会吧,User对象应该由SID作为唯一识别信息.
    User的RDN不过是cn属性的值而已,容器内保证唯一就行,咋不让改呢?
    目录服务器不接受这个请求就没办法了,用NetUserSetInfo函数试试吧.Naming Properties
    As with other directory objects, a user object has names in the form of cn, name, distinguishedName, and objectGUID properties. Note that a user's relative distinguished name (RDN) is the value of the cn property. These properties can be viewed and managed by the Active Directory™ User and Computers snap-in.IADsUser接口所提供的属性方法中,除put_FullName可以满足修改SAM Name的需求外,
    还真没有显式地提出其他命名属性相关的方法.
      

  5.   

    IADsContainer->MoveHere();这个找的我好苦啊。。