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

Issue with ADsOpenObject() remote connection and the WinNT provider

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

除了数字 4

,我已经能够让代码在以下情况下工作
  1. 我的应用程序部署在它连接的同一台机器上(本地主机)。
  2. 我的应用程序作为本地服务部署在它所连接的同一台机器 (localhost) 上。
  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 和有效的 'container' 指针,但我只得到 E_FAIL 和错误字符串 "Unspecified error"

感谢 @DrakeWu-MSFT!

评论中的指导,问题已解决

我只需要指定一个 FQDN 用户名。如果您的机器域是 "DOMAIN.COM' then the username string should be "UserName@DOMAIN.com”。这为我解决了这个问题。对于这样的描述性错误消息,MS 也大 "thanks"...:)

主代码行现在如下所示:

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。请注意,还有其他不喜欢 FQDN 用户名的 WinAPI 函数。