首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DsGetDcName和如何“尝试使用域控制器”

DsGetDcName和如何“尝试使用域控制器”
EN

Stack Overflow用户
提问于 2022-02-06 17:49:57
回答 1查看 310关注 0票数 1

在我的程序中,我调用DsGetDcName来获取域控制器。

微软的DsGetDcName文档说:

默认情况下,此函数不能确保返回的域控制器当前可用。相反,调用方应该尝试使用返回的域控制器。

我不能让域控制器“使用域控制器”,因为防火墙可能被打开

那么,我的问题is...how是否“尝试使用返回的域控制器”?

代码语言:javascript
运行
复制
#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);
}
EN

回答 1

Stack Overflow用户

发布于 2022-02-07 04:18:06

我假设您获得域控制器的名称,因为您想用它来做一些事情。所以做你想做的事吧。你不需要做什么特别的事。

这句话只是一个警告,当您的代码第一次做一些与DC联系的事情时,您应该处理DC不活动的情况。在这种情况下,您可以执行文档接下来提到的内容:

如果域控制器不可用,调用方应再次调用DsGetDcName函数,指定标志。

然后你可以用那个新DC再试一次。

实际上,这将是一个非常罕见的案例。标志解释了为什么:

当未指定DS_FORCE_REDISCOVERY标志时,DsGetDcName可返回缓存的域控制器数据。

因此,如果计算机已经使用了特定的DC,那么DsGetDcName将返回该DC,而不检查它是否仍然可用。这意味着,实际上,DsGetDcName将返回无法联系的DC的唯一时间是突然无法联系到DC,这可能是网络问题,甚至是正在退役的DC。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71009967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档