1

我想列出 Windows 用户帐户,但仅列出在登录屏幕上可见的用户帐户,即在 Windows 启动后显示的用户帐户。

我用谷歌搜索,我发现的一切都归结为这种方法: http ://www.mydigitallife.info/how-to-create-hidden-user-account-hide-user-account-from-welcome-screen-in-windows/

但是,在我的计算机上没有上述文章中提到的注册表项 - 我不想创建它们,我想检查已经存在的东西。

我使用以下查询:

List<string> list = new List<string>();

SelectQuery query = new SelectQuery("Win32_UserAccount");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);

foreach (ManagementObject obj in searcher.Get())
{
     if (isInteresting(obj))
     {
         list.Add(obj.GetPropertyValue("Name").ToString());
     }
}

通过上述查询返回的对象属性,我设法过滤了一些帐户(这些属性的完整列表:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa394507(v=vs. 85).aspx#properties),但从日常用户的角度来看,仍然存在一些垃圾(例如驱动程序供应商用于更新的帐户)。

4

1 回答 1

1

该注册表项并不是帐户可能不会显示在登录屏幕上的唯一原因。以下是其他一些:

  • 帐号已停用
  • 该帐户没有交互式登录权限 (SeInteractiveLogonRight)
  • 该帐户被明确拒绝交互式登录权限 (SeDenyInteractiveLogonRight)

通常 SeInteractiveLogonRight 被授予 Guest 用户以及 Administrators、Users 和 Backup Operators 组的成员。不属于这些组之一的任何帐户(Guest 除外)都可能不会显示在登录屏幕上。(我不确定如果 SeInteractiveLogonRight 已从这些组之一中删除会发生什么,如果登录屏幕仍然显示帐户,我不会感到惊讶。)

您可以使用LsaEnumerateAccountRights检查帐户是否应用了 SeDenyInteractiveLogonRight,或使用LsaEnumerateAccountsWithUserRight获取受影响帐户的列表。通常个人帐户而不是组被授予此权限,因此登录屏幕很可能以这种方式检查帐户。

于 2012-08-08T02:35:09.680 回答