【问题标题】:What's wrong with GetUserName Win32 API?GetUserName Win32 API 有什么问题?
【发布时间】:2009-06-05 01:56:04
【问题描述】:

我正在使用 GetUserName Win32 API 来获取我的计算机的用户名,但是当我在家时使用我的 VPN 连接工作时,我发现用户名不同(仅大写和小写)。我想知道 VPN 客户端或其他软件是否会影响用户名?

【问题讨论】:

  • 不知道是否重要,但仅供参考:Windows 将用户名视为不区分大小写。
  • 我们也有类似的经历 - 在某些系统上,用户名是大写的,而在其他系统上 - 小写。我们通过无条件地将此函数返回的名称小写来解决了这个问题 - Windows 无论如何都会以不区分大小写的方式处理它。

标签: windows winapi


【解决方案1】:

GetUserName API 声明:

检索用户名 与当前线程相关联。

使用 GetUserNameEx 函数 检索指定的用户名 格式。附加信息是 由 IADsADSystemInfo 提供 界面。

所以看起来 GetUserName 使用 IADsADSystemInfo 来获取它的信息。

如果您查看IADsADSystemInfo 接口,您会发现它有方法:

获取用户名
检索活动 目录的专有名称 当前用户,即登录的用户 用户或由 调用线程。

因此,当您通过 VPN 连接到域登录时,您很可能会获得当前用户的 Active Directory 专有名称,而如果您没有,您很可能会获得您输入的用户名(无论您输入什么in) 登录计算机。

【讨论】:

  • 使用IADsADSystemInfo获取用户名信息。返回用户名是这样的“EN=WYG,OU=XXX Address Lists,DC=apac,DC=XXX,DC=crop”。
【解决方案2】:

此 API 返回用户在登录计算机时键入的名称。因此,如果我的用户名是“esac”,但我输入了“Esac”,则此 API 将返回“Esac”。随后,如果我输入“ESAC”,它也会返回。

【讨论】:

    【解决方案3】:

    不是 100% 肯定,但我怀疑当您连接到域网络时 GetUserName 最终会与 DC 对话,否则它将使用本地答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多