小编bts*_*bts的帖子

使用Win32 API的Windows"真实"用户列表

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

这就是我已经做过的事情.

  • 打电话NetUserEnum()FILTER_NORMAL_ACCOUNT.

    我得到以下用户:

    • __ vmware_user __
    • 管理员
    • 帮助助手
    • ASPNET
    • 客人
    • SUPPORT_xxxxxx

    请注意,这与从命令行调用net user时获得的用户相同,但在登录对话框中,我只能选择Administrator.这就是我要的.

  • 从返回列表中NetUserEnum(),我可以判断哪些帐户被禁用.离开:

    • __ vmware_user __
    • 管理员
    • ASPNET
    • SUPPORT_xxxxxx
  • 然后我跑去LsaEnumerateAccountRights()检查哪些帐户有SeInteractiveLogonRight.

    所有人都拥有它.除了真实的,管理员.其中一些有SeDenyInteractiveLogonRight.这让我:

    • __ vmware_user __
    • 管理员(没有SeInteractiveLogonRight)

我发现可能首先要检查组权限,因为我的用户帐户可能正在继承SeInteractiveLogonRight.到目前为止,我还没有找到一种方法来列出给定帐户(SID或名称)的组.尝试NetUserGetGroups()但事实证明这个只返回域组(在我的情况下,"无").

现在我不知道还有什么可以尝试.看起来如果我有一个"访问令牌",一切都会更容易,但似乎没有办法为当前登录以外的用户获取.有20个与身份验证相关的不同API,这很疯狂.

我感谢您的帮助

winapi visual-c++

12
推荐指数
1
解决办法
3419
查看次数

标签 统计

visual-c++ ×1

winapi ×1