在我的程序中,我调用DsGetDcName来获取域控制器。
默认情况下,此函数不能确保返回的域控制器当前可用。相反,调用方应该尝试使用返回的域控制器。
我不能让域控制器“使用域控制器”,因为防火墙可能被打开
那么,我的问题is...how是否“尝试使用返回的域控制器”?
#include <Windows.h>
#include <DsGetDC.h>
#include <wchar.h>
#pragma comment(lib, "NetApi32.lib")
int main()
{
PDOMAIN_CONTROLLER_INFOW pdci{};
ULONG flags = DS_DIRECTORY_SERVICE_REQUIRED;
DWORD dwRet = DsGetDcNameW(NULL, NULL, NULL, NULL, flags, &pdci);
wprintf(L"%s\n", pdci->DomainControllerName);
}
发布于 2022-02-07 04:18:06
我假设您获得域控制器的名称,因为您想用它来做一些事情。所以做你想做的事吧。你不需要做什么特别的事。
这句话只是一个警告,当您的代码第一次做一些与DC联系的事情时,您应该处理DC不活动的情况。在这种情况下,您可以执行文档接下来提到的内容:
如果域控制器不可用,调用方应再次调用DsGetDcName函数,指定标志。
然后你可以用那个新DC再试一次。
实际上,这将是一个非常罕见的案例。标志解释了为什么:
当未指定DS_FORCE_REDISCOVERY标志时,DsGetDcName可返回缓存的域控制器数据。
因此,如果计算机已经使用了特定的DC,那么DsGetDcName
将返回该DC,而不检查它是否仍然可用。这意味着,实际上,DsGetDcName
将返回无法联系的DC的唯一时间是突然无法联系到DC,这可能是网络问题,甚至是正在退役的DC。
https://stackoverflow.com/questions/71009967
复制相似问题