2012-08-07 95 views
1

我想列出Windows用户帐户,但只列出在登录屏幕上显示的那些用户帐户,即在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),但仍有一些垃圾从日常用户的角度来看(如用于驱动程序供应商更新的帐户)。

+0

然后检查它们是否也存在。显然,如果他们不存在,他们不会被设置。 – Wug 2012-08-07 19:42:32

+0

检查是否存在?对不起,我没有得到你的答案。 – AlexSee 2012-08-07 19:49:03

+0

注册表项。 – Wug 2012-08-07 19:52:15

回答

1

该注册表项不是登录屏幕上可能未显示帐户的唯一原因。这里有几个人:

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

通常将SeInteractiveLogonRight授予来宾用户,以及管理员,用户和备份操作员组的成员。任何不属于其中一个组的成员的任何帐户(Guest除外)都可能不会显示在登录屏幕上。 (我不知道如果SeInteractiveLogonRight已经从这些群体中的一个取出发生了什么,我也不会感到惊讶,如果在登录屏幕上显示的帐户反正。)

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

相关问题