gpt4 book ai didi

c++ - 带有 NameFullyQualifiedDN 的 GetUserNameEx 在 3-4 秒内没有返回,为什么?

转载 作者:行者123 更新时间:2023-11-28 08:06:27 25 4
gpt4 key购买 nike

我有一个非常奇怪的问题和一个关于可能的解决方案的问题。我需要从用 C++ 编写的程序(使用 native WinAPI)在 Windows 计算机上获取完全限定的专有名称。为此,我使用以下 API:

TCHAR buff[256];
DWORD dwSz = 256;
GetUserNameEx(NameFullyQualifiedDN, buff, &dwSz);

如果我从用户模式进程(从用户桌面)运行上面的代码,它在任何时候都不会工作。但是当我从系统服务调用该 API 时,它不会返回 3-4 秒! (我应该说上面的代码可能会在不是 Active Directory 域成员的系统上调用。)

所以我的第一个问题是,为什么从服务调用它会成为问题?

第二个问题,如果我在服务启动时调用该 API,然后将结果缓存在全局变量中,然后改用它,那么该系统上的专有名称发生变化的可能性有多大?

最佳答案

如果系统不是域的成员,API 调用将失败。

当您将它作为本地系统而不是用户上下文运行时,究竟发生了什么很难说 - 我可能会从网络跟踪开始,看看发生了什么。

我不会假设用户的 DN 是静态的。这是管理员可以随时更改的内容。

添加 DsCrackNames 工作流程:

  1. 调用 DsBind - 将 NULL 传递给前两个参数以获得句柄
  2. 使用 #1 中的句柄、DS_NAME_NO_FLAGSDS_FQDN_1779_NAME 和计算机名称调用 DsCrackNames。您可能需要在机器名称上附加一个 $。
  3. 调用 DsFreeNameResult 以免泄露结果
  4. 调用 DsUnBind 这样你就不会泄露 #1 的句柄

关于c++ - 带有 NameFullyQualifiedDN 的 GetUserNameEx 在 3-4 秒内没有返回,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com