我需要连接到同一网络中另一个域的rootDSE。我引用了此Microsoft Forum Thread中的解决方案。我使用以下代码建立连接。
hr = ADsOpenObject(L"LDAP://DC1.domain.com/rootDSE",
L"admin",
L"password",
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(void**)&pObject);
if(!SUCCEEDED(hr)){
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
std::wcout<<errMsg<<L"\n";
}
我无法连接到rootDSE,错误消息(errMsg):
服务器无法运行。
答案 0 :(得分:0)
无法访问域控制器。测试与服务器的网络连接。
AD可以使用4个端口中的任何一个:
您可以从PowerShell测试网络连接:
(new-object Net.Sockets.TcpClient).Connect("DC1.domain.com", 389)
没有输出意味着成功。如果它失败了,它会告诉你。如果端口389不起作用,请尝试其他端口。如果其中一个有效,您可以在LDAP路径中指定:"LDAP://DC1.domain.com:3268/rootDSE"
答案 1 :(得分:0)
我使用以下LDAP模式完成了连接到同一网络中另一个域的rootDSE:
"LDAP://win2k3/rootDSE"
注意:我的DC的NETBIOS名称是win2k3。 win2k3属于另一个域,但与我的计算机位于同一网络中。
IADs *pObject;
HRESULT hr;
CoInitialize(NULL);
hr = ADsOpenObject(L"LDAP://<DC-NETBIOS>/rootDSE",
username,
password,
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(void**)&pObject);
if (hr == S_OK) printf("\nBind to rootDSE success\n");
else {
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
std::wcout << L"Hresult: " << errMsg << L"\n";
}