与ADsOpenObject()远程连接和WinNT提供程序有关的问题

时间:2019-05-21 20:56:25

标签: c++ windows winapi adsi

使用远程计算机上的服务中的WinNT提供程序从ADsOpenObject()获取IADsContainer对象时遇到问题。

除了编号4之外,我已经能够在以下情况下使用代码

  1. 我的应用程序部署在与其连接的同一台计算机上(本地主机)。
  2. 我的应用程序作为本地服务部署在与其连接的同一台计算机上(本地主机)。
  3. 我的应用程序部署在远程计算机上,并且通过提供IP进行连接。
  4. 我的应用程序作为本地服务部署在远程计算机上,并且通过提供IP进行连接。
#include <iostream>

#include <Adshlp.h>
#include <comdef.h>

IADsContainer* container = nullptr;
HRESULT hres = ADsOpenObject( L"WinNT://192.168.1.30", L"Administrator", L"someAdminPass", ADS_SECURE_AUTHENTICATION | ADS_READONLY_SERVER, IID_IADsContainer, (void**)&container );

if( SUCCEEDED(hres) )
{
    // do stuff with the container object
}
else
{
    _com_error err( hres );
    LPCTSTR errMsg = err.ErrorMessage();
    std::wcout << errMsg;
}

我希望hres是S_OK和有效的“容器”指针,但我只会得到带有错误字符串“ Unspecified error”的E_FAIL

1 个答案:

答案 0 :(得分:0)

通过@ DrakeWu-MSFT的评论中的指南,此问题得以解决!

我只需要指定一个FQDN用户名。如果您的计算机域是“ DOMAIN.COM”,则用户名字符串应为“ UserName@DOMAIN.com”,这对我来说解决了这个问题。对于此类描述性错误消息,MS也表示“非常感谢” ...:)< / p>

主代码行现在看起来像这样:

HRESULT hres = ADsOpenObject( L"WinNT://192.168.1.30", L"Administrator@MYDOMAIN.COM", L"someAdminPass", ADS_SECURE_AUTHENTICATION | ADS_READONLY_SERVER, IID_IADsContainer, (void**)&container );

P.S。请注意,还有其他WinAPI函数不喜欢FQDN用户名。