我刚刚编写了此代码段,用于列出所有本地用户以及他们的帐户是否使用密码(信用额度为Leniel Macaferi)
var users = (from ManagementObject user in new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount").Get()
where (uint)user["AccountType"] == UF_NORMAL_ACCOUNT && (bool)user["LocalAccount"] && !(bool)user["Disabled"] && (bool)user["LocalAccount"] && !(bool)user["Lockout"]
orderby (string)user["Name"] ascending
select new { UserName = (string)user["Name"], PasswordRequired = (bool)user["PasswordRequired"] }).ToArray();
foreach (var user in users)
Console.WriteLine("{0} (Requires password: {1})", user.UserName, user.PasswordRequired ? "YES" : "NO");
使用此代码时,有一个特定用户,即使此用户使用密码,其Win32_UserAccount.PasswordRequired
字段也设置为false
。通过系统控制更改密码以及设置空密码然后重置它并不会影响此标志,既不会退出然后再重新登录,也不会重新启动刷新此标志。另一方面,用户帐户控制总是说"密码保护"即使PasswordRequired
设置为false
,也会在此用户下方显示。
我实际上NetUserSetInfo
通过从用户的true
字段中移除UF_PASSWD_NOTREQD
标记来标记USER_INFO_2.usri2_flags
。这反过来改变了Win32_UserAccount.PasswordRequired
的值,但它并没有影响我的系统行为。事实上,无论这个标志是什么,我都要输入密码,我可以整天翻转这个标志并且它不会影响任何东西,所以我的问题:是否有一种可靠的方法来确定是否有一个特定用户正在使用密码?(解决方案最好不要求管理员权限。)