使用 Win32 API 的 Windows“真实”用户列表
Posted
技术标签:
【中文标题】使用 Win32 API 的 Windows“真实”用户列表【英文标题】:List of Windows "real" users using Win32 API 【发布时间】:2011-02-08 10:24:48 【问题描述】:我正在尝试获取本地计算机上的真实用户列表。真正的我的意思是用户 可以物理登录系统并使用它,不包括仅限远程帐户等。
这是我已经做的。
使用FILTER_NORMAL_ACCOUNT
致电NetUserEnum()
。
我有以下用户:
__ vmware_user __ 管理员 帮助助理 ASPNET 客人 支持_xxxxxx请注意,这与我从命令行调用 net user 时获得的用户相同, 但在登录对话框中我只能选择管理员。这就是我想要的。
从NetUserEnum()
的返回列表中,我可以知道哪些帐户被禁用。剩下的:
然后我运行LsaEnumerateAccountRights()
来检查哪些帐户拥有 SeInteractiveLogonRight。
他们都有。除了真正的,管理员。其中一些具有 SeDenyInteractiveLogonRight。 这给我留下了:
__ vmware_user __ 管理员(无 SeInteractiveLogonRight)我发现某处可能我应该首先检查组权限,因为我的用户帐户可能继承了 SeInteractiveLogonRight。到目前为止,我还没有找到一种方法来列出给定帐户(SID 或名称)的组。尝试使用NetUserGetGroups()
,但事实证明这个只返回域组(在我的情况下,“无”)。
现在我不知道还能尝试什么。如果我有一个“访问令牌”,看起来一切都会变得更容易,但除了当前登录的用户之外,似乎没有办法获得它。 大约有 20 种不同的与身份验证相关的 API,这太疯狂了。
感谢您的帮助
【问题讨论】:
【参考方案1】:如您所说,最后一步可能只是过滤属于管理员或用户组的用户。
尝试NetUserGetLocalGroups的方法来枚举用户所属的组。
【讨论】:
谢谢,成功了!我完全错过了这个 NetUserGetLocalGroups() 函数。 为了记录,我对问题的最终解决方案是使用此功能列出用户组,然后保留属于用户或管理员组的用户。我正在检查禁用本地登录的用户/组的权限,但结果是 Windows 将这些用户包含在登录列表中(尽管您实际上无法登录,因为它们已被禁用)。以上是关于使用 Win32 API 的 Windows“真实”用户列表的主要内容,如果未能解决你的问题,请参考以下文章
当前 Windows 版本中的 Win32 API 是不是仍然“原生”?
使用 Win32/C++ API 更改 Windows 7 壁纸(操作未实现异常)