我的大部分经验都是使用C#...所以我还是习惯了C ++。
我正在尝试调用DsGetDomainControllerInfo来获取域中的所有域控制器。以下是该调用的MSDN文档的链接:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675987(v=vs.85).aspx
第四个参数返回应该在DS_DOMAIN_CONTROLLER_INFO_ *结构数组中的DC数。
我在数组中获得了第一个DS_DOMAIN_CONTROLLER_INFO_ *,但它在第二个上抛出了未处理的异常。最后一个论点是一个无效的** ......我正在努力,但我怀疑这是正确的做法。
这是我的代码:
PDOMAIN_CONTROLLER_INFO logonDomainController;
DsGetDcName(NULL, NULL, NULL, NULL, 0, &logonDomainController);
wstring domCon = logonDomainController->DomainControllerName;
wstring domNam = logonDomainController->DomainName;
HANDLE domHan;
DsBindWithCred(domCon.c_str(), domNam.c_str(), NULL, &domHan);
DWORD count = 0;
DS_DOMAIN_CONTROLLER_INFO_3 *dci[100] = { NULL };
DsGetDomainControllerInfo(domHan, domNam.c_str(), 3, &count, (void**)dci);
for (size_t i = 0; i < count; i++)
{
wcout << dci[i]->DnsHostName << endl;
}
答案 0 :(得分:1)
我将文档阅读为:您必须声明DS_DOMAIN_CONTROLLER_INFO_3 *dci;
并将其地址作为(VOID**) &dci
传递(在结果/“out”参数的意义上),因此dci
可以是由被调用者分配..INFO_3数组的基址。您仍然可以使用dci[i]
访问数组的元素。
我认为在阅读DsFreeDomainControllerInfo
函数的链接文档时会更清楚(它使用与“in”参数相同的指针)。