winapi - 使用 Win32 API 的 Windows "real"用户列表

标签 winapi visual-c++

我正在尝试获取本地计算机上真实用户的列表。真正的我的意思是用户
可以物理登录系统并使用它的,不包括仅远程帐户等。

这就是我已经在做的。

  • 调用 NetUserEnum()FILTER_NORMAL_ACCOUNT .

    我得到以下用户:
  • __ vmware_user __
  • 管理员
  • 帮助助手
  • ASPNET
  • 客人
  • SUPPORT_xxxxxx

  • 请注意,这与我从命令行调用 net user 时获得的用户相同,
    但在登录对话框中我只能选择管理员。这就是我要的。
  • 来自 NetUserEnum() 上的退货列表,我可以知道哪些帐户被禁用。那留下:
  • __ vmware_user __
  • 管理员
  • ASPNET
  • SUPPORT_xxxxxx
  • 然后我运行 LsaEnumerateAccountRights()检查哪些帐户具有 SeInteractiveLogonRight。

    他们都有。除了真正的管理员,管理员。其中一些具有 SeDenyInteractiveLogonRight。
    这给我留下了:
  • __ vmware_user __
  • 管理员(无 SeInteractiveLogonRight)

  • 我发现某处可能我应该先检查组权限,因为我的用户帐户可能继承了 SeInteractiveLogonRight。到目前为止,我还没有找到列出给定帐户(SID 或名称)的组的方法。尝试过 NetUserGetGroups()但事实证明,这个只返回域组(在我的情况下,“无”)。

    现在我不知道还能尝试什么。如果我有一个“访问 token ”,看起来一切都会变得更容易,但除了当前登录的用户之外,似乎没有其他方法可以获取它。
    大约有 20 个不同的 API 与身份验证相关,这太疯狂了。

    我感谢您的帮助

    最佳答案

    正如您所说,最后一步可能只是过滤属于管理员或用户组的用户。

    试试方法NetUserGetLocalGroups用于枚举用户所属的组。

    关于winapi - 使用 Win32 API 的 Windows "real"用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4931852/

    相关文章:

    c++ - 访问 Windows 8/10 卷 OSD 颜色

    windows - WIN32 : Yielding execution to another (given) thread

    c - 从 GIMP 导出的 C 源文件加载图像

    c++ - 无法在 Windows 对话框上显示其他 unicode 东亚语言

    c++ - 在主程序和 QProcess 之间同步输出?

    c++ - 如何将事件处理程序添加到桌面窗口?

    c++ - 将 IP 地址从 sockaddr_in6 转换为 in_addr

    c++ - 了解 RegOpenKeyExA 参数

    c++ - 如何编译同时使用 windows.h 和 google glog (glog/logging.h) 的 C++ 程序?

    visual-studio - 是否始终在 Visual Studio 中使用多核 (/MP) 标志?